using FastEndpoints;
using Fengling.Backend.Domain.AggregatesModel.AdminAggregate;
using Fengling.Backend.Web.Application.Commands.AdminAuth;
namespace Fengling.Backend.Web.Endpoints.AdminAuth;
///
/// 管理员登录请求
///
public record AdminLoginRequest(string Username, string Password);
///
/// 管理员登录响应
///
public record AdminLoginResponseDto(AdminId AdminId, string Username, string Token, DateTime ExpiresAt);
///
/// 管理员登录端点
///
[Tags("AdminAuth")]
[HttpPost("/api/admin/auth/login")]
[AllowAnonymous]
public class AdminLoginEndpoint(IMediator mediator)
: Endpoint>
{
public override async Task HandleAsync(AdminLoginRequest req, CancellationToken ct)
{
var command = new AdminLoginCommand(req.Username, req.Password);
var response = await mediator.Send(command, ct);
var dto = new AdminLoginResponseDto(
response.AdminId,
response.Username,
response.Token,
response.ExpiresAt);
await Send.OkAsync(dto.AsResponseData(), ct);
}
}