LoginScreen.java
package io.extact.rms.client.console.ui;
import static io.extact.rms.client.console.ui.ClientConstants.*;
import static io.extact.rms.client.console.ui.textio.TextIoUtils.*;
import jakarta.enterprise.event.Event;
import lombok.RequiredArgsConstructor;
import io.extact.rms.client.api.RentalReservationClientApi;
import io.extact.rms.client.api.dto.UserAccountClientDto;
import io.extact.rms.client.api.exception.BusinessFlowClientException;
import io.extact.rms.client.api.login.LoggedInEvent;
import io.extact.rms.client.console.ui.TransitionMap.RmsScreen;
import io.extact.rms.client.console.ui.TransitionMap.Transition;
import io.extact.rms.platform.env.Environment;
/**
* アプリケーション開始画面。
* 開始処理としてのログインを担う
*/
@RequiredArgsConstructor
public class LoginScreen implements RmsScreen {
private final RentalReservationClientApi clientApi;
private final Event<LoggedInEvent> loggedInEvent;
@Override
public Transition play(UserAccountClientDto dummy, boolean printHeader) {
try {
if (printHeader) {
// 認証画面のヘッダーを表示する
var jarInfo = Environment.getMainJarInfo();
println("[version:" + jarInfo.getVersion() + "/build-time:" + jarInfo.getBuildtimeInfo() + "]");
println(LOGIN_INFORMATION);
blankLine();
}
var loginId = newStringInputReader()
.withMinLength(5)
.withMaxLength(10)
.withDefaultValue("edamame")
.read("ログインID");
if (loginId.equals(SCREEN_BREAK_KEY)) {
return Transition.END;
}
var password = newStringInputReader()
.withMinLength(5)
.withMaxLength(10)
.withDefaultValue("edamame")
.withInputMasking(true)
.read("パスワード");
// ログイン実行
var nowLoginUser = clientApi.authenticate(loginId, password);
// 成功したのでログインユーザをbroadcast
loggedInEvent.fire(new LoggedInEvent(nowLoginUser));
return nowLoginUser.getUserType().isAdmin() ? Transition.ADMIN_MAIN : Transition.MEMBER_MAIN;
} catch (BusinessFlowClientException e) {
printServerError(e);
return play(dummy, false);
}
}
}