using Application.Abstractions.Data; using Microsoft.EntityFrameworkCore; namespace Infrastructure.StockData; /// 영업일 판정 — 주말 + MarketHoliday 제외 internal static class MarketCalendar { /// fromExclusive 직전 영업일 (주말/휴장일 제외) public static async Task GetPreviousBusinessDayAsync(IAppDbContext db, DateOnly fromExclusive, CancellationToken ct) { var date = fromExclusive.AddDays(-1); var floor = date.AddDays(-30); var holidays = await db.MarketHoliday.AsNoTracking().Where(c => c.Date >= floor && c.Date <= date).Select(c => c.Date).ToListAsync(ct); while (date.DayOfWeek is DayOfWeek.Saturday or DayOfWeek.Sunday || holidays.Contains(date)) { date = date.AddDays(-1); } return date; } }