Create.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.Comment;
  6. internal sealed class Create : IEndpoint
  7. {
  8. public sealed record Request(
  9. int BoardID,
  10. int PostID,
  11. int? ParentID,
  12. string Content,
  13. bool IsSecret
  14. );
  15. public void MapEndpoint(IEndpointRouteBuilder app)
  16. {
  17. app.MapPost("api/forum/comments", async (
  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.Comment.Create.Command(
  29. memberID.Value,
  30. request.BoardID,
  31. request.PostID,
  32. request.ParentID,
  33. request.Content,
  34. request.IsSecret
  35. );
  36. var result = await sender.Send(command, ct);
  37. return result.Match(
  38. commentID => ApiResponse.Created(new { id = commentID }),
  39. CustomResults.Problem
  40. );
  41. })
  42. .WithTags("Forum")
  43. .RequireAuthorization();
  44. }
  45. }