View Javadoc
1   package io.extact.rms.client.console.ui;
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 jakarta.enterprise.event.Event;
7   
8   import lombok.RequiredArgsConstructor;
9   
10  import io.extact.rms.client.api.RentalReservationClientApi;
11  import io.extact.rms.client.api.dto.UserAccountClientDto;
12  import io.extact.rms.client.api.exception.BusinessFlowClientException;
13  import io.extact.rms.client.api.login.LoggedInEvent;
14  import io.extact.rms.client.console.ui.TransitionMap.RmsScreen;
15  import io.extact.rms.client.console.ui.TransitionMap.Transition;
16  import io.extact.rms.platform.env.Environment;
17  
18  /**
19   * アプリケーション開始画面。
20   * 開始処理としてのログインを担う
21   */
22  @RequiredArgsConstructor
23  public class LoginScreen implements RmsScreen {
24  
25      private final RentalReservationClientApi clientApi;
26      private final Event<LoggedInEvent> loggedInEvent;
27  
28      @Override
29      public Transition play(UserAccountClientDto dummy, boolean printHeader) {
30          try {
31              if (printHeader) {
32                  // 認証画面のヘッダーを表示する
33                  var jarInfo = Environment.getMainJarInfo();
34                  println("[version:" + jarInfo.getVersion() + "/build-time:" + jarInfo.getBuildtimeInfo() + "]");
35                  println(LOGIN_INFORMATION);
36                  blankLine();
37              }
38  
39              var loginId = newStringInputReader()
40                      .withMinLength(5)
41                      .withMaxLength(10)
42                      .withDefaultValue("edamame")
43                      .read("ログインID");
44              if (loginId.equals(SCREEN_BREAK_KEY)) {
45                  return Transition.END;
46              }
47  
48              var password = newStringInputReader()
49                      .withMinLength(5)
50                      .withMaxLength(10)
51                      .withDefaultValue("edamame")
52                      .withInputMasking(true)
53                      .read("パスワード");
54  
55              // ログイン実行
56              var nowLoginUser = clientApi.authenticate(loginId, password);
57  
58              // 成功したのでログインユーザをbroadcast
59              loggedInEvent.fire(new LoggedInEvent(nowLoginUser));
60  
61              return nowLoginUser.getUserType().isAdmin() ? Transition.ADMIN_MAIN : Transition.MEMBER_MAIN;
62  
63          } catch (BusinessFlowClientException e) {
64              printServerError(e);
65              return play(dummy, false);
66  
67          }
68      }
69  }