Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reservation, Room 관련 엔티티 / DTO / API 구현 #39

Merged
merged 14 commits into from
Jan 7, 2025

Conversation

JunBye
Copy link
Collaborator

@JunBye JunBye commented Jan 6, 2025

📌 Feature Description

기존 민수님께서 구현해두셨던 Room, Reservation Service, Entity, Controller에 덧붙여
크게 네가지 구현을 추가하였습니다.

  1. 특정 Room에 대한 Month별 예약 가능날짜, 불가능 날짜 조회 API
  2. Reservation API에 대한 오류 수정
  3. getRooms(전체 방 조회) 에 대한 페이지네이션 구현
  4. RoomController, ReservationController에 DTO 추가하여 API 부하 감소

상세 사항은 노션과 PR에 적고자 합니다.

🔧 Implementation Details

  • 주요 변경사항 1) Room - Month 별 Available Date/ Unavailable Date 구현
    기존 API 구현 사항에서 특정 방에 대한 이미 예약된 건수를 조회하는 것의 필요성에 의문이 제기되어,
    특정 방의 예약가능 날짜 / 불가능 날짜 정보를 제공하는 API를 구현하였습니다.
    로직은 다음과 같습니다
  1. 해당 방에 대한 모든 예약 조회
  2. 해당 월의 시작날짜, 끝날짜 정의
  3. 예약 들중 startDate가 월 시작 이후이고, endDate가 월의 끝 이전에 끝나는지 체크.
  4. 불가능한 날짜 체크(예약들을 startDate~endDate로 바꾸고, set 변환하여 중복제거)
  5. 가능한 날짜 체크 (모든 날짜에서 불가능한 날짜 제외)
  6. RoomAvailabilityResponse 객체 반환
  • 주요 변경사항 2) Reservation API - createReservation 오류 수정 / isAvailable 오류 수정
    오류의 원인은 StableObjectStateException 으로 이는 동시성 문제와 관련된 것입니다.
    그러나, Swagger 테스트시 API를 1번만 실행하여 발생하였기에 Entity save시에 영속성 처리가 안되어있다는 것을 파악하였고
    ReviewEntity와 ReservationEntity에서 id 값을 null로 수정하여 Hibernate가 영속성 처리를 스킵하지 않도록 수정하였습니다.
// GenerationType.IDENTITY 이면, id 값 null으로 설정해야함 
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,

또한 기존 예약건에 대해 update를 할때,
1.6 ~ 1.10 -> 1.6 ~ 1.15로 수정이 불가능하다고 뜨는 이슈와
create 시에 1.10 ~ 1.6과 같이 시작날짜가 더 뒤에 있는 경우 Exception을 처리하도록 isAvailable 함수를 수정하였습니다.

  • 주요 변경사항 3) getRooms (전체 방 조회) 에 대한 페이지네이션 구현
    GET /rooms?page=0&size=10&sort=string,asc
    API 요청 방식에서 sort 기준을 설정하고 있는데, 해당 기준이 필드에 없는 값인 경우 오류가 발생합니다.
    이를 해결하고자 ValidatePageable.kt를 작성하여 정렬 기준을 체크하고,
    필드에 없는 값인 경우 기본 값으로 셋팅하도록 Controller를 수정하였습니다.

  • 주요 변경사항 4) Reservation DTO, Room DTO 구현
    Swagger API 테스트 시마다 너무 많은 정보를 불러와 지연이 생기는 문제를 해결하고자
    Controller에 DTO 구현 및 Room, Reservation에 toDTO() 메소드를 구현하여 API 반환 타입을 모두 DTO로 수정하였습니다.

✅ Checklist

  • 코드가 컴파일되고 정상적으로 동작
  • 모든 테스트 통과
  • Linter 돌리기
  • 관련 작업 kanban update
  • slack 알림

📝 Related Issues

  • 관련 문제: #

Copy link
Collaborator

@dennis0405 dennis0405 left a comment

Choose a reason for hiding this comment

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

availability 추가로 확인하기

@dennis0405
Copy link
Collaborator

lstm

1 similar comment
@dennis0405
Copy link
Collaborator

lstm

@dennis0405 dennis0405 merged commit 33d3d36 into dev Jan 7, 2025
0 of 2 checks passed
@dennis0405 dennis0405 deleted the feat/reservation branch January 7, 2025 01:38
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