Update.cs 1.3 KB

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