1 package io.extact.rms.client.console.ui.member;
2
3 import static io.extact.rms.client.console.ui.ClientConstants.*;
4 import static io.extact.rms.client.console.ui.textio.TextIoUtils.*;
5
6 import io.extact.rms.client.api.RentalReservationClientApi;
7 import io.extact.rms.client.api.dto.ReservationClientDto;
8 import io.extact.rms.client.api.dto.UserAccountClientDto;
9 import io.extact.rms.client.api.exception.BusinessFlowClientException;
10 import io.extact.rms.client.console.ui.ClientConstants;
11 import io.extact.rms.client.console.ui.TransitionMap.RmsScreen;
12 import io.extact.rms.client.console.ui.TransitionMap.Transition;
13 import io.extact.rms.client.console.ui.textio.TextIoUtils;
14 import lombok.RequiredArgsConstructor;
15
16 @RequiredArgsConstructor
17 public class CancelReservationScreen implements RmsScreen {
18
19 private final RentalReservationClientApi clientApi;
20
21 @Override
22 public Transition play(UserAccountClientDto loginUser, boolean printHeader) {
23
24 if (printHeader) {
25 printScreenHeader(loginUser, "レンタル品予約キャンセル画面");
26 }
27
28 var ownReservations = clientApi.getOwnReservations();
29
30
31 if (ownReservations.isEmpty()) {
32 printWarningInformation(CANNOT_CANCEL_RESERVATION_INFORMATION);
33 waitPressEnter();
34 return Transition.MEMBER_MAIN;
35 }
36
37
38 println(CANCEL_RESERVATION_INFORMATION);
39 ownReservations.forEach(dto ->
40 println(ClientConstants.RESERVATION_FORMAT.format(dto))
41 );
42 blankLine();
43
44
45 var selectedReservation = newIntInputReader()
46 .withSelectableValues(
47 ownReservations.stream()
48 .map(ReservationClientDto::getId)
49 .toList(),
50 SCREEN_BREAK_VALUE)
51 .read("予約番号");
52 if (TextIoUtils.isBreak(selectedReservation)) {
53 return Transition.MEMBER_MAIN;
54 }
55
56 blankLine();
57
58
59 try {
60 clientApi.cancelReservation(selectedReservation);
61 printResultInformation(selectedReservation);
62 return Transition.MEMBER_MAIN;
63
64 } catch (BusinessFlowClientException e) {
65 printServerError(e);
66 return play(loginUser, false);
67
68 }
69 }
70
71 private void printResultInformation(Integer selectedItem) {
72 println("***** 予約キャンセル確定結果 *****");
73 printf("[%s]の予約をキャンセルしました", selectedItem);
74 blankLine();
75 blankLine();
76 waitPressEnter();
77 }
78 }