IsFollowing.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System.Security.Claims;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.AspNetCore.Mvc.ModelBinding;
  4. using Application.Abstractions.Messaging;
  5. using Web.Api.Common;
  6. using Web.Api.Extensions;
  7. namespace Web.Api.Endpoints.Member.Follow;
  8. internal sealed class IsFollowing : IEndpoint
  9. {
  10. public sealed record Request(IReadOnlyList<string>? Sids);
  11. public void MapEndpoint(IEndpointRouteBuilder app)
  12. {
  13. app.MapPost("api/member/follow/check", async (
  14. [FromBody(EmptyBodyBehavior = EmptyBodyBehavior.Allow)] Request? request,
  15. ClaimsPrincipal user,
  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 sids = request?.Sids ?? [];
  25. var query = new Application.Features.Api.Member.Follow.IsFollowing.Query(memberID.Value, sids);
  26. var result = await sender.Send(query, ct);
  27. return result.Match(
  28. data => ApiResponse.Ok(data),
  29. CustomResults.Problem
  30. );
  31. })
  32. .WithTags("Member.Follow")
  33. .RequireAuthorization();
  34. }
  35. }