Skip to content

feat: 여행 기능 구현(#16)#22

Merged
hisonghy merged 1 commit intodevelopfrom
feat/16
Jul 10, 2025
Merged

feat: 여행 기능 구현(#16)#22
hisonghy merged 1 commit intodevelopfrom
feat/16

Conversation

@hisonghy
Copy link
Contributor

@hisonghy hisonghy commented Jul 9, 2025

📌 작업 내용 및 특이사항

✅ 도메인, 모델 구현

  • Trip, Stamp 엔티티 구현
  • TripCategory enum 모델 구현
  • 새로운 엔티티 객체를 생성하는 Factory 클래스와 메서드 추가 (TripFactory, StampFactory)

✅ DateUtil 클래스 추가

  • LocalDate, LocalDateTime 타입의 파싱, 포맷을 처리하는 유틸 클래스 추가

✅ 여행 관련 기능 구현

여행 카테고리 목록을 조회하는 API를 제외한 모든 여행 관련 API는 인증이 필요합니다.

1️⃣ 여행 카테고리 목록 조회

  • TripCategory enum의 COURSE(코스형)EXPLORE(탐험형) 항목을 조회하는 API 구현

2️⃣ 여행 생성

  • 유효한 요청 데이터로 여행과 스탬프를 함께 생성하는 API 구현
  • 여행 생성 검증 항목
1. 여행 카테고리에 따른 종료 날짜 유효성 검증
2. 여행의 시작 날짜, 종료 날짜 유효성 검증
3. 최소 스탬프 개수 검증
4. 각 스탬프의 마감일 검증
5. 여행 카테고리별 스탬프 순서 중복, 범위 검증

3️⃣ 여행 수정

  • 특정 여행 ID로 수정할 수 있는 API 구현
  • PATCH 요청으로 수정이 필요한 필드만 수정할 수 있도록 구현
  • 여행 카테고리가 변경될 경우 카테고리에 따라 스탬프 순서를 조정하도록 구성
  • 여행 수정 검증 항목
1. 여행 소유자 검증
2. 변경된 여행 종료일
3. 삭제된 여행인지 여부 검증

4️⃣ 여행 삭제

  • ⭐ 추후 관련 엔티티가 구성되면 연쇄적으로 soft delete 되도록 업데이트 예정
  • 특정 여행 ID로 삭제하는 API 구현
  • 여행 삭제 요청 시 deletedAt 필드를 수정하도록 구성
  • 여행 삭제 검증 항목
1. 여행 소유자 검증

5️⃣ 여행 목록 조회

  • 인증된 멤버의 여행 목록을 조회하고, 삭제된 여행은 제외되도록 구성
  • 페이지네이션(page, size) 기반으로 데이터를 반환하고 hasNext() 정보를 함께 제공하도록 구성
  • 각 여행의 endDate 필드로 D-DAY 값을 계산하고, totalStamps, completedStamps 필드로 progress(진행률) 값을 계산해 함께 응답하도록 구성

6️⃣ 여행 상세 조회

  • 특정 여행 ID를 기반으로 여행 상세 정보와 해당 여행에 포함된 스탬프 목록을 함께 조회할 수 있도록 구현
  • 여행 목록 조회와 동일하게 D-DAY, progress 정보를 함께 응답하도록 구성

✅ 테스트

  • 통합 테스트에서 인증이 필요한 요청 테스트를 위해 TokenTestHelper 클래스 구성
  • 테스트에서 다양한 테스트 멤버를 생성할 수 있도록 MemberFixture 클래스에 createMemberFromKakao(email, nickname), createMemberFromKakaoWithId(id) 메서드 추가
  • Trip 및 Stamp 기능 테스트에서 공통으로 사용되는 객체와 메서드를 관리하는 FixtureHelper 클래스 추가
  • TripControllerIntegrationTest 통합 테스트 추가
  • TripServiceTest 단위 테스트 추가
  • StampServiceTest 단위 테스트 추가

🌱 관련 이슈


🔍 참고사항(선택)


📚 기타(선택)

  • application 계층의 dto 도입은 추후 리팩토링 사항이지만, 여행 관련 기능에서 D-DAY, progress 같은 부가 정보를 일관되게 응답되도록 application.dto 를 구성했습니다. 이 부분은 추후 리팩토링 단계에서 자세히 다루면 좋을 것 같습니다
  • 완성된 디자인을 보고 수정해야할 부분이 있으면 수정하도록 하겠습니다

@hisonghy hisonghy self-assigned this Jul 9, 2025
@hisonghy hisonghy added the ✨feature 구현, 개선 사항 관련 부분 label Jul 9, 2025
@hisonghy hisonghy force-pushed the feat/16 branch 2 times, most recently from fc2841d to a19b6d9 Compare July 9, 2025 16:12
Copy link
Contributor

@chaiminwoo0223 chaiminwoo0223 left a comment

Choose a reason for hiding this comment

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

고생하셨습니다. 궁금한 내용이 있어 코드 리뷰를 남겼습니다. 확인 부탁드립니다.

Copy link
Contributor

@chaiminwoo0223 chaiminwoo0223 left a comment

Choose a reason for hiding this comment

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

모두 확인했습니다. 머지 부탁드려요!

@hisonghy
Copy link
Contributor Author

hisonghy commented Jul 10, 2025

모두 확인했습니다. 머지 부탁드려요!

커밋 병합 후에 병합하겠습니다

* feat: Trip 모델 구현
* feat: TripCategory enum 구현
* feat: Stamp 모델 구현

* feat: DateUtil 유틸리티 클래스 추가

* feat: 여행 카테고리 목록 조회 기능 구현
* feat: 여행 생성 시 스탬프 함께 생성되도록 기능 구현
* feat: 여행 수정, 스탬프 순서 수정 구현
* feat: 여행 삭제 기능 구현
* feat: 멤버 여행 목록 조회 기능 구현
* feat: 특정 여행 조회 및 해당 스탬프 목록 조회 기능 구현

* test: Fixture 클래스 추가 (TripFixture, CreateTripRequestFixture, UpdateTripRequestFixture, StampFixture, CreateStampRequestFixture)
* test: Helper 클래스 추가 (TripTestHelper, TokenTestHelper)
* test: TripControllerIntegrationTest - 통합 테스트 추가
* test: TripServiceTest - 단위 테스트 추가
* test: StampServiceTest - 단위 테스트 추가
* test: MemberFixture 클래스 메서드 추가 - createMemberFromKakao(email, nickname), createMemberFromKakoWithId(id)
* test: MemberTestHelper 클래스 메서드 추가 - saveMember(email, nickname)
@hisonghy hisonghy merged commit 2dd63be into develop Jul 10, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨feature 구현, 개선 사항 관련 부분

Projects

None yet

Development

Successfully merging this pull request may close these issues.

✨[FEAT]: 공부 여행 기능 구현

2 participants