Update.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using MediatR;
  2. using Web.Api.Common;
  3. using Web.Api.Extensions;
  4. using Microsoft.AspNetCore.Mvc;
  5. using System.Security.Claims;
  6. namespace Web.Api.Endpoints.Forum.Post;
  7. internal sealed class Update : IEndpoint
  8. {
  9. public sealed class Request
  10. {
  11. public int? PostID { get; set; }
  12. public int? BoardID { get; set; }
  13. public string? BoardCode { get; set; }
  14. public int? BoardPrefixID { get; set; }
  15. public required string Subject { get; set; }
  16. public required string Content { get; set; }
  17. public bool IsSecret { get; set; }
  18. public bool IsNotice { get; set; }
  19. public bool IsSpeaker { get; set; }
  20. public List<string>? Tags { get; set; }
  21. public List<string>? Medias { get; set; }
  22. }
  23. public void MapEndpoint(IEndpointRouteBuilder app)
  24. {
  25. app.MapPut("api/forum/posts/{id}", async (
  26. int id,
  27. ClaimsPrincipal user,
  28. [FromForm] Request request,
  29. HttpRequest httpRequest,
  30. ISender sender,
  31. CancellationToken ct
  32. ) => {
  33. var memberID = user.GetMemberID();
  34. if (memberID is null)
  35. {
  36. return ApiResponse.Fail(StatusCodes.Status401Unauthorized, "Invalid token");
  37. }
  38. var images = httpRequest.Form.Files.GetFiles("images").ToList();
  39. var files = httpRequest.Form.Files.GetFiles("files").ToList();
  40. var command = new Application.Features.Api.Forum.Post.Update.Command(
  41. id,
  42. memberID.Value,
  43. request.BoardPrefixID,
  44. request.Subject,
  45. request.Content,
  46. request.IsSecret,
  47. request.IsNotice,
  48. request.IsSpeaker,
  49. request.Tags,
  50. images.Count > 0 ? images : null,
  51. request.Medias,
  52. files.Count > 0 ? files : null
  53. );
  54. var result = await sender.Send(command, ct);
  55. return result.Match(
  56. () => ApiResponse.Ok(),
  57. CustomResults.Problem
  58. );
  59. })
  60. .WithTags("Forum")
  61. .RequireAuthorization()
  62. .DisableAntiforgery();
  63. }
  64. }