[STK7-03] BE — 종목 리스트 관심종목 상태 연동

작업 내용 (설계 의도)

변경 사항

현재 ListStocksUseCaseWatchlistDomainService를 참조하지 않아 모든 종목의 isInWatchlist가 항상 false다. WatchlistDomainService.findAll()을 호출해 관심종목 symbol set을 구성하고, 종목 리스트와 교차 조회하여 올바른 isInWatchlist를 반환한다.

watchlist 조회 실패(예외) 시 graceful degradation — 모든 isInWatchlist = false로 반환한다.

변경 파일:

  • stock/application/ListStocksUseCase.ktWatchlistDomainService 주입, 교차 조회 로직 추가

다이어그램

처리 흐름

sequenceDiagram
    participant C as Client
    participant UC as ListStocksUseCase
    participant SDS as StockDomainService
    participant WDS as WatchlistDomainService

    C->>UC: execute(page, size)
    UC->>SDS: listStocks(page, size)
    SDS-->>UC: (stocks, total)
    UC->>WDS: findAll()
    WDS-->>UC: List<WatchlistItem>
    UC->>UC: watchlistSymbols = items.map { it.symbol }.toSet()
    UC-->>C: StockListResponse(isInWatchlist 반영)

클래스 의존

flowchart LR
    ListUC["ListStocksUseCase"] --> StockDS["StockDomainService"]
    ListUC --> WatchlistDS["WatchlistDomainService"]

테스트 케이스

  • 관심종목에 등록된 symbol의 isInWatchlist = true로 반환된다
  • 관심종목에 없는 symbol의 isInWatchlist = false로 반환된다
  • 관심종목이 비어 있을 때 모든 종목 isInWatchlist = false 반환된다
  • WatchlistDomainService.findAll() 예외 발생 시 모든 isInWatchlist = false로 graceful 반환된다 (예외 전파 없음)
  • 페이지네이션(page, size) 동작이 변경 전후 동일하다