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