# BatchuKis API Specification

이 문서는 프론트엔드와 백엔드 간의 통신을 위한 API 인터페이스 명세서입니다. 

---

## 1. 설정 및 시스템 (Settings & System)

### 1.1 전체 설정 (Global Settings)
- **URL**: `GET /api/settings` / `POST /api/settings`
- **Description**: KIS API 키, 서비스 활성화 여부 등 전체 앱의 사용자 설정을 관리합니다.
- **Body (POST)**: `ApiSettings` object.

### 1.2 AI 엔진 관리 (AI Configurations)
- **URL**: `GET /api/settings/ai-configs` / `POST /api/settings/ai-configs`
- **Description**: 사용자 지정 AI 프로필(Gemini, Ollama 등) 목록을 관리합니다.
- **PUT/DELETE**: `PUT /api/settings/ai-configs/:id`, `DELETE /api/settings/ai-configs/:id`

---

## 2. 계좌 및 자산 (Account & Portfolio)

### 2.1 계좌 요약 (Account Summary)
- **URL**: `GET /api/account/summary`
- **Response**: `{ "totalAssets": number, "buyingPower": number, "dailyProfit": number, "dailyProfitRate": number }`

### 2.2 보유 자산 (Holdings)
- **URL**: `GET /api/holdings`
- **Query**: `?market=Domestic|Overseas`
- **Response**: `HoldingItem[]`

---

## 3. 관심종목 관리 (Watchlist)

### 3.1 그룹 관리 (Watchlist Groups)
- **URL**: `GET /api/watchlists` / `POST /api/watchlists`
- **PUT/DELETE**: `PUT /api/watchlists/:id` (그룹명 수정 및 종목 코드 리스트 업데이트), `DELETE /api/watchlists/:id`
- **Response**: `WatchlistGroup[]`

---

## 4. 종목 및 시세 (Market Data)

### 4.1 종목 검색 및 마스터 (Stock Discovery)
- **URL**: `GET /api/stocks/search?query=...`
- **URL**: `GET /api/kis/master-stocks?market=...` (로컬 검색성능을 위한 대량 데이터 수동 동기화용)

### 4.2 시세 및 차트 (Quotes & Charts)
- **URL**: `GET /api/kis/quotes/:code` (현재가 및 호가)
- **URL**: `GET /api/kis/ticks/:code?limit=...` (차트용 틱 데이터)

### 4.3 발견 및 랭킹 (Market Discovery)
- **URL**: `GET /api/discovery/rankings?market=...&category=...` (거래량, 상승률 등)

---

## 5. 뉴스 및 AI 분석 (News & AI Intelligence)

### 5.1 뉴스 스크랩 (News Feed)
- **URL**: `GET /api/news?query=...`
- **Description**: 네이버 API 등을 통해 실시간 금융 뉴스를 가져옵니다.

### 5.2 AI 뉴스 분석 (AI News Briefing)
- **URL**: `POST /api/ai/analyze-news`
- **Body**: `{ "aiConfigId": string, "headlines": string[] }`
- **Response**: `{ "report": string, "sentimentMetadata": any[] }`

### 5.3 AI 종목 분석 (AI Stock Deep-Dive)
- **URL**: `POST /api/ai/analyze-stock`
- **Body**: `{ "aiConfigId": string, "stockCode": string, "context": any }`

---

## 6. 주문 및 거래 (Trading & History)

### 6.1 수동 주문 (Manual Trading)
- **URL**: `POST /api/trade/order`
- **Body**: `{ "code": string, "type": "BUY"|"SELL", "quantity": number, "price": number, "orderType": "MARKET"|"LIMIT" }`

### 6.2 예약/감시 주문 (Reserved Orders)
- **URL**: `GET /api/reserved-orders` / `POST /api/reserved-orders`
- **DELETE**: `DELETE /api/reserved-orders/:id`

### 6.3 자동매매 전략 (Auto Trading)
- **URL**: `GET /api/auto-trades` / `POST /api/auto-trades`
- **Description**: AI 전략 로봇 등록 및 상태 관리.

### 6.4 거래 기록 (Execution History)
- **URL**: `GET /api/history/orders`
- **Query**: `?page=...&limit=...&stockCode=...&startDate=...&endDate=...`
- **Response**: `TradeOrder[]`

---

## 7. 실시간 데이터 (Real-time Data - WebSockets)

백엔드는 KIS 실시간 시세 서버와 웹소켓을 유지하며, 프론트엔드에게 가공된 데이터를 스트리밍합니다.

### 7.1 실시간 체결가 (Real-time Price)
- **Topic**: `/ws/market/price/:code`
- **Data**: 현재가, 등락률, 거래량 등

### 7.2 실시간 주문 알림 (Order Notifications)
- **Topic**: `/ws/trade/events`
- **Data**: 자신의 계좌에서 발생하는 체결 알림, 미체결 취소 알림 등

---

## 8. 내부 서비스 인터페이스 (Internal Engine Services)

프론트엔드에 노출되지 않지만, 백엔드 엔진 내부 모듈 간의 협업 또는 외부 API 래핑을 위한 서비스 인터페이스입니다.

### 8.1 BrokerageInterface (증권사 서버 통신)
- **`PlaceOrder(stockCode, side, qty, price, type)`**: KIS 서버로 최종 주문 패킷 전송. (Returns: `orderNo`)
- **`GetRealtimeApprovalKey()`**: 실시간 웹소켓 접속용 **Approval Key** 발급 및 갱신.
- **`FetchHoldings()`**: 계좌 내 전 종목 보유 및 평단가 수집.

### 8.2 RealtimeManager (웹소켓 데이터 관리)
- **`AddSubscription(code, source)`**: 구독 요청 (`source`: 'HOLDING' | 'FRONTEND').
  - **Logic**: 해당 종목의 Reference Count 증가. `Count == 1`이 되는 순간 KIS 웹소켓 구독 전송.
- **`RemoveSubscription(code, source)`**: 구독 해제 요청.
  - **Logic**: Reference Count 감소. `Count == 0`이 되면 KIS 웹소켓 구독 해제(자원 절약).
- **`OnStreamReceived(data)`**: 수신된 로우 데이터를 파싱하여 필요 모듈(`AutoTrader`, `FrontendWS`)로 브로드캐스팅.

### 8.3 AiOrchestrator (AI 엔진 처리 핸들러)
- **`RequestAnalysis(aiConfigId, prompt)`**: 지정된 엔진 프로필을 사용하여 원격 AI API 호출.
- **`ApplySentiment(newsId, result)`**: 분석된 심리 결과를 DB(`news_cache`)에 업데이트 및 프론트 전송.

### 8.4 Scheduler (배치 작업 제어)
- **`SyncMasterStocks()`**: 매일 새벽 종목 명칭 및 코드 리스트 동기화.
- **`PersistMarketDataCache()`**: 메모리에 수신된 실시간 현재가를 주기적으로 DB에 영구 저장 (API 호출 없음).
- **`RefreshNaverNews()`**: 10분 단위 키워드별 뉴스 스크랩 및 분석 트리거.

---

## 9. KIS API Integration Map (증권사 연동 맵)

`BrokerageInterface`가 실제 호출해야 할 한국투자증권(KIS) Open API 엔드포인트 매핑입니다.

| Category | Internal Function | Domestic API (국내) | Overseas API (해외) | Note |
| :--- | :--- | :--- | :--- | :--- |
| **Auth** | `GetAuthToken` | `/oauth2/tokenP` | (Common) | OAuth2 Access Token |
| **Auth** | `GetWebsocketKey` | `/oauth2/approval` | (Common) | WebSocket Approval Key |
| **Order** | `PlaceOrder` | `/uapi/domestic-stock/v1/trading/order-cash` | `/uapi/overseas-stock/v1/trading/order` | 현금 매수/매도 |
| **Order** | `ModifyOrder` | `/uapi/domestic-stock/v1/trading/order-rvsecncl` | `/uapi/overseas-stock/v1/trading/order-rvsecncl` | 정정/취소 |
| **Price** | `GetCurrentPrice` | `/uapi/domestic-stock/v1/quotations/inquire-price` | `/uapi/overseas-stock/v1/quotations/price` | 현재가 조회 |
| **Price** | `GetDailyChart` | `/uapi/domestic-stock/v1/quotations/inquire-daily-price` | `/uapi/overseas-stock/v1/quotations/daily-price` | 일봉 데이터 |
| **Balance** | `FetchHoldings` | `/uapi/domestic-stock/v1/trading/inquire-balance` | `/uapi/overseas-stock/v1/trading/inquire-balance` | 잔고 조회 |
| **Socket** | `RealtimePrice` | `/tryit/H0STCNT0` (H0STCNT0) | `/tryit/HDFSCNT0` (HDFSCNT0) | 실시간 체결가 |
