1 package io.extact.rms.application.persistence;
2
3 import java.time.LocalDate;
4 import java.time.LocalDateTime;
5 import java.util.List;
6
7 import io.extact.rms.application.domain.Reservation;
8
9 /**
10 * 予約の永続化インタフェース。
11 */
12 public interface ReservationRepository extends GenericRepository<Reservation> {
13
14 /**
15 * レンタル品IDと利用開始日が一致する予約一覧を取得する。
16 *
17 * @param rentalItemId レンタル品ID
18 * @param startDate 利用開始日
19 * @return 該当予約。該当がない場合は空リスト
20 */
21 List<Reservation> findByRentalItemAndStartDate(int rentalItemId, LocalDate startDate);
22
23 /**
24 * 指定されたユーザIDが予約者の予約一覧を取得する。
25 * @param reserverId 予約者のユーザID
26 * @return 該当予約。該当がない場合は空リスト
27 */
28 List<Reservation> findByReserverId(int reserverId);
29
30 /**
31 * 指定されたレンタル品の予約一覧を取得する。
32 * @param rentalItemId レンタル品ID
33 * @return 該当予約。該当がない場合は空リスト
34 */
35 List<Reservation> findByRentalItemId(int rentalItemId);
36
37 /**
38 * 指定されたレンタル品の予約のうち、利用開始日時~利用終了日時の間に利用時間が重なっている予約を取得する
39 * 該当が複数ある場合はリストの先頭の1件目を返す
40 *
41 * @param rentalItemId レンタル品ID
42 * @param from 利用開始日時
43 * @param to 利用終了日時
44 * @return 予約。該当なしはnull
45 */
46 Reservation findOverlappedReservation(int rentalItemId, LocalDateTime from, LocalDateTime to);
47
48 /**
49 * 指定されたレンタル品の予約のうち、利用開始日時~利用終了日時の間に利用時間が重なっている予約を取得する
50 *
51 * @param rentalItemId レンタル品ID
52 * @param from 利用開始日時
53 * @param to 利用終了日時
54 * @return 予約。該当がない場合は空リスト
55 */
56 List<Reservation> findOverlappedReservations(int rentalItemId, LocalDateTime from, LocalDateTime to);
57
58 /**
59 * 利用開始日時~利用終了日時の間に利用時間が重なっている予約を一覧で取得する
60 *
61 * @param from 利用開始日時
62 * @param to 仕様終了日時
63 * @return 該当予約。該当がない場合は空リスト
64 */
65 List<Reservation> findOverlappedReservations(LocalDateTime from, LocalDateTime to);
66 }