Report.cs 1.2 KB

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