# 계좌

모든 계좌 API는 **인증 필요**예요. 토큰 주인의 계좌만 보여요.

| 메서드 | 경로                        | 설명                            |
| ------ | --------------------------- | ------------------------------- |
| GET    | `/v1/accounts/buying-power` | 잔고(주문가능금액)              |
| GET    | `/v1/accounts/holdings`     | 보유종목                        |
| GET    | `/v1/accounts/profile`      | 프로필                          |
| PATCH  | `/v1/accounts/profile`      | 표시 이름 변경                  |
| GET    | `/v1/me`                    | 토큰 확인(사용자 id, 인증 방식) |

## 잔고

`GET /v1/accounts/buying-power`

```json
{ "cashBalance": 287450 }
```

`cashBalance`는 현금 잔고예요. 지정가 대기 주문은 돈을 미리 묶어두지 않아서, 대기 주문이 있어도 이 값은 줄지 않아요. 대신 지정가가 체결되는 순간 잔고가 모자라면 체결되지 않고 계속 대기해요.

## 보유종목

`GET /v1/accounts/holdings`

```json
[
  {
    "symbol": "FOXX",
    "species": "여우",
    "quantity": 10,
    "avgCost": 1180.5,
    "lastPrice": 1234,
    "marketValue": 12340,
    "unrealizedPnl": 535
  }
]
```

| 필드            | 설명                                          |
| --------------- | --------------------------------------------- |
| `quantity`      | 보유 수량                                     |
| `avgCost`       | 평균 매입단가(소수 가능)                      |
| `marketValue`   | 평가금액 = `quantity × lastPrice`             |
| `unrealizedPnl` | 평가손익 = `marketValue − quantity × avgCost` |

총 평가자산은 `cashBalance + Σ marketValue`, 총수익은 거기서 시작 자금 300,000원을 뺀 값이에요(웹 프로필 화면과 같은 계산).

## 프로필

`GET /v1/accounts/profile` → `{ "id": "...", "displayName": "호야" }`

`PATCH /v1/accounts/profile` 바디 `{ "displayName": "새 이름" }` (1~40자). 커뮤니티 글 작성자 이름으로 쓰여요.

## 토큰 확인

`GET /v1/me`

```json
{ "userId": "8b6b74e7-...", "isAdmin": false, "authMethod": "api_key" }
```

`authMethod`는 `api_key`(API 키 토큰) 또는 `session`(웹 로그인 토큰)이에요.
