using FastEndpoints; using MediatR; using Microsoft.AspNetCore.Mvc; using Fengling.Member.Application.Commands.Member; namespace Fengling.Member.Web.Endpoints.v1; public class BindWechatEndpoint : Endpoint { private readonly IMediator _mediator; public BindWechatEndpoint(IMediator mediator) { _mediator = mediator; } public override void Configure() { Post("/api/v1/members/{MemberId}/wechat"); Summary(s => { s.Summary = "绑定微信"; s.Description = "为会员绑定微信OpenID"; }); } public override async Task HandleAsync(BindWechatRequest req, CancellationToken ct) { var command = new BindWechatCommand { MemberId = req.MemberId, OpenId = req.OpenId, UnionId = req.UnionId }; var result = await _mediator.Send(command, ct); Response = new BindWechatResponse { MemberId = result.MemberId, OpenId = result.OpenId, UnionId = result.UnionId, BoundAt = result.BoundAt }; } } public class BindWechatRequest { [FromRoute] public long MemberId { get; set; } public string OpenId { get; set; } = string.Empty; public string? UnionId { get; set; } } public class BindWechatResponse { public long MemberId { get; set; } public string OpenId { get; set; } = string.Empty; public string? UnionId { get; set; } public DateTime BoundAt { get; set; } }