69 lines
1.8 KiB
C#
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; }
|
|
}
|