Skip to content

feat: Goal 타입에 달성률/통계 computed fields 추가 (#18)#23

Merged
robinjoon merged 3 commits intomainfrom
ticket/#18
Mar 6, 2026
Merged

feat: Goal 타입에 달성률/통계 computed fields 추가 (#18)#23
robinjoon merged 3 commits intomainfrom
ticket/#18

Conversation

@robinjoon
Copy link
Member

Summary

  • Goal GraphQL 타입에 totalTaskCount, completedTaskCount, achievementRate computed fields 추가
  • Task BC의 DataFetcher/DataLoader에서 응답 시 계산 (저장 없음, N+1 방지)
  • BC 간 참조 규칙 준수: Task BC가 Goal 타입 필드를 resolve

Changes

  • goal.graphqls — Goal 타입에 통계 필드 3개 추가
  • GoalTaskStats — 집계 도메인 모델 (achievementRate 계산 포함)
  • TaskRepository.countByGoalIds — GROUP BY 집계 쿼리
  • GoalTaskStatsDataLoader — batch loader로 N+1 방지
  • GoalTaskStatsDataFetcher@DgsData(parentType = "Goal") 으로 통계 필드 resolve

Test plan

  • GoalTaskStatsTest — achievementRate 계산 로직 (0%, 70%, 100%, 할일 없음)
  • TaskServiceTest — getStatsByGoalIds 위임 및 빈 입력 처리
  • 기존 전체 테스트 통과 확인

Closes #18

🤖 Generated with Claude Code

robinjoon and others added 3 commits March 6, 2026 20:03
Goal 조회 시 하위 Task 기반 통계(totalTaskCount, completedTaskCount,
achievementRate)를 응답 시 계산하여 반환한다. DataLoader로 N+1 방지.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Repository는 단순 조회(findAllByGoalIds)만 수행하고,
TaskService에서 Task 목록 기반으로 통계를 계산하도록 변경.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
집계 결과 DTO이므로 아키텍처 규칙에 따라 application/dto/에 배치.
GoalTaskStats → GoalTaskStatsDto로 이름 변경.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@robinjoon robinjoon merged commit 58e5639 into main Mar 6, 2026
1 check passed
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.

Goal 타입에 달성률/통계 computed fields 추가

1 participant