using Application.Abstractions.Data;
using Domain.Entities.Donations.ValueObject;
using Web.Api.Common;
using Microsoft.EntityFrameworkCore;
namespace Web.Api.Endpoints.Widget;
/// WidgetToken + configID 기반 후원 순위 (위젯 초기 로드용, 인증 불필요).
/// configID 지정 시 해당 RankConfig의 Period + MaxRankCount 적용. 미지정 시 활성 첫 번째 또는 Daily/Top5 default.
/// Donation 테이블 실시간 GROUP BY (DonationRanking 사전 집계 무시).
internal sealed class DonationRankingByToken : IEndpoint
{
public void MapEndpoint(IEndpointRouteBuilder app)
{
app.MapGet("api/widget/rank/by-token/{widgetToken}", async (
string widgetToken,
int? configID,
IAppDbContext db,
CancellationToken ct
) => {
var channelID = await db.Channel.AsNoTracking()
.Where(c => c.WidgetToken == widgetToken && c.IsActive)
.Select(c => c.ID)
.FirstOrDefaultAsync(ct);
if (channelID == 0)
{
return ApiResponse.Ok(new { list = Array.Empty