using FastEndpoints; using MediatR; using Microsoft.AspNetCore.Mvc; using Fengling.Member.Application.Commands.Points; namespace Fengling.Member.Web.Endpoints.v1; public class AddPointsEndpoint : Endpoint { private readonly IMediator _mediator; public AddPointsEndpoint(IMediator mediator) { _mediator = mediator; } public override void Configure() { Post("/api/v1/members/{MemberId}/points"); Summary(s => { s.Summary = "增加积分"; s.Description = "为会员增加积分"; }); } public override async Task HandleAsync(AddPointsRequest req, CancellationToken ct) { var command = new AddPointsCommand { MemberId = req.MemberId, Points = req.Points, TransactionType = req.TransactionType, SourceId = req.SourceId, Remark = req.Remark }; var result = await _mediator.Send(command, ct); Response = new AddPointsResponse { AccountId = result.AccountId, MemberId = result.MemberId, AddedPoints = result.AddedPoints, TotalPoints = result.TotalPoints, TransactionAt = result.TransactionAt }; } } public class AddPointsRequest { [FromRoute] public long MemberId { get; set; } public int Points { get; set; } public string TransactionType { get; set; } = string.Empty; public string SourceId { get; set; } = string.Empty; public string? Remark { get; set; } } public class AddPointsResponse { public long AccountId { get; set; } public long MemberId { get; set; } public int AddedPoints { get; set; } public int TotalPoints { get; set; } public DateTime TransactionAt { get; set; } }