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