Skip to content

[GMSS-166] 카드 월별 조회 API 추가 - #49

Merged
seunghee17 merged 4 commits into
developfrom
feature/card-month-query
Aug 18, 2026
Merged

[GMSS-166] 카드 월별 조회 API 추가#49
seunghee17 merged 4 commits into
developfrom
feature/card-month-query

Conversation

@soyeonLee126

@soyeonLee126 soyeonLee126 commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator

작업 개요

보관함 상세 화면이 쓸 카드 월별 조회 API를 데이터 레이어에만 먼저 추가했습니다.

보관함 작업 전체를 담은 #43이 69개 파일까지 커져서 리뷰가 어려운 상태였습니다. 화면 코드와 독립적인 데이터 레이어를 1단계로 떼어 먼저 올립니다.

이 PR 카드 월별 조회 API (데이터 레이어)   16개 파일  +209
#51  보관함 목록 화면                      47개 파일  +393 / -1130
#43  보관함 상세, 물리 낙하 애니메이션     15개 파일  +1617

머지 순서는 이 PR을 먼저, 그다음 #51, 마지막에 #43입니다.

작업 유형

  • feat: 새 기능
  • fix: 버그 수정
  • refactor: 리팩토링 (동작 변경 없음)
  • build: 빌드/의존성 설정
  • chore: 기타 (문서, 설정 등)
  • test: 테스트 추가/수정

변경 사항

domain

  • CardEntry를 추가했습니다. 월별 조회는 요약 없이 날짜, 그날 순번, 감정만 다룹니다.
  • CardRepository.getCardsByMonth(yearMonth)를 추가했습니다.
  • GetCardsByMonthUseCase를 추가했습니다.

data

  • CardService에 월별 조회 엔드포인트를 추가했습니다.
  • CardCalendarResponse를 추가했습니다. 하루치 감정 목록을 카드 한 건씩으로 펼칩니다.
  • CardRepositoryImpl에 구현을 추가했습니다.

테스트

  • 월을 API 형식으로 조회하고 하루치 감정 목록을 카드 한 건씩으로 펼치는지 검증합니다.
  • 알 수 없는 감정을 버린 뒤를 기준으로 그날 순번을 세는지 검증합니다. 날짜별 조회도 같은 규칙이라 두 응답이 맞물려야 합니다.
  • 기존 CardRepository 구현 fake 8개 파일(9개 지점)에 새 메서드 override를 추가했습니다. 기존 getCardsByDate 동작은 그대로 두었습니다.

16개 파일, 209줄 추가, 삭제 0줄입니다. 기존 코드의 동작을 바꾸는 변경은 없습니다.

관련 이슈

  • 없음

관련 작업 (Notion)

스크린샷 / 동작 화면

UI 변경이 없습니다.

체크리스트

  • base 브랜치가 develop으로 설정되어 있다
  • 로컬 빌드 및 실행을 확인했다
  • 커밋 메시지가 컨벤션(feat:, fix: 등)을 따른다
  • 불필요한 로그/주석/디버그 코드를 제거했다
  • 리뷰어가 이해할 수 있도록 설명을 작성했다

데이터 레이어만 바뀌어 아직 호출하는 화면이 없습니다. 앱 실행 확인은 생략했고 ./gradlew detekt lint test로 검증했습니다. 전부 통과하며 새로 생긴 경고는 없습니다.

리뷰 요청 사항

두 곳을 봐주시면 좋겠습니다.

  1. CardCalendarResponse.toDomain()의 순번 계산입니다. 알 수 없는 감정을 버린 뒤를 기준으로 세도록 했습니다. 날짜별 조회도 같은 규칙이라 두 API가 같은 카드에 같은 순번을 줘야 합니다.
  2. fake에 추가한 override를 error(...)로 둔 선택입니다. 현재 월별 조회를 호출하는 테스트가 없어 호출되면 바로 드러나게 했습니다. 빈 목록을 돌려주는 편이 낫다면 바꾸겠습니다.

보관함 상세가 오늘 하루치가 아니라 고른 달 전체를 보여줘야 해서, 서버의
GET /api/cards/monthly(yearMonth=yyyy-MM)를 붙였다. YearMonth.toString()이
서버가 요구하는 yyyy-MM 그대로라 포맷터는 두지 않았다.

이 응답에는 카드 식별자가 없고 날짜별 대표 감정 목록만 온다. 그래서 카드 한 건의
신원을 날짜와 그날 순번(CardEntry.indexInDate)으로 잡았다. 순번은 알 수 없는 감정을
걸러낸 뒤를 기준으로 센다. 날짜별 조회(getCardsByDate)도 같은 기준으로 걸러내므로,
나중에 요약 같은 상세가 필요해지면 날짜로 다시 조회해 그 순번의 카드를 그대로 찾을
수 있다.
어노테이션이 없어 getCardsByMonth 의 날짜 파싱과 펼치기를 검증하는
유일한 테스트가 실행되지 않았다.
날짜별 조회는 못 읽는 날짜의 카드만 버리는데 월별 조회는 LocalDate.parse 가
그대로 던져 그 달이 전부 실패했다. 두 응답의 필터 기준이 어긋나면
CardEntry.indexInDate 가 서로 다른 카드를 가리킨다.
CardRepository 구현 fake 6개가 각자 메서드 6종을 손으로 썼다. 인터페이스에
메서드를 하나 추가할 때마다 테스트 파일을 전부 건드려야 했다.

@seunghee17 seunghee17 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인했습니다

@seunghee17
seunghee17 merged commit a6f99d2 into develop Aug 18, 2026
6 checks passed
@seunghee17
seunghee17 deleted the feature/card-month-query branch August 18, 2026 11:07
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