Conversation
* feat: 스탬프 엔티티 end_date, total_missions, completed_missions 필드 추가 * feat: Flyway V4__add_columns_to_stamp.sql 파일 추가 * feat: 스탬프 종료일 검증 Policy 메서드 구현 * feat: 스탬프 종료일 ErrorCode 추가 * refactor: 스탬프 생성/수정 로직 리팩토링 * refactor: 미션 생성/삭제 로직 리팩토링 * refactor: 학습 로그 생성(미션 완료 기능 포함) 로직 리팩토링 * refactor: LoadStampDetailResponse DTO 리팩토링 * refactor: LoadStampInfoResponse DTO 리팩토링 * test: 스탬프 생성/수정, 미션 생성/삭제, 학습 로그 생성 테스트 코드 수정
chaiminwoo0223
approved these changes
Oct 15, 2025
Contributor
chaiminwoo0223
left a comment
There was a problem hiding this comment.
고생하셨습니다. 머지 부탁드립니다!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📌 작업 내용 및 특이사항
✅ Stamp 엔티티 새로운 필드 추가
Stamp엔티티에end_date(종료일),total_missions(총 미션 수),completed_missions(완료된 미션 수)필드를 추가했습니다.✅ DB 마이그레이션 파일 추가
V4__add_columns_to_stamp.sql파일을 추가했습니다.end_date필드는 선택 항목으로NULL값을 허용하고,total_missions와completed_missions필드는INT타입으로NOT NULL제약과 기본값DEFAULT(0)을 설정해주었습니다.✅ 스탬프 end_date 검증 메서드 및 에러코드 추가
StampPolicy.validateEndDate()메서드를 추가해, 요청한 스탬프 종료일이 과거 날짜인지/속한 여행의 종료일 이후인지를 검증하도록 구성했습니다.StampErrorCode.STAMP_END_DATE_CANNOT_BE_IN_PAST, 속한 여행의 종료일 이후일 경우StampErrorCode.STAMP_END_DATE_AFTER_TRIP_END_DATE_NOT_ALLOWED에러 코드를 정의하고, 상황에 맞게 체계적으로 처리했습니다.✅ 스탬프 total_missions, completed_missions 값을 증가/감소하는 메서드 구현
total_missions값을 1 증가하는increaseTotalMissions(T t)메서드를 추가했습니다.total_missions값을 1 감소하는decreaseTotalMissions(T t)메서드를 추가했습니다.completed_missions값을 전달받은 완료된 미션 개수 만큼 증가시키는increaseCompletedMissions(T t, int count)메서드를 추가했습니다.✅ 스탬프 상세 및 목록 조회 응답 DTO 리팩토링
LoadStampDetailResponse에end_date,total_missions,completed_missions필드를 추가했습니다.LoadStampInfoResponse에end_date,total_missions,completed_missions필드를 추가했습니다.✅ 스탬프 생성/수정 로직 리팩토링
[ 생성 ]
CreateStampRequest DTO에endDate필드를 추가했습니다.end_date는 요청 값으로,total_missions와completed_missions는 0으로 지정해 저장되도록 구성했습니다.[ 수정 ]
UpdateStampRequest DTO에endDate필드를 추가했습니다.✅ 미션 생성/삭제 로직 리팩토링
[ 생성 ]
total_missions필드의 값을 증가하도록 리팩토링 했습니다.[ 삭제 ]
total_missions필드의 값을 감소하도록 리팩토링 했습니다.✅ 학습 로그 생성 로직 리팩토링
DailyMission목록 조회 로직을getValidDailyMissionsWithMissionAndStampByIds()로 변경했습니다.해당 로직 내에서 여러 개의
Mission과 각Mission에 연결된Stamp정보가 필요하기 때문에,Fetch Join을 활용해 한 번의 쿼리로 필요한 데이터를 효율적으로 가져오도록 구현했습니다.Mission을 동일한Stamp로 집계해 연결된Stamp의completed_missions값을 미션 수 만큼 증가되도록 리팩토링했습니다.for문을 순회하며 각 미션들에 대한 검증/완료 처리를 수행하고, 스탬프의completed_missions필드는 집계해 증가하는 방식으로 설계했지만,벌크 연산 + 재연산방법으로 성능을 개선할 수 있는 방법도 있다고 해서 추후 리팩토링하면 좋을 것 같습니다.🌱 관련 이슈
🔍 참고사항(선택)
Stamp엔티티의total_missions,completed_missions필드가 0으로 초기화되면서 데이터 정합성 문제가 발생할 가능성이 있습니다.이 부분은 PR 적용 이후에, 모든
Stamp엔티티의total_missions와completed_missions값을 재계산하는 쿼리를 통해 해결해놓겠습니다.📚 기타(선택)