using Application.Abstractions.Data;
using Domain.Entities.Donations.ValueObject;
using Web.Api.Common;
using Microsoft.EntityFrameworkCore;
namespace Web.Api.Endpoints.Widget;
/// WidgetToken + configID 기반 크루 리더보드 (위젯 초기 로드용, 인증 불필요).
/// configID로 CrewWidgetConfig → Crew 식별 → CrewMember 기반 base ranking + CrewDonationSummary로 수치 갱신.
/// 후원 없는 크루원도 0원으로 표시.
internal sealed class CrewRankingByToken : IEndpoint
{
public void MapEndpoint(IEndpointRouteBuilder app)
{
app.MapGet("api/widget/crew/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