MarketCalendar.cs 862 B

1234567891011121314151617181920212223
  1. using Application.Abstractions.Data;
  2. using Microsoft.EntityFrameworkCore;
  3. namespace Infrastructure.StockData;
  4. /// <summary>영업일 판정 — 주말 + MarketHoliday 제외</summary>
  5. internal static class MarketCalendar
  6. {
  7. /// <summary>fromExclusive 직전 영업일 (주말/휴장일 제외)</summary>
  8. public static async Task<DateOnly> GetPreviousBusinessDayAsync(IAppDbContext db, DateOnly fromExclusive, CancellationToken ct)
  9. {
  10. var date = fromExclusive.AddDays(-1);
  11. var floor = date.AddDays(-30);
  12. var holidays = await db.MarketHoliday.AsNoTracking().Where(c => c.Date >= floor && c.Date <= date).Select(c => c.Date).ToListAsync(ct);
  13. while (date.DayOfWeek is DayOfWeek.Saturday or DayOfWeek.Sunday || holidays.Contains(date))
  14. {
  15. date = date.AddDays(-1);
  16. }
  17. return date;
  18. }
  19. }