fengling-member-service/src/Fengling.Member.Web/Endpoints/v1/PointsEndpoints.cs

69 lines
1.8 KiB
C#

using FastEndpoints;
using MediatR;
using Microsoft.AspNetCore.Mvc;
using Fengling.Member.Application.Commands.Points;
namespace Fengling.Member.Web.Endpoints.v1;
public class AddPointsEndpoint : Endpoint<AddPointsRequest, AddPointsResponse>
{
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; }
}