ChangePassword.cs 1.3 KB

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