1 package io.extact.rms.client.console.ui.admin;
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 lombok.RequiredArgsConstructor;
7
8 import io.extact.rms.client.api.RentalReservationClientApi;
9 import io.extact.rms.client.api.dto.UserAccountClientDto;
10 import io.extact.rms.client.api.dto.UserAccountClientDto.ClientUserType;
11 import io.extact.rms.client.api.exception.BusinessFlowClientException;
12 import io.extact.rms.client.console.ui.TransitionMap.RmsScreen;
13 import io.extact.rms.client.console.ui.TransitionMap.Transition;
14 import io.extact.rms.client.console.ui.textio.RmsStringInputReader.PatternMessage;
15 import io.extact.rms.client.console.ui.textio.TextIoUtils;
16
17 @RequiredArgsConstructor
18 public class EntryUserScreen implements RmsScreen {
19
20 private final RentalReservationClientApi clientApi;
21
22 @Override
23 public Transition play(UserAccountClientDto loginUser, boolean printHeader) {
24
25 if (printHeader) {
26 printScreenHeader(loginUser, "ユーザ登録画面");
27 }
28
29
30 println(ENTRY_USER_INFORMATION);
31
32
33 var loginId = newStringInputReader()
34 .withMinLength(5)
35 .withMaxLength(15)
36 .withExcludeCheckString(SCREEN_BREAK_KEY)
37 .read("ログインID");
38 if (TextIoUtils.isBreak(loginId)) {
39 return Transition.ADMIN_MAIN;
40 }
41
42
43 var password = newStringInputReader()
44 .withMinLength(5)
45 .withMaxLength(15)
46 .read("パスワード");
47
48
49 var userName = newStringInputReader()
50 .withMinLength(1)
51 .read("ユーザ名");
52
53
54 var phoneNumber = newStringInputReader()
55 .withMaxLength(14)
56 .withPattern(PatternMessage.PHONE_NUMBER)
57 .withDefaultValue("")
58 .read("電話番号(省略可)");
59
60
61 var contact = newStringInputReader()
62 .withMaxLength(15)
63 .withDefaultValue("")
64 .read("連絡先(省略可)");
65
66
67 var userType = newEnumInputReader(ClientUserType.class)
68 .withDefaultValue(ClientUserType.MEMBER)
69 .read("権限");
70
71
72 try {
73 var addUserAccount = UserAccountClientDto.ofTransient(loginId, password, userName, phoneNumber, contact, userType);
74 var newUserAccount = clientApi.addUserAccount(addUserAccount);
75 printResultInformation(newUserAccount);
76 return Transition.ADMIN_MAIN;
77
78 } catch (BusinessFlowClientException e) {
79 printServerError(e);
80 return play(loginUser, false);
81
82 }
83 }
84
85 private void printResultInformation(UserAccountClientDto newUserAccount) {
86 blankLine();
87 println("***** ユーザ登録結果 *****");
88 println("ユーザ番号:" + newUserAccount.getId());
89 println("ログインID:" + newUserAccount.getLoginId());
90 println("パスワード:" + newUserAccount.getPassword());
91 println("ユーザ名:" + newUserAccount.getUserName());
92 println("電話番号:" + newUserAccount.getPhoneNumber());
93 println("連絡先:" + newUserAccount.getContact());
94 println("権限:" + newUserAccount.getUserType().name());
95 blankLine();
96 waitPressEnter();
97 }
98 }