InquiryReservationScreen.java
package io.extact.rms.client.console.ui.member;
import static io.extact.rms.client.console.ui.ClientConstants.*;
import static io.extact.rms.client.console.ui.textio.TextIoUtils.*;
import java.util.List;
import io.extact.rms.client.api.RentalReservationClientApi;
import io.extact.rms.client.api.dto.RentalItemClientDto;
import io.extact.rms.client.api.dto.ReservationClientDto;
import io.extact.rms.client.api.dto.UserAccountClientDto;
import io.extact.rms.client.api.exception.BusinessFlowClientException;
import io.extact.rms.client.console.ui.TransitionMap.RmsScreen;
import io.extact.rms.client.console.ui.TransitionMap.Transition;
import io.extact.rms.client.console.ui.textio.TextIoUtils;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class InquiryReservationScreen implements RmsScreen {
private final RentalReservationClientApi clientApi;
@Override
public Transition play(UserAccountClientDto loginUser, boolean printHeader) {
if (printHeader) {
printScreenHeader(loginUser, "予約照会画面");
}
// レンタル品一覧を表示
var items = clientApi.getAllRentalItems();
println(INQUIRY_RESERVATION_INFORMATION);
items.forEach(dto ->
println(RENATL_ITEM_FORMAT.format(dto))
);
blankLine();
// 照会するレンタル品を選択
var selectedItem = newIntInputReader()
.withSelectableValues(
items.stream()
.map(RentalItemClientDto::getId)
.toList(),
SCREEN_BREAK_VALUE)
.read("レンタル品番号");
if (TextIoUtils.isBreak(selectedItem)) {
return Transition.MEMBER_MAIN;
}
// 照会する日付を入力
var inputedDate = newLocalDateReader()
.read("日付(入力例-2020/10/23)");
// 照会の実行
try {
var results = clientApi.findReservationByRentalItemAndStartDate(selectedItem, inputedDate);
printResultList(results);
return Transition.MEMBER_MAIN;
} catch (BusinessFlowClientException e) {
printServerError(e);
return play(loginUser, false); // start over!!
}
}
private void printResultList(List<ReservationClientDto> reservations) {
blankLine();
println("***** 予約検索結果 *****");
println("選択レンタル品番号:" + reservations.get(0).getRentalItemId());
println("入力日付:" + DATE_FORMAT.format(reservations.get(0).getStartDateTime()));
reservations.forEach(r ->
println(RESERVATION_FORMAT.format(r))
);
blankLine();
waitPressEnter();
}
}