using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace Infrastructure.Migrations.AppDb { /// /// KRX 휴장일 2023~2025 백필 시드 — 기존 시드(AddStockDomain)가 2026년만 포함해 3년 백필 창의 과거 휴장일이 /// 영구 미적재 → 수집 배치가 휴장일을 매 실행 재호출하는 문제(API 감사 P2-4) 해소. /// 주말(토·일)에 해당하는 공휴일은 제외(KrxBackfill 이 주말은 자동 스킵). 전 날짜 KRX 휴장 공시·복수 소스 교차 검증(2026-07-07): /// - 임시공휴일: 2023-10-02, 2024-10-01(국군의날), 2025-01-27 /// - 선거일: 2024-04-10(제22대 총선), 2025-06-03(제21대 대선) /// - 연말 휴장일: 2023-12-29(12/31 일·12/30 토 → 직전 평일), 2024-12-31, 2025-12-31 /// public partial class SeedMarketHolidays2023To2025 : Migration { // 2023~2025 KRX 휴장일 (주말 제외 평일만) — Down 에서 동일 목록으로 삭제 private static readonly object[,] Holidays = new object[,] { // 2023 (15일) { new DateOnly(2023, 1, 23), "설날 연휴" }, { new DateOnly(2023, 1, 24), "설날 대체공휴일" }, { new DateOnly(2023, 3, 1), "삼일절" }, { new DateOnly(2023, 5, 1), "근로자의날" }, { new DateOnly(2023, 5, 5), "어린이날" }, { new DateOnly(2023, 5, 29), "부처님오신날 대체공휴일" }, { new DateOnly(2023, 6, 6), "현충일" }, { new DateOnly(2023, 8, 15), "광복절" }, { new DateOnly(2023, 9, 28), "추석 연휴" }, { new DateOnly(2023, 9, 29), "추석" }, { new DateOnly(2023, 10, 2), "임시공휴일" }, { new DateOnly(2023, 10, 3), "개천절" }, { new DateOnly(2023, 10, 9), "한글날" }, { new DateOnly(2023, 12, 25), "성탄절" }, { new DateOnly(2023, 12, 29), "연말 휴장일" }, // 2024 (18일) { new DateOnly(2024, 1, 1), "신정" }, { new DateOnly(2024, 2, 9), "설날 연휴" }, { new DateOnly(2024, 2, 12), "설날 대체공휴일" }, { new DateOnly(2024, 3, 1), "삼일절" }, { new DateOnly(2024, 4, 10), "제22대 국회의원선거" }, { new DateOnly(2024, 5, 1), "근로자의날" }, { new DateOnly(2024, 5, 6), "어린이날 대체공휴일" }, { new DateOnly(2024, 5, 15), "부처님오신날" }, { new DateOnly(2024, 6, 6), "현충일" }, { new DateOnly(2024, 8, 15), "광복절" }, { new DateOnly(2024, 9, 16), "추석 연휴" }, { new DateOnly(2024, 9, 17), "추석" }, { new DateOnly(2024, 9, 18), "추석 연휴" }, { new DateOnly(2024, 10, 1), "임시공휴일(국군의날)" }, { new DateOnly(2024, 10, 3), "개천절" }, { new DateOnly(2024, 10, 9), "한글날" }, { new DateOnly(2024, 12, 25), "성탄절" }, { new DateOnly(2024, 12, 31), "연말 휴장일" }, // 2025 (19일) { new DateOnly(2025, 1, 1), "신정" }, { new DateOnly(2025, 1, 27), "임시공휴일" }, { new DateOnly(2025, 1, 28), "설날 연휴" }, { new DateOnly(2025, 1, 29), "설날" }, { new DateOnly(2025, 1, 30), "설날 연휴" }, { new DateOnly(2025, 3, 3), "삼일절 대체공휴일" }, { new DateOnly(2025, 5, 1), "근로자의날" }, { new DateOnly(2025, 5, 5), "어린이날·부처님오신날" }, { new DateOnly(2025, 5, 6), "대체공휴일" }, { new DateOnly(2025, 6, 3), "제21대 대통령선거" }, { new DateOnly(2025, 6, 6), "현충일" }, { new DateOnly(2025, 8, 15), "광복절" }, { new DateOnly(2025, 10, 3), "개천절" }, { new DateOnly(2025, 10, 6), "추석" }, { new DateOnly(2025, 10, 7), "추석 연휴" }, { new DateOnly(2025, 10, 8), "추석 대체공휴일" }, { new DateOnly(2025, 10, 9), "한글날" }, { new DateOnly(2025, 12, 25), "성탄절" }, { new DateOnly(2025, 12, 31), "연말 휴장일" } }; /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.InsertData( table: "MarketHoliday", columns: new[] { "Date", "Name" }, values: Holidays); } /// protected override void Down(MigrationBuilder migrationBuilder) { for (var i = 0; i < Holidays.GetLength(0); i++) { migrationBuilder.DeleteData( table: "MarketHoliday", keyColumn: "Date", keyValue: Holidays[i, 0]); } } } }