using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace Infrastructure.Migrations.AppDb { /// /// 파생상품(선물/옵션) 일별매매에 매매 세션(Session, 1=정규/2=야간) 컬럼 추가 + UQ 를 (Kind, IsuCode, TradeDate, Session) 으로 확장. /// KRX 파생 응답은 동일 ISU_CD 로 정규·야간 행을 각각 제공하는데 기존 upsert 키에 세션이 없어 야간 행이 정규 종가·거래량을 덮어썼다. /// /// ⚠ 기존 운영 적재분은 세션 혼합 오염 가능(야간 값이 정규 위에 덮어써진 상태로 Session 기본값 1 이 매겨짐) — /// 배포 시 FuturesDailyTrade / OptionsDailyTrade 를 truncate 후 재백필 권장 (배치가 3년치를 자동으로 다시 메운다). /// public partial class AddDerivativeMarketSession : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.DropIndex( name: "IX_OptionsDailyTrade_OptionsKind_IsuCode_TradeDate", table: "OptionsDailyTrade"); migrationBuilder.DropIndex( name: "IX_OptionsDailyTrade_OptionsKind_TradeDate_TradeValue", table: "OptionsDailyTrade"); migrationBuilder.DropIndex( name: "IX_FuturesDailyTrade_FuturesKind_IsuCode_TradeDate", table: "FuturesDailyTrade"); migrationBuilder.DropIndex( name: "IX_FuturesDailyTrade_FuturesKind_TradeDate_TradeValue", table: "FuturesDailyTrade"); migrationBuilder.AddColumn( name: "Session", table: "OptionsDailyTrade", type: "tinyint", nullable: false, defaultValue: (byte)1, comment: "매매 세션 (1=정규, 2=야간)"); migrationBuilder.AddColumn( name: "Session", table: "FuturesDailyTrade", type: "tinyint", nullable: false, defaultValue: (byte)1, comment: "매매 세션 (1=정규, 2=야간)"); migrationBuilder.CreateIndex( name: "IX_OptionsDailyTrade_OptionsKind_IsuCode_TradeDate_Session", table: "OptionsDailyTrade", columns: new[] { "OptionsKind", "IsuCode", "TradeDate", "Session" }, unique: true); migrationBuilder.CreateIndex( name: "IX_OptionsDailyTrade_OptionsKind_TradeDate_Session_TradeValue", table: "OptionsDailyTrade", columns: new[] { "OptionsKind", "TradeDate", "Session", "TradeValue" }, descending: new[] { false, false, false, true }); migrationBuilder.CreateIndex( name: "IX_FuturesDailyTrade_FuturesKind_IsuCode_TradeDate_Session", table: "FuturesDailyTrade", columns: new[] { "FuturesKind", "IsuCode", "TradeDate", "Session" }, unique: true); migrationBuilder.CreateIndex( name: "IX_FuturesDailyTrade_FuturesKind_TradeDate_Session_TradeValue", table: "FuturesDailyTrade", columns: new[] { "FuturesKind", "TradeDate", "Session", "TradeValue" }, descending: new[] { false, false, false, true }); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropIndex( name: "IX_OptionsDailyTrade_OptionsKind_IsuCode_TradeDate_Session", table: "OptionsDailyTrade"); migrationBuilder.DropIndex( name: "IX_OptionsDailyTrade_OptionsKind_TradeDate_Session_TradeValue", table: "OptionsDailyTrade"); migrationBuilder.DropIndex( name: "IX_FuturesDailyTrade_FuturesKind_IsuCode_TradeDate_Session", table: "FuturesDailyTrade"); migrationBuilder.DropIndex( name: "IX_FuturesDailyTrade_FuturesKind_TradeDate_Session_TradeValue", table: "FuturesDailyTrade"); migrationBuilder.DropColumn( name: "Session", table: "OptionsDailyTrade"); migrationBuilder.DropColumn( name: "Session", table: "FuturesDailyTrade"); migrationBuilder.CreateIndex( name: "IX_OptionsDailyTrade_OptionsKind_IsuCode_TradeDate", table: "OptionsDailyTrade", columns: new[] { "OptionsKind", "IsuCode", "TradeDate" }, unique: true); migrationBuilder.CreateIndex( name: "IX_OptionsDailyTrade_OptionsKind_TradeDate_TradeValue", table: "OptionsDailyTrade", columns: new[] { "OptionsKind", "TradeDate", "TradeValue" }, descending: new[] { false, false, true }); migrationBuilder.CreateIndex( name: "IX_FuturesDailyTrade_FuturesKind_IsuCode_TradeDate", table: "FuturesDailyTrade", columns: new[] { "FuturesKind", "IsuCode", "TradeDate" }, unique: true); migrationBuilder.CreateIndex( name: "IX_FuturesDailyTrade_FuturesKind_TradeDate_TradeValue", table: "FuturesDailyTrade", columns: new[] { "FuturesKind", "TradeDate", "TradeValue" }, descending: new[] { false, false, true }); } } }