ChangeEmail.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using System.Security.Claims;
  2. using MediatR;
  3. using SharedKernel.Extensions;
  4. using Web.Api.Common;
  5. using Web.Api.Extensions;
  6. namespace Web.Api.Endpoints.MyPage;
  7. internal sealed class ChangeEmail : IEndpoint
  8. {
  9. public sealed record Request(string NewEmail);
  10. public void MapEndpoint(IEndpointRouteBuilder app)
  11. {
  12. app.MapPost("api/mypage/email", async (
  13. Request request,
  14. ClaimsPrincipal user,
  15. HttpContext httpContext,
  16. ISender sender,
  17. CancellationToken ct
  18. ) => {
  19. var memberID = user.GetMemberID();
  20. if (memberID is null)
  21. {
  22. return ApiResponse.Fail(StatusCodes.Status401Unauthorized, "Invalid token");
  23. }
  24. var command = new Application.Features.Api.MyPage.ChangeEmail.Command(
  25. memberID.Value,
  26. request.NewEmail,
  27. httpContext.GetClientIP(),
  28. httpContext.GetUserAgent(),
  29. httpContext.GetReferer()
  30. );
  31. var result = await sender.Send(command, ct);
  32. return result.Match(
  33. () => ApiResponse.Ok(),
  34. CustomResults.Problem
  35. );
  36. })
  37. .WithTags("MyPage")
  38. .RequireAuthorization();
  39. }
  40. }