LiveLeaderboard.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. using System.Security.Claims;
  2. using Application.Abstractions.Messaging;
  3. using Web.Api.Common;
  4. using Web.Api.Extensions;
  5. namespace Web.Api.Endpoints.Channel;
  6. /// <summary>현재 방송 세션의 라이브 XP 리더보드</summary>
  7. internal sealed class LiveLeaderboard : IEndpoint
  8. {
  9. public void MapEndpoint(IEndpointRouteBuilder app)
  10. {
  11. /// identifier: @handle 또는 YouTube Channel ID (SID)
  12. app.MapGet("api/channel/{identifier}/live-leaderboard", async (
  13. string identifier,
  14. int? maxRank,
  15. ClaimsPrincipal user,
  16. ISender sender,
  17. CancellationToken ct
  18. ) => {
  19. int? viewerID = null;
  20. if (user.Identity?.IsAuthenticated == true)
  21. {
  22. viewerID = user.GetMemberID();
  23. }
  24. var query = new Application.Features.Api.Channel.GetLiveLeaderboard.Query(identifier, maxRank, viewerID);
  25. var data = await sender.Send(query, ct);
  26. return ApiResponse.Ok(data);
  27. })
  28. .WithTags("Channel")
  29. .AllowAnonymous()
  30. .RequireFeature(c => c.Channel);
  31. }
  32. }