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