Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,15 @@ public class ReservationController {
@GetMapping("/places/{commonPlaceId}")
public ResponseEntity<ApiResponse.Success<Object>> findAvailableTimes(
@PathVariable Long commonPlaceId,
@RequestParam("date") LocalDate localDate,
@RequestParam("startDate") LocalDate startDate,
@RequestParam("endDate") LocalDate endDate,
@LoginActor Actor actor
) {

JwtTokenProvider.checkMemberToken(actor);

List<ReservationResponse.AvailableReservationTimePerDateDto> result =
reservationService.findAvailableReservationTimes(actor.getId(), commonPlaceId, localDate);
reservationService.findAvailableReservationTimes(actor.getId(), commonPlaceId, startDate, endDate);
return ApiResponse.success(result, HttpStatus.OK);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ List<AvailableReservationTimeProjection> findNotUsedReservationTime(
);

List<AvailableReservationTimeProjection> findNotUsedReservationTimeByUsedReservationIds(
Long companyId, Long commonPlaceId, LocalDate date, List<Long> reservationIds
Long companyId, Long commonPlaceId, LocalDate startDate, LocalDate endDate, List<Long> reservationIds
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ public List<AvailableReservationTimeProjection> findNotUsedReservationTime(

@Override
public List<AvailableReservationTimeProjection> findNotUsedReservationTimeByUsedReservationIds(
Long companyId, Long commonPlaceId, LocalDate date, List<Long> reservationIds
Long companyId, Long commonPlaceId, LocalDate startDate, LocalDate endDate, List<Long> reservationIds
) {
return queryFactory
.select(Projections.constructor(AvailableReservationTimeProjection.class,
Expand All @@ -112,7 +112,7 @@ public List<AvailableReservationTimeProjection> findNotUsedReservationTimeByUsed
reservationIds
),
reservation.company.id.eq(companyId),
reservation.date.eq(date),
reservation.date.goe(startDate).and(reservation.date.loe(endDate)),
reservation.commonPlace.id.eq(commonPlaceId)
)
.fetch();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,26 +26,27 @@ public class ReservationService {
public List<ReservationResponse.AvailableReservationTimePerDateDto> findAvailableReservationTimes(
Long memberId,
Long commonPlaceId,
LocalDate date
LocalDate startDate,
LocalDate endDate
) {


Member member = memberRepository.findById(memberId)
.orElseThrow(() -> new GlobalRuntimeException(MemberErrorCode.MEMBER_NOT_EXIST));

AvailableReservationTimeProjections availableReservationTimeProjections =
getAvailableReservationTimeProjections(member.getCompany().getId(), commonPlaceId, date);
getAvailableReservationTimeProjections(member.getCompany().getId(), commonPlaceId, startDate, endDate);

return availableReservationTimeProjections.toDto();
}

private AvailableReservationTimeProjections getAvailableReservationTimeProjections(
Long companyId, Long commonPlaceId, LocalDate date
Long companyId, Long commonPlaceId, LocalDate startDate, LocalDate endDate
) {
List<Long> usedReservationIds = invitationReservationMapRepository.findAllReservationId();
List<AvailableReservationTimeProjection> timeProjections =
reservationRepository.findNotUsedReservationTimeByUsedReservationIds(
companyId, commonPlaceId, date, usedReservationIds
companyId, commonPlaceId, startDate, endDate, usedReservationIds
);

return new AvailableReservationTimeProjections(timeProjections);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,16 @@ void findAvailableTimesSuccessTest() throws Exception {
)
.collect(Collectors.toList());

given(reservationService.findAvailableReservationTimes(anyLong(), anyLong(), any(LocalDate.class)))
given(reservationService.findAvailableReservationTimes(anyLong(), anyLong(), any(LocalDate.class), any(LocalDate.class)))
.willReturn(result);

// when
ResultActions resultActions = mockMvc.perform(
get("/api/reservation/places/1")
.header("Authorization", "Bearer " + token)
.contentType(MediaType.APPLICATION_JSON)
.queryParam("date", "2023-09-22")
.queryParam("startDate", "2023-09-22")
.queryParam("endDate", "2023-09-22")
);

// then
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.livable.server.core.exception.GlobalRuntimeException;
import com.livable.server.entity.Company;
import com.livable.server.entity.InvitationReservationMap;
import com.livable.server.entity.Member;
import com.livable.server.invitation.repository.InvitationReservationMapRepository;
import com.livable.server.member.domain.MemberErrorCode;
Expand Down Expand Up @@ -74,20 +73,20 @@ void findAvailableReservationTimesSuccessTest() {
given(invitationReservationMapRepository.findAllReservationId()).willReturn(List.of(1L, 2L, 3L));
given(memberRepository.findById(anyLong())).willReturn(Optional.of(member));
given(reservationRepository.findNotUsedReservationTimeByUsedReservationIds(
anyLong(), anyLong(), any(LocalDate.class), any(List.class)
anyLong(), anyLong(), any(LocalDate.class), any(LocalDate.class), any(List.class)
)
)
.willReturn(queryResult);

// when
List<ReservationResponse.AvailableReservationTimePerDateDto> result =
reservationService.findAvailableReservationTimes(1L, 1L, LocalDate.now());
reservationService.findAvailableReservationTimes(1L, 1L, LocalDate.now(), LocalDate.now().plusDays(1));

// then
then(invitationReservationMapRepository).should(times(1)).findAllReservationId();
then(memberRepository).should(times(1)).findById(anyLong());
then(reservationRepository).should(times(1))
.findNotUsedReservationTimeByUsedReservationIds(anyLong(), anyLong(), any(LocalDate.class), any(List.class));
.findNotUsedReservationTimeByUsedReservationIds(anyLong(), anyLong(), any(LocalDate.class), any(LocalDate.class), any(List.class));

assertThat(result).usingRecursiveComparison().isEqualTo(projections.toDto());
}
Expand All @@ -101,7 +100,7 @@ void findAvailableReservationTimesFailTest() {

// when
GlobalRuntimeException globalRuntimeException = assertThrows(GlobalRuntimeException.class, () ->
reservationService.findAvailableReservationTimes(1L, 1L, LocalDate.now())
reservationService.findAvailableReservationTimes(1L, 1L, LocalDate.now(), LocalDate.now())
);

// then
Expand Down