sequenceDiagram
participant Client
participant CTL as WatchlistApiController
participant UC as AddWatchlistUseCase
participant DS as WatchlistDomainService
participant Repo as WatchlistRepository
Client->>CTL: POST /api/v1/watchlist
CTL->>UC: execute(command)
UC->>DS: addItem(symbol)
DS->>Repo: findBySymbol(symbol)
alt 이미 존재
Repo-->>DS: WatchlistItem
DS-->>UC: 기존 항목 반환 (멱등)
else 신규
DS->>Repo: save(new WatchlistItem)
Repo-->>DS: WatchlistItem
end
UC-->>CTL: WatchlistResponse
CTL-->>Client: 200 OK
클래스 의존
flowchart LR
subgraph Presentation["presentation"]
WCTL[WatchlistApiController]
SCTL[StockApiController]
end
subgraph Application["application"]
AUC[AddWatchlistUseCase]
GUC[GetWatchlistUseCase]
RUC[RemoveWatchlistUseCase]
SUC[SearchStockUseCase]
end
subgraph Domain["domain"]
WDS[WatchlistDomainService]
SDS[StockDomainService]
WI[WatchlistItem]
ST[Stock]
end
WCTL --> AUC
WCTL --> GUC
WCTL --> RUC
SCTL --> SUC
AUC --> WDS
GUC --> WDS
RUC --> WDS
SUC --> SDS
WDS --> WI
SDS --> ST
테스트 케이스
신규 symbol을 추가하면 watchlist에 저장되고 200을 반환한다.
동일 symbol을 중복 추가해도 예외 없이 기존 항목을 반환한다(멱등).
DELETE /api/v1/watchlist/{symbol} 등록된 symbol이면 삭제 후 204를 반환한다.