using Application.Abstractions.Data;
using Application.Abstractions.Messaging;
using Microsoft.EntityFrameworkCore;
namespace Application.Features.Admin.Stocks.MarketHolidays.GetAll;
/// KRX 휴장일 목록 — 연도 필터 + 날짜 오름차순. 수집 배치(KrxBackfill)의 영업일 판정 원본 데이터.
internal sealed class Handler(IAppDbContext db) : IQueryHandler
{
public async Task Handle(Query request, CancellationToken ct)
{
var years = await db.MarketHoliday.AsNoTracking().Select(c => c.Date.Year).Distinct().OrderByDescending(c => c).ToListAsync(ct);
var query = db.MarketHoliday.AsNoTracking();
if (request.Year.HasValue)
{
query = query.Where(c => c.Date.Year == request.Year.Value);
}
var list = await query.OrderBy(c => c.Date).Select(c => new Response.Row(c.Date, c.Name)).ToListAsync(ct);
return new Response(list.Count, years, list);
}
}