using FastEndpoints;
using Fengling.Backend.Domain.AggregatesModel.AdminAggregate;
using Fengling.Backend.Web.Application.Queries.AdminAuth;
using System.Security.Claims;
namespace Fengling.Backend.Web.Endpoints.AdminAuth;
///
/// 获取当前管理员端点
///
[Tags("AdminAuth")]
// [HttpGet("/api/admin/auth/me")]
public class GetCurrentAdminEndpoint(IMediator mediator)
: EndpointWithoutRequest>
{
public override void Configure()
{
Get("/api/admin/auth/me");
Tags("AdminAuth");
Description(x => x.WithTags("AdminAuth"));
}
public override async Task HandleAsync(CancellationToken ct)
{
// 从 JWT Claims 中提取 AdminId
var adminIdClaim = HttpContext.User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
if (string.IsNullOrEmpty(adminIdClaim) || !Guid.TryParse(adminIdClaim, out var adminGuid))
{
await Send.UnauthorizedAsync(ct);
return;
}
var adminId = new AdminId(adminGuid);
var query = new GetCurrentAdminQuery(adminId);
var admin = await mediator.Send(query, ct);
await Send.OkAsync(admin.AsResponseData(), ct);
}
}