20260707084606_SeedMarketHolidays2023To2025.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using Microsoft.EntityFrameworkCore.Migrations;
  2. #nullable disable
  3. namespace Infrastructure.Migrations.AppDb
  4. {
  5. /// <summary>
  6. /// KRX 휴장일 2023~2025 백필 시드 — 기존 시드(AddStockDomain)가 2026년만 포함해 3년 백필 창의 과거 휴장일이
  7. /// 영구 미적재 → 수집 배치가 휴장일을 매 실행 재호출하는 문제(API 감사 P2-4) 해소.
  8. /// 주말(토·일)에 해당하는 공휴일은 제외(KrxBackfill 이 주말은 자동 스킵). 전 날짜 KRX 휴장 공시·복수 소스 교차 검증(2026-07-07):
  9. /// - 임시공휴일: 2023-10-02, 2024-10-01(국군의날), 2025-01-27
  10. /// - 선거일: 2024-04-10(제22대 총선), 2025-06-03(제21대 대선)
  11. /// - 연말 휴장일: 2023-12-29(12/31 일·12/30 토 → 직전 평일), 2024-12-31, 2025-12-31
  12. /// </summary>
  13. public partial class SeedMarketHolidays2023To2025 : Migration
  14. {
  15. // 2023~2025 KRX 휴장일 (주말 제외 평일만) — Down 에서 동일 목록으로 삭제
  16. private static readonly object[,] Holidays = new object[,]
  17. {
  18. // 2023 (15일)
  19. { new DateOnly(2023, 1, 23), "설날 연휴" },
  20. { new DateOnly(2023, 1, 24), "설날 대체공휴일" },
  21. { new DateOnly(2023, 3, 1), "삼일절" },
  22. { new DateOnly(2023, 5, 1), "근로자의날" },
  23. { new DateOnly(2023, 5, 5), "어린이날" },
  24. { new DateOnly(2023, 5, 29), "부처님오신날 대체공휴일" },
  25. { new DateOnly(2023, 6, 6), "현충일" },
  26. { new DateOnly(2023, 8, 15), "광복절" },
  27. { new DateOnly(2023, 9, 28), "추석 연휴" },
  28. { new DateOnly(2023, 9, 29), "추석" },
  29. { new DateOnly(2023, 10, 2), "임시공휴일" },
  30. { new DateOnly(2023, 10, 3), "개천절" },
  31. { new DateOnly(2023, 10, 9), "한글날" },
  32. { new DateOnly(2023, 12, 25), "성탄절" },
  33. { new DateOnly(2023, 12, 29), "연말 휴장일" },
  34. // 2024 (18일)
  35. { new DateOnly(2024, 1, 1), "신정" },
  36. { new DateOnly(2024, 2, 9), "설날 연휴" },
  37. { new DateOnly(2024, 2, 12), "설날 대체공휴일" },
  38. { new DateOnly(2024, 3, 1), "삼일절" },
  39. { new DateOnly(2024, 4, 10), "제22대 국회의원선거" },
  40. { new DateOnly(2024, 5, 1), "근로자의날" },
  41. { new DateOnly(2024, 5, 6), "어린이날 대체공휴일" },
  42. { new DateOnly(2024, 5, 15), "부처님오신날" },
  43. { new DateOnly(2024, 6, 6), "현충일" },
  44. { new DateOnly(2024, 8, 15), "광복절" },
  45. { new DateOnly(2024, 9, 16), "추석 연휴" },
  46. { new DateOnly(2024, 9, 17), "추석" },
  47. { new DateOnly(2024, 9, 18), "추석 연휴" },
  48. { new DateOnly(2024, 10, 1), "임시공휴일(국군의날)" },
  49. { new DateOnly(2024, 10, 3), "개천절" },
  50. { new DateOnly(2024, 10, 9), "한글날" },
  51. { new DateOnly(2024, 12, 25), "성탄절" },
  52. { new DateOnly(2024, 12, 31), "연말 휴장일" },
  53. // 2025 (19일)
  54. { new DateOnly(2025, 1, 1), "신정" },
  55. { new DateOnly(2025, 1, 27), "임시공휴일" },
  56. { new DateOnly(2025, 1, 28), "설날 연휴" },
  57. { new DateOnly(2025, 1, 29), "설날" },
  58. { new DateOnly(2025, 1, 30), "설날 연휴" },
  59. { new DateOnly(2025, 3, 3), "삼일절 대체공휴일" },
  60. { new DateOnly(2025, 5, 1), "근로자의날" },
  61. { new DateOnly(2025, 5, 5), "어린이날·부처님오신날" },
  62. { new DateOnly(2025, 5, 6), "대체공휴일" },
  63. { new DateOnly(2025, 6, 3), "제21대 대통령선거" },
  64. { new DateOnly(2025, 6, 6), "현충일" },
  65. { new DateOnly(2025, 8, 15), "광복절" },
  66. { new DateOnly(2025, 10, 3), "개천절" },
  67. { new DateOnly(2025, 10, 6), "추석" },
  68. { new DateOnly(2025, 10, 7), "추석 연휴" },
  69. { new DateOnly(2025, 10, 8), "추석 대체공휴일" },
  70. { new DateOnly(2025, 10, 9), "한글날" },
  71. { new DateOnly(2025, 12, 25), "성탄절" },
  72. { new DateOnly(2025, 12, 31), "연말 휴장일" }
  73. };
  74. /// <inheritdoc />
  75. protected override void Up(MigrationBuilder migrationBuilder)
  76. {
  77. migrationBuilder.InsertData(
  78. table: "MarketHoliday",
  79. columns: new[] { "Date", "Name" },
  80. values: Holidays);
  81. }
  82. /// <inheritdoc />
  83. protected override void Down(MigrationBuilder migrationBuilder)
  84. {
  85. for (var i = 0; i < Holidays.GetLength(0); i++)
  86. {
  87. migrationBuilder.DeleteData(
  88. table: "MarketHoliday",
  89. keyColumn: "Date",
  90. keyValue: Holidays[i, 0]);
  91. }
  92. }
  93. }
  94. }