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(); } }