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.Post;
  6. internal sealed class Create : IEndpoint
  7. {
  8. public sealed record Request(
  9. int BoardID,
  10. int? BoardPrefixID,
  11. string Subject,
  12. string Content,
  13. bool IsSecret
  14. );
  15. public void MapEndpoint(IEndpointRouteBuilder app)
  16. {
  17. app.MapPost("api/forum/posts", 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.Post.Create.Command(
  29. memberID.Value,
  30. request.BoardID,
  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. postID => ApiResponse.Created(new { id = postID }),
  39. CustomResults.Problem
  40. );
  41. })
  42. .WithTags("Forum")
  43. .RequireAuthorization();
  44. }
  45. }