using System;
using Ban.Sdaid.Notation.Documents;
using Ban.Sdaid.Icd;
using Ban.Sdaid.Icd.Api.Based;
namespace Ban.Sdaid.Icd.Api.Endpoints.Auth.GetUserProfile
{
/// <summary>Документ-обёртка над endpoint выдачи профиля текущего пользователя.</summary>
public class DOC_GetUserProfile : IApiContractDocument, IFolder<ApiFolder>, IHasStructuralLinks
{
public SdaidLink[] Links => new[]
{
Rel.Uses<Ban.Sdaid.Icd.Backend.Handlers.Auth.GetUserProfileHandler>(),
};
public static string _refName = "Endpoint GetUserProfile";
public string Name => "Endpoint: GetUserProfile";
public string Description =>
@"Профиль текущего пользователя для инициализации UI: ФИО, логин и UI-claims (ключ icd/ui). Пользователь определяется по токену. Поведение — GetUserProfileHandler.";
public string Version => "0.1";
public string Status => "draft";
public string[] Comments => new string[0];
public static string Transport = """
## Транспорт
`GET /api/Auth/GetUserProfile` — параметров нет: пользователь определяется по токену.
Требует аутентификации. Фронт зовёт его при старте (после наличия токена), чтобы построить
меню/действия по правам.
В `Payload.Claims` отдаются **только** UI-claims (значения ключа `icd/ui`); ключи `cqrs/*`
фронту не нужны и не передаются. Суперпользователю приходит `*/*`.
""";
public static string Body = $"""
## Endpoint
{SdaidCode.OfClass<GetUserProfileEndpoint>()}
## Query
{SdaidCode.OfClass<GetUserProfileQuery>()}
## Result
{SdaidCode.OfClass<GetUserProfileResult>()}
## Payload
{SdaidCode.OfClass<UserProfilePayload>()}
""";
}
/// <summary>Endpoint выдачи профиля.</summary>
public class GetUserProfileEndpoint
{
public GetUserProfileQuery? Input { get; set; }
public GetUserProfileResult? Output { get; set; }
}
/// <summary>Запрос профиля (без параметров — пользователь по токену).</summary>
public class GetUserProfileQuery : BasedQuery
{
}
/// <summary>Результат — профиль в поле Payload.</summary>
public class GetUserProfileResult : BasedResult
{
public UserProfilePayload? Payload { get; init; }
}
/// <summary>Профиль текущего пользователя.</summary>
public class UserProfilePayload
{
public Guid UserId { get; init; }
/// <summary>ФИО пользователя.</summary>
public string FullName { get; init; } = "";
/// <summary>Логин.</summary>
public string Login { get; init; } = "";
/// <summary>UI-claims (значения ключа icd/ui) — по ним фронт скрывает недоступное.</summary>
public string[] Claims { get; init; } = new string[0];
}
}