View Javadoc
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          // ログインIDの入力
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); // start over!!
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  }