EntryRentalItemScreen.java
package io.extact.rms.client.console.ui.admin;
import static io.extact.rms.client.console.ui.ClientConstants.*;
import static io.extact.rms.client.console.ui.textio.TextIoUtils.*;
import lombok.RequiredArgsConstructor;
import io.extact.rms.client.api.RentalReservationClientApi;
import io.extact.rms.client.api.dto.RentalItemClientDto;
import io.extact.rms.client.api.dto.UserAccountClientDto;
import io.extact.rms.client.api.exception.BusinessFlowClientException;
import io.extact.rms.client.console.ui.ClientConstants;
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.RmsStringInputReader.PatternMessage;
import io.extact.rms.client.console.ui.textio.TextIoUtils;
@RequiredArgsConstructor
public class EntryRentalItemScreen implements RmsScreen {
private final RentalReservationClientApi clientApi;
@Override
public Transition play(UserAccountClientDto loginUser, boolean printHeader) {
if (printHeader) {
printScreenHeader(loginUser, "レンタル品登録画面");
}
// 入力インフォメーションの表示
println(ENTRY_RENTAL_ITEM_INFORMATION);
// シリアル番号の入力
var serialNo = newStringInputReader()
.withMinLength(1)
.withMaxLength(15)
.withPattern(PatternMessage.SERIAL_NO)
.read("シリアル番号");
if (TextIoUtils.isBreak(serialNo)) {
return Transition.ADMIN_MAIN;
}
// 品名の入力
var itemName = newStringInputReader()
.withMaxLength(15)
.withDefaultValue("")
.read("品名(空白可)");
blankLine();
// レンタル品登録の実行
try {
var addItem = RentalItemClientDto.ofTransient(serialNo, itemName);
var newItem = clientApi.addRentalItem(addItem);
printResultInformation(newItem);
return Transition.ADMIN_MAIN;
} catch (BusinessFlowClientException e) {
printServerError(e);
return play(loginUser, false); // start over!!
}
}
private void printResultInformation(RentalItemClientDto newItem) {
println("***** レンタル品登録結果 *****");
printf(ClientConstants.RENATL_ITEM_FORMAT.format(newItem));
blankLine();
waitPressEnter();
}
}