⟨/⟩ 55_Backend/Handlers/Auth/GetUserProfileHandler.cs

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

using System;
using Ban.Sdaid.Notation.Documents;
using Ban.Sdaid.Icd;
using Ban.Sdaid.Icd.Api.Endpoints.Auth.GetUserProfile;
using Ban.Sdaid.Icd.Domain.Access;

namespace Ban.Sdaid.Icd.Backend.Handlers.Auth
{
    /// <summary>Handler выдачи профиля текущего пользователя.</summary>
    public class GetUserProfileHandler : IHandlerDocument, IFolder<BackendFolder>, IHasStructuralLinks
    {
        public SdaidLink[] Links => new[]
        {
            Rel.Uses<Ban.Sdaid.Icd.Domain.BC_Icd>(),
            Rel.Uses<UserSpec>(),
            Rel.Uses<DOC_GetUserProfile>(),
        };

        public static string _refName = "Handler GetUserProfile";

        public string Name => "Handler: GetUserProfile";

        public string Description =>
            @"Что произойдёт при вызове endpoint GetUserProfile: собрать профиль текущего пользователя с UI-claims для инициализации фронта.";

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

        public static string Purpose = $"""
            ## Назначение

            Канонический сценарий обработки {SdaidAnchors.RefTo<DOC_GetUserProfile>()}. Bootstrap UI: фронт
            после входа получает ФИО и набор UI-claims, чтобы построить меню и действия по правам.
            Claim-проверки нет — пользователь читает собственный профиль.
            """;

        public static string Scenario = $"""
            ## Сценарий вызова

            1. Взять контекст текущего пользователя (собран по токену; claims — из групп → функций →
               claim-значений).
            2. Загрузить ФИО пользователя ({SdaidAnchors.RefTo<UserSpec>()}).
            3. Отобрать claims ключа `icd/ui` (значения). Суперпользователь → `["*/*"]`.
            4. Вернуть `{nameof(GetUserProfileResult)}` с `{nameof(UserProfilePayload)}`
               (`UserId`, `FullName`, `Login`, `Claims`).

            Ключи `icd/cqrs/*` в профиль не попадают — фронту они не нужны.
            """;
    }
}