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/*` в профиль не попадают — фронту они не нужны.
""";
}
}