using System.Security.Claims;
using Web.Api.Common;
using Web.Api.Extensions;
using Application.Abstractions.Messaging;
namespace Web.Api.Endpoints.Store;
/// 상점 — 최근 후원 채널 자동 검증. localStorage 의 stale ID 자동 제거용.
internal sealed class ChannelsGetByIds : IEndpoint
{
/// 최대 ID 개수 (방어적 상한).
private const int MaxIDs = 10;
public void MapEndpoint(IEndpointRouteBuilder app)
{
app.MapGet("api/store/channels/by-ids", async (
string? ids,
ClaimsPrincipal user,
ISender sender,
CancellationToken ct
) => {
var memberID = user.GetRequiredMemberID();
var parsed = (ids ?? "")
.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
.Select(s => int.TryParse(s, out var v) ? v : 0)
.Where(v => v > 0)
.Distinct()
.Take(MaxIDs)
.ToList();
var data = await sender.Send(new Application.Features.Api.Channel.GetByIds.Query(memberID, parsed), ct);
return ApiResponse.Ok(data);
})
.WithTags("Store")
.RequireAuthorization();
}
}