Skip to content

Dashboard·Records 조회 API 구현 #8

Description

@foxihyun

✨ Description

Dashboard와 Records 화면에서 사용할 읽기 전용 조회 API를 구현합니다. 기존 Paycheck·TaxCheck·ExitCheck 저장 데이터를 집계하며, 별도 결과 테이블이나 인증·공통 사용자 정책은 추가하지 않습니다.

  • 담당: 박시현 (@foxihyun)
  • 작업 브랜치: feature/dashboard-records
  • 현재 진행 상태: 로컬 구현·테스트·스테이징 완료. 커밋·푸시·PR 생성 및 팀 리뷰는 남아 있습니다.
  • TaxCheck 이슈 TaxCheck 백엔드 API 구현 #5 / PR #7과 별도 작업입니다.

📌 구현 내용

Dashboard

  • GET /api/dashboard?year=2026 구현
  • 요청 연도의 Paycheck 실제 입금액(actual_amount)만 집계
  • 급여 기록 개월 수, 금액이 확인된 개월 수, 금액 미확인 기간 제공
  • 기록 없음·금액 미확인(null)과 확인된 0원 구분
  • 유형별 최신 기록 및 전체 최근 기록 3건 제공
  • 연도 필터는 급여 합계에만 적용하고, 최신 기록은 전체 연도 기준으로 조회
  • BigDecimal 사용, 총급여 대체·연간 금액 추정·세금 재계산 없음

Records

  • GET /api/records 통합 기록 조회 구현
  • 선택적 type=PAYCHECK|TAX_CHECK|EXIT_CHECK 필터 지원
  • 유형 필터와 무관한 전체·유형별 건수 제공
  • TYPE:id 기록 키로 서로 다른 테이블의 ID 충돌 방지
  • 분석 시각(없으면 생성 시각) 기준 정렬 및 동률 정렬 규칙 적용
  • 실제 저장된 결과만 조회하며, 저장하지 않는 시뮬레이션 결과는 제외

구조·예외·문서

  • domain/overview에 Controller·Service·Repository·DTO·Rule 분리
  • 기존 DataSource/JdbcTemplate 기반 읽기 전용 projection 사용
  • 미병합 TaxCheck·ExitCheck Java 엔티티에 대한 컴파일 의존 없이 구현
  • 공통 ApiResponse, 입력 검증, 사용자 없음 처리, 조회 응답 Cache-Control: no-store 적용
  • 조회 실패·원본 데이터 오류를 정상적인 빈 결과나 0원으로 숨기지 않음
  • API 명세 및 docs/DASHBOARD_RECORDS_IMPLEMENTATION.md 작성
  • 신규 테이블·운영 DDL·기록 삭제·기존 분석 결과 수정 없음

🧪 검증 결과

  • 규칙 테스트, Service 테스트, Dashboard/Records API 통합 테스트 작성
  • 개발자 로컬에서 .\gradlew.bat test --console=plain 실행 성공
    • 2026-09-02 09:55 KST 사용자 제공 실행 로그
    • BUILD SUCCESSFUL in 2m 37s
    • compileJava·compileTestJava·test 실행 확인
  • 스테이징 범위 확인: 16 files changed, 1013 insertions(+)
  • git diff --cached --check 오류 없음
  • .gradle·.idea 및 전달용 .patch 파일이 스테이징 범위에서 제외됨

구현 문서의 패키지 제작 환경에서 Gradle을 실행하지 못했다는 설명은 제작 당시 기록입니다. 이후 위 사용자 로컬 환경에서 전체 테스트 실행 성공을 확인했습니다. 이 결과는 GitHub CI 또는 실제 MySQL·프론트 연동 검증 완료를 뜻하지 않습니다.

⏳ 남은 작업 / 완료 조건

  • 본 이슈 번호를 포함한 커밋 및 원격 브랜치 푸시
  • dev 대상 별도 PR 생성
  • 코드 리뷰 및 지적 사항 확인·반영
  • 실제 소스 도메인 테이블이 준비된 환경에서 MySQL 통합 조회 검증
  • 팀 리뷰 후 병합

프론트의 localStorage를 API 호출로 교체하는 작업은 후속 연동 범위입니다.

⚠️ 의존성 및 데모 제한

  • 관련 작업: TaxCheck TaxCheck 백엔드 API 구현 #5 / PR feat: TaxCheck 분석 조회 및 시뮬레이션 API 구현 #5 #7, 온보딩·ExitCheck 태욱 백엔드 통합 구현 (온보딩·ExitCheck·챗봇) #4 / PR feat: 온보딩·ExitCheck·챗봇 연동 #4 #6.
  • 컴파일 의존은 분리했지만 실제 실행에는 users, paychecks, tax_checks, exit_checks 테이블과 필요한 컬럼이 있어야 합니다.
  • src/test/resources/dashboard-records-fixture-schema.sql은 격리된 H2 테스트용 보완 스키마입니다. 운영 마이그레이션이 아니며 운영 DB에 적용하지 않습니다.
  • 현재 userId·데모 헤더 방식은 인증 수단이 아닙니다. 공통 인증·데이터 접근 제어는 별도 합의 사항으로 남기며, 이 작업만으로 공개 URL에서 실제 개인정보·문서를 안전하게 처리할 수 있다고 간주하지 않습니다.
  • 개발·검증에는 합성 데이터를 사용하고, 공통 사용자 생성·초기화·삭제 정책 및 공개 실데이터 배포는 이번 범위에 포함하지 않습니다.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions