Handler.cs 999 B

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