[STK8-05] Frontend: 포트폴리오 입력 UI + 손익 대시보드
작업 내용 (설계 의도)
“내 포트폴리오” 탭을 신설한다. 종목 코드 · 종목명 · 평균 매수가 · 보유 수량을 입력하여 등록하고, 현재가 대비 손익(금액 + 수익률)을 목록으로 표시한다.
각 종목 클릭 시 단기/중기/장기 탭으로 전환되며, 해당 horizon의 예측 차트와 매도 추천 정보(추천 주차, 예상 매도가, 예상 손익)를 표시한다.
Aggregator API:
GET /api/v1/portfolio→ 목록 + 손익POST /api/v1/portfolio→ 추가PUT /api/v1/portfolio/{symbol}→ 수정DELETE /api/v1/portfolio/{symbol}→ 삭제GET /api/v1/portfolio/{symbol}/analysis→ 예측 + 매도 추천
다이어그램
처리 흐름
sequenceDiagram participant U as 사용자 participant UI as Portfolio UI participant AGG as Aggregator U->>UI: "삼성전자, 50000원, 100주" 입력 후 추가 UI->>AGG: POST /api/v1/portfolio AGG-->>UI: ManualHoldingResponse UI->>AGG: GET /api/v1/portfolio AGG-->>UI: 목록 + 손익 (현재가 포함) U->>UI: 종목 클릭 → "단기" 탭 선택 UI->>AGG: GET /api/v1/portfolio/{symbol}/analysis AGG-->>UI: 예측 + 매도 추천
클래스 의존
flowchart LR PortfolioPage --> PortfolioList PortfolioPage --> AddHoldingModal PortfolioList --> HoldingRow HoldingRow --> AnalysisPanel AnalysisPanel --> ForecastChart AnalysisPanel --> SellRecommendationCard
테스트 케이스
- 포트폴리오 추가 폼에서 매수가 0 입력 시 유효성 오류가 표시된다
- 목록에서 수익 종목은 초록색, 손실 종목은 빨간색으로 표시된다
- 종목 클릭 후 단기/중기/장기 탭 전환이 동작한다
- 각 탭에서 매도 추천 카드(추천 주차, 예상 매도가, 예상 손익)가 표시된다
- 중복 symbol 추가 시 서버 오류 메시지가 화면에 표시된다
- 삭제 확인 모달 → 확인 클릭 시 항목이 목록에서 제거된다