ToggleReaction.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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.Comment;
  7. internal sealed class ToggleReaction : IEndpoint
  8. {
  9. public sealed record Request(Reaction Reaction);
  10. public void MapEndpoint(IEndpointRouteBuilder app)
  11. {
  12. app.MapPost("api/forum/comments/{id}/reaction", async (
  13. int id,
  14. ClaimsPrincipal user,
  15. Request request,
  16. ISender sender,
  17. CancellationToken ct
  18. ) => {
  19. var memberID = user.GetMemberID();
  20. if (memberID is null)
  21. {
  22. return ApiResponse.Fail(StatusCodes.Status401Unauthorized, "Invalid token");
  23. }
  24. var command = new Application.Features.Api.Forum.CommentReaction.Toggle.Command(
  25. memberID.Value,
  26. id,
  27. request.Reaction
  28. );
  29. var result = await sender.Send(command, ct);
  30. return result.Match(
  31. () => ApiResponse.Ok(),
  32. CustomResults.Problem
  33. );
  34. })
  35. .WithTags("Forum")
  36. .RequireAuthorization();
  37. }
  38. }