⟨/⟩ 65_Ui/Pages/LoginPage.cs

59 строк · в начало

using Ban.Sdaid.Notation.Documents;
using Ban.Sdaid.Icd;
using Ban.Sdaid.Icd.Api.Endpoints.Auth.LoginByPassword;

namespace Ban.Sdaid.Icd.Ui.Pages
{
    /// <summary>Экран входа — форма логина и пароля, второй режим layout (без оболочки).</summary>
    public class LoginPage : IPageDocument, IFolder<UiFolder>, IHasStructuralLinks
    {
        public SdaidLink[] Links => new[]
        {
            Rel.Uses<DOC_LoginByPassword>(),
        };

        public string Name => "Вход";

        public static string _refName = "экран «Вход»";

        public string Description =>
            @"Точка входа неаутентифицированного пользователя: форма логина и пароля на упрощённом layout без шапки и меню. Маршрут /login.";

        public string Version => "0.1";
        public string Status => "draft";
        public string[] Comments => new string[0];

        public static string S1_Layout = $"""
            ## Раскладка

            Экран входа — **второй режим layout, без оболочки** (нет шапки, меню, зоны профиля): пока
            пользователь не вошёл, навигация Сервиса ему недоступна. Основной layout
            ({nameof(Ban.Sdaid.Icd.Arch.Tech.Angular.ADR_UI_005_Layout)}) здесь не применяется.

            По центру — карточка с формой; всё остальное пусто. Маршрут `/login`.
            """;

        public static string S2_Form = """
            ## Форма

            Два поля — логин и пароль (оба обязательны), на Signal Forms. Кнопка «Войти» неактивна, пока
            форма невалидна или идёт отправка. Ошибка входа показывается под формой одним сообщением —
            текст приходит от бэкенда (UI его не сочиняет и не переводит), без подсказки, что именно
            неверно (логин или пароль).
            """;

        public static string S3_Behavior = $"""
            ## Поведение

            - Если пользователь уже аутентифицирован и открыл `/login` — редирект на главную (иначе после
              входа была бы петля).
            - На отправку — вход ({nameof(Ban.Sdaid.Icd.Api.Endpoints.Auth.LoginByPassword.DOC_LoginByPassword)}):
              при успехе токен сохраняется, грузится профиль, редирект на исходный маршрут или главную; при
              ошибке — сообщение под формой.
            - Состояния: обычное, отправка, ошибка.

            Сессия, хранение токена и загрузка профиля — {nameof(Ban.Sdaid.Icd.Arch.Tech.Angular.ADR_UI_010_Auth)}.
            """;
    }
}