Skip to content

feat: today 대시보드 Agent 추천 요약 - #119

Merged
chaeliki merged 3 commits into
mainfrom
feat/15-dashboard-recommendations
Aug 8, 2026
Merged

feat: today 대시보드 Agent 추천 요약#119
chaeliki merged 3 commits into
mainfrom
feat/15-dashboard-recommendations

Conversation

@chaeliki

@chaeliki chaeliki commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

왜 필요한가요?

Refs #15

recommendations를 추가합니다. 이걸로 GET /dashboard/today의
6개 명세 필드(summaryCounts, priorityTasks, upcoming7Days,
recommendations, approvalCount, workerResponseCount)가 모두 완성됩니다.

완료된 범위

  • DashboardRecommendationItemResponse, DashboardRecommendationsResponse DTO
  • DashboardQueryService.collectRecommendations(): prepared/review/
    after_approval 3개 그룹 + connected_count
  • TaskRepository에 countOpenTasksByCompanyId() 전용 카운트 쿼리 추가
    (처음엔 findOpenTasks()로 전체 목록을 가져와 size()만 쓰는 비효율적인
    방식이었으나, 리뷰 과정에서 전용 쿼리로 교체)
  • DashboardTodayResponse에 recommendations 필드 추가
  • timezone 생략 시 기본값을 Asia/Seoul로 지정 (기존 UTC 기본값)
    • feat: today 대시보드 핵심 API (GET /dashboard/today) #114 리뷰에서 발견된 버그: 서버 Clock이 UTC라, 한국 시간 자정~오전 9시
      사이에는 서버가 계산하는 "오늘"이 실제 한국 날짜보다 하루 전으로
      계산되어 due_today가 부정확했음
    • DashboardQueryServiceTest 단위 테스트 추가 (Clock.fixed()로
      UTC 자정~9시 사이 시점 고정, 한국 날짜로 정확히 계산되는지 검증)

결정 사항

  • description은 서버가 만들지 않고 status만 내려줍니다.

로컬 Demo Seed로 실제 검증

-connected_count=18, prepared=3건이 현재 프론트 화면(Task API 기반
임시 계산)과 일치했습니다. review는 API가 6건, 화면은 4건으로
차이가 있는데, 이는 프론트 dashboardData.ts의 buildAgentPrepared()가
review를 slice(0, 4)로 최대 4건까지만 자르기 때문으로 보입니다
(서버는 전체를 반환, 화면 표시 개수 제한은 프론트 책임으로 판단). -> 정렬추가 후속pr예정

어떻게 검증했나요?

  • ./gradlew clean test — 전체 통과
  • recommendationsConnectedCountMatchesOpenTasks
  • recommendationsReviewIncludesReadyForReviewTask
  • recommendationsPreparedAndAfterApprovalAreEmptyByDefault
  • 로컬 Demo Seed로 서버 직접 실행, GET /dashboard/today 실제 호출로
    recommendations 필드 검증
  • dueTodayUsesKoreaDateWhenTimezoneOmitted (단위 테스트, Clock 고정으로
    UTC/KST 날짜 불일치 시나리오 재현 및 수정 검증)

@chaeliki
chaeliki requested a review from hywznn August 8, 2026 11:03
@hywznn

hywznn commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

(서버는 전체를 반환, 화면 표시 개수 제한은 프론트 책임으로 판단).

이 부분 프론트단에서 정렬을 잘 한다면 상관없겠지만 음 예를 들어서 오늘 마감 업무가 먼저 보여야하는건 사실이니까 ..
일단 #115 머지 된다는 가정하에 이 부분 한 번 수정해보시겠어요
그래도 서버단에서 여러 업무 마감 상태들을 IN조건으로 정렬해서 넘겨주는게 좋긴 하니까요

Comparator<Task> priorityOrder = Comparator
        .comparing(Task::dueDate, Comparator.nullsLast(Comparator.naturalOrder()))
        .thenComparing(Task::createdAt, Comparator.reverseOrder());

reviewTasks.sort(priorityOrder);
afterApprovalTasks.sort(priorityOrder);

DashboardQueryService.java 98~116줄

Base automatically changed from feat/15-dashboard-upcoming-expiry to main August 8, 2026 13:14
@chaeliki
chaeliki force-pushed the feat/15-dashboard-recommendations branch from 5d3750b to fed6262 Compare August 8, 2026 13:14
@chaeliki

chaeliki commented Aug 8, 2026

Copy link
Copy Markdown
Contributor Author

넵! pr stack중이라 코멘트 달아주신 내용 참고해서 다음 pr에 추가 올리겠습니다.

@hywznn

hywznn commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

@chaeliki
chaeliki force-pushed the feat/15-dashboard-recommendations branch from fed6262 to b5163fe Compare August 8, 2026 14:04
@chaeliki
chaeliki merged commit 17eba6c into main Aug 8, 2026
4 of 6 checks passed
@chaeliki
chaeliki deleted the feat/15-dashboard-recommendations branch August 8, 2026 14:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants