using System;
using Microsoft.EntityFrameworkCore.Migrations;

#nullable disable

namespace bitforum.Migrations.DefaultDb
{
    /// <inheritdoc />
    public partial class a1 : Migration
    {
        /// <inheritdoc />
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
                name: "BannerPosition",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false, comment: "PK")
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Code = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: false, comment: "위치 구분"),
                    Subject = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: false, comment: "위치 명"),
                    IsActive = table.Column<bool>(type: "bit", nullable: false, comment: "사용 여부"),
                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "수정 일시"),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "등록 일시")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_BannerPosition", x => x.ID);
                });

            migrationBuilder.CreateTable(
                name: "Config",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false)
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Key = table.Column<string>(type: "nvarchar(450)", nullable: false),
                    Value = table.Column<string>(type: "nvarchar(max)", nullable: true),
                    Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Config", x => x.ID);
                });

            migrationBuilder.CreateTable(
                name: "Document",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false, comment: "PK")
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Code = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: false, comment: "주소"),
                    Subject = table.Column<string>(type: "nvarchar(120)", maxLength: 120, nullable: false, comment: "제목"),
                    Content = table.Column<string>(type: "nvarchar(max)", nullable: true, comment: "내용"),
                    IsActive = table.Column<bool>(type: "bit", nullable: false, comment: "사용 여부"),
                    Views = table.Column<int>(type: "int", nullable: false, comment: "조회 수"),
                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "수정 일시"),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "등록 일시")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Document", x => x.ID);
                });

            migrationBuilder.CreateTable(
                name: "EmailVerifyNumber",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false, comment: "PK")
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Type = table.Column<int>(type: "int", nullable: false, comment: "인증 유형 (이메일 인증 / 비밀번호 재설정)"),
                    Email = table.Column<string>(type: "nvarchar(60)", maxLength: 60, nullable: false, comment: "이메일"),
                    Code = table.Column<string>(type: "nvarchar(10)", maxLength: 10, nullable: false, comment: "Token"),
                    IsVerified = table.Column<bool>(type: "bit", nullable: false, comment: "인증 여부"),
                    Expiration = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "만료 일시"),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "등록 일시")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_EmailVerifyNumber", x => x.ID);
                },
                comment: "이메일 인증 번호들");

            migrationBuilder.CreateTable(
                name: "EmailVerifyToken",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false, comment: "PK")
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Type = table.Column<int>(type: "int", nullable: false, comment: "인증 유형 (이메일 인증 / 비밀번호 재설정)"),
                    Email = table.Column<string>(type: "nvarchar(60)", maxLength: 60, nullable: false, comment: "이메일"),
                    Token = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false, comment: "Token"),
                    IsVerified = table.Column<bool>(type: "bit", nullable: false, comment: "인증 여부"),
                    Expiration = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "만료 일시"),
                    Additional = table.Column<string>(type: "nvarchar(max)", nullable: true, comment: "추가 정보(JSON)"),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "등록 일시")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_EmailVerifyToken", x => x.ID);
                },
                comment: "이메일 인증 토큰들");

            migrationBuilder.CreateTable(
                name: "FaqCategory",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false, comment: "PK")
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Code = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: false, comment: "주소"),
                    Subject = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: false, comment: "분류 명"),
                    Order = table.Column<int>(type: "int", nullable: false, comment: "순서"),
                    IsActive = table.Column<bool>(type: "bit", nullable: false, comment: "사용 여부"),
                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "수정 일시"),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "등록 일시")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_FaqCategory", x => x.ID);
                });

            migrationBuilder.CreateTable(
                name: "MemberGrade",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false, comment: "PK")
                        .Annotation("SqlServer:Identity", "1, 1"),
                    KorName = table.Column<string>(type: "nvarchar(120)", maxLength: 120, nullable: false, comment: "한글 명"),
                    EngName = table.Column<string>(type: "nvarchar(120)", maxLength: 120, nullable: false, comment: "영문 명"),
                    Description = table.Column<string>(type: "nvarchar(1000)", maxLength: 1000, nullable: true, comment: "설명"),
                    Order = table.Column<short>(type: "smallint", nullable: false, comment: "순서"),
                    Image = table.Column<string>(type: "nvarchar(max)", nullable: true, comment: "이미지"),
                    RequiredExp = table.Column<int>(type: "int", nullable: false, comment: "최소 경험치(Exp)"),
                    RequiredCoin = table.Column<int>(type: "int", nullable: false, comment: "최소 코인(Coin)"),
                    IsActive = table.Column<bool>(type: "bit", nullable: false, comment: "사용 여부"),
                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "수정 일시"),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "등록 일시")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_MemberGrade", x => x.ID);
                },
                comment: "회원 등급");

            migrationBuilder.CreateTable(
                name: "Popup",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false, comment: "PK")
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Subject = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: false, comment: "제목"),
                    Content = table.Column<string>(type: "nvarchar(max)", nullable: true, comment: "내용"),
                    Link = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: true, comment: "주소"),
                    StartAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "사용 기간 - 시작"),
                    EndAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "사용 기간 - 종료"),
                    Order = table.Column<short>(type: "smallint", nullable: false, comment: "순서"),
                    IsActive = table.Column<bool>(type: "bit", nullable: false, comment: "사용 여부"),
                    Views = table.Column<int>(type: "int", nullable: false, comment: "조회 수"),
                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "수정 일시"),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "등록 일시")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Popup", x => x.ID);
                });

            migrationBuilder.CreateTable(
                name: "RefreshToken",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false, comment: "PK")
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Token = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false, comment: "Token"),
                    MemberID = table.Column<int>(type: "int", nullable: false, comment: "회원 ID"),
                    Expiration = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "만료 일시"),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "등록 일시")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_RefreshToken", x => x.ID);
                });

            migrationBuilder.CreateTable(
                name: "BannerItem",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false, comment: "PK")
                        .Annotation("SqlServer:Identity", "1, 1"),
                    PositionID = table.Column<int>(type: "int", nullable: false, comment: "배너 위치 ID"),
                    Subject = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: false, comment: "배너 명"),
                    Image = table.Column<string>(type: "nvarchar(1024)", maxLength: 1024, nullable: true, comment: "이미지"),
                    Width = table.Column<int>(type: "int", nullable: true, comment: "가로 크기"),
                    Height = table.Column<int>(type: "int", nullable: true, comment: "세로 크기"),
                    Link = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: true, comment: "주소"),
                    Order = table.Column<int>(type: "int", nullable: false, comment: "순서"),
                    IsActive = table.Column<bool>(type: "bit", nullable: false, comment: "사용 여부"),
                    StartAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "사용 기간 - 시작"),
                    EndAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "사용 기간 - 종료"),
                    Views = table.Column<int>(type: "int", nullable: false, comment: "조회 수"),
                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "수정 일시"),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "등록 일시")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_BannerItem", x => x.ID);
                    table.ForeignKey(
                        name: "FK_BannerItem_BannerPosition_PositionID",
                        column: x => x.PositionID,
                        principalTable: "BannerPosition",
                        principalColumn: "ID",
                        onDelete: ReferentialAction.Cascade);
                });

            migrationBuilder.CreateTable(
                name: "FaqItem",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false, comment: "PK")
                        .Annotation("SqlServer:Identity", "1, 1"),
                    CategoryID = table.Column<int>(type: "int", nullable: false, comment: "분류 ID"),
                    Question = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: false, comment: "질문"),
                    Answer = table.Column<string>(type: "nvarchar(max)", nullable: true, comment: "답변"),
                    Order = table.Column<int>(type: "int", nullable: false, comment: "순서"),
                    IsActive = table.Column<bool>(type: "bit", nullable: false, comment: "사용 여부"),
                    Views = table.Column<int>(type: "int", nullable: false, comment: "조회 수"),
                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "수정 일시"),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "등록 일시")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_FaqItem", x => x.ID);
                    table.ForeignKey(
                        name: "FK_FaqItem_FaqCategory_CategoryID",
                        column: x => x.CategoryID,
                        principalTable: "FaqCategory",
                        principalColumn: "ID",
                        onDelete: ReferentialAction.Cascade);
                });

            migrationBuilder.CreateTable(
                name: "Member",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false, comment: "PK")
                        .Annotation("SqlServer:Identity", "1, 1"),
                    GradeID = table.Column<int>(type: "int", nullable: true, comment: "회원등급 ID"),
                    SID = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: false, comment: "SID"),
                    Email = table.Column<string>(type: "nvarchar(60)", maxLength: 60, nullable: false, comment: "이메일"),
                    Name = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true, comment: "별명"),
                    FullName = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true, comment: "본명"),
                    FirstName = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true, comment: "본명(성)"),
                    LastName = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true, comment: "본명(이름)"),
                    Password = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: true, comment: "비밀번호"),
                    Intro = table.Column<string>(type: "nvarchar(1000)", maxLength: 1000, nullable: true, comment: "자기소개"),
                    Summary = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true, comment: "한마디"),
                    Coin = table.Column<long>(type: "bigint", nullable: false, comment: "코인"),
                    Exp = table.Column<int>(type: "int", nullable: false, comment: "경험치"),
                    Phone = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: true, comment: "연락처"),
                    Birthday = table.Column<DateOnly>(type: "date", nullable: true, comment: "생년월일"),
                    Gender = table.Column<int>(type: "int", nullable: true, comment: "성별"),
                    Photo = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: true, comment: "사진"),
                    Icon = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: true, comment: "아이콘"),
                    IsEmailVerified = table.Column<bool>(type: "bit", nullable: false, comment: "이메일 인증 여부"),
                    IsAuthCertified = table.Column<bool>(type: "bit", nullable: false, comment: "본인 인증 여부"),
                    IsDenied = table.Column<bool>(type: "bit", nullable: false, comment: "차단 여부"),
                    IsAdmin = table.Column<bool>(type: "bit", nullable: false, comment: "운영진 여부"),
                    IsWithdraw = table.Column<bool>(type: "bit", nullable: false, comment: "탈퇴 여부"),
                    Following = table.Column<int>(type: "int", nullable: false, comment: "구독 중"),
                    Followed = table.Column<int>(type: "int", nullable: false, comment: "구독자"),
                    DeviceInfo = table.Column<string>(type: "nvarchar(400)", maxLength: 400, nullable: true, comment: "로그인 단말기 정보"),
                    SignupIP = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: false, comment: "회원가입 시 IP"),
                    LastLoginIp = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: true, comment: "마지막 로그인 IP"),
                    LastLoginAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "마지막 로그인 일시"),
                    LastEmailChangedAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "마지막 이메일 변경 일시"),
                    LastNameChangedAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "마지막 별명 변경 일시"),
                    EmailVerifiedAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "이메일 인증 일시"),
                    AuthCertifiedAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "본인인증 일시"),
                    PasswordUpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "비밀번호 변경 일시"),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "가입 일시"),
                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "수정 일시"),
                    DeletedAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "탈퇴 일시")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Member", x => x.ID);
                    table.ForeignKey(
                        name: "FK_Member_MemberGrade_GradeID",
                        column: x => x.GradeID,
                        principalTable: "MemberGrade",
                        principalColumn: "ID");
                },
                comment: "회원 정보");

            migrationBuilder.CreateTable(
                name: "EmailChangeLog",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false, comment: "PK")
                        .Annotation("SqlServer:Identity", "1, 1"),
                    MemberID = table.Column<int>(type: "int", nullable: false, comment: "회원 ID"),
                    BeforeEmail = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true, comment: "이전 이메일"),
                    AfterEmail = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: false, comment: "바꾼 이메일"),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "등록 일시")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_EmailChangeLog", x => x.ID);
                    table.ForeignKey(
                        name: "FK_EmailChangeLog_Member_MemberID",
                        column: x => x.MemberID,
                        principalTable: "Member",
                        principalColumn: "ID");
                },
                comment: "이메일 변경 내역");

            migrationBuilder.CreateTable(
                name: "EmailLog",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false, comment: "PK")
                        .Annotation("SqlServer:Identity", "1, 1"),
                    MemberID = table.Column<int>(type: "int", nullable: true, comment: "회원 ID"),
                    Status = table.Column<string>(type: "nvarchar(20)", nullable: false, comment: "처리 여부"),
                    Subject = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: false, comment: "제목"),
                    Message = table.Column<string>(type: "nvarchar(max)", nullable: true, comment: "내용"),
                    ToAddress = table.Column<string>(type: "nvarchar(120)", maxLength: 120, nullable: false, comment: "수신 주소"),
                    ToName = table.Column<string>(type: "nvarchar(60)", maxLength: 60, nullable: true, comment: "수신자"),
                    FromAddress = table.Column<string>(type: "nvarchar(120)", maxLength: 120, nullable: false, comment: "발신 주소"),
                    FromName = table.Column<string>(type: "nvarchar(60)", maxLength: 60, nullable: true, comment: "발신자"),
                    ProcessedAt = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "처리 일시"),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "등록 일시")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_EmailLog", x => x.ID);
                    table.ForeignKey(
                        name: "FK_EmailLog_Member_MemberID",
                        column: x => x.MemberID,
                        principalTable: "Member",
                        principalColumn: "ID",
                        onDelete: ReferentialAction.SetNull);
                });

            migrationBuilder.CreateTable(
                name: "LoginLog",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false, comment: "PK")
                        .Annotation("SqlServer:Identity", "1, 1"),
                    MemberID = table.Column<int>(type: "int", nullable: true, comment: "회원 ID"),
                    Success = table.Column<bool>(type: "bit", nullable: false, comment: "로그인 성공 여부 (0: 실패, 1: 성공)"),
                    Account = table.Column<string>(type: "nvarchar(120)", maxLength: 120, nullable: false, comment: "로그인 시도한 계정"),
                    Reason = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: true, comment: "실패 이유"),
                    Referer = table.Column<string>(type: "nvarchar(max)", nullable: true, comment: "이전 페이지 주소"),
                    Url = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true, comment: "요청 주소"),
                    IpAddress = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: true, comment: "IP Address"),
                    UserAgent = table.Column<string>(type: "nvarchar(512)", maxLength: 512, nullable: true, comment: "User Agent"),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "등록 일시")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_LoginLog", x => x.ID);
                    table.ForeignKey(
                        name: "FK_LoginLog_Member_MemberID",
                        column: x => x.MemberID,
                        principalTable: "Member",
                        principalColumn: "ID",
                        onDelete: ReferentialAction.SetNull);
                },
                comment: "로그인 기록");

            migrationBuilder.CreateTable(
                name: "MemberApprove",
                columns: table => new
                {
                    MemberID = table.Column<int>(type: "int", nullable: false, comment: "회원 ID"),
                    IsReceiveSMS = table.Column<bool>(type: "bit", nullable: false, comment: "SMS 수신 여부"),
                    IsReceiveEmail = table.Column<bool>(type: "bit", nullable: false, comment: "E-MAIL 수신 여부"),
                    IsReceiveNote = table.Column<bool>(type: "bit", nullable: false, comment: "쪽지 수신 여부"),
                    IsDisclosureInvest = table.Column<bool>(type: "bit", nullable: false, comment: "투자 현황 공개 여부")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_MemberApprove", x => x.MemberID);
                    table.ForeignKey(
                        name: "FK_MemberApprove_Member_MemberID",
                        column: x => x.MemberID,
                        principalTable: "Member",
                        principalColumn: "ID");
                },
                comment: "회원 동의 및 수신 여부");

            migrationBuilder.CreateTable(
                name: "NameChangeLog",
                columns: table => new
                {
                    ID = table.Column<int>(type: "int", nullable: false, comment: "PK")
                        .Annotation("SqlServer:Identity", "1, 1"),
                    MemberID = table.Column<int>(type: "int", nullable: false, comment: "회원 ID"),
                    BeforeName = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true, comment: "이전 별명"),
                    AfterName = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: false, comment: "바꾼 별명"),
                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, comment: "등록 일시")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_NameChangeLog", x => x.ID);
                    table.ForeignKey(
                        name: "FK_NameChangeLog_Member_MemberID",
                        column: x => x.MemberID,
                        principalTable: "Member",
                        principalColumn: "ID");
                },
                comment: "별명 변경 내역");

            migrationBuilder.CreateIndex(
                name: "IX_BannerItem_IsActive",
                table: "BannerItem",
                column: "IsActive");

            migrationBuilder.CreateIndex(
                name: "IX_BannerItem_Order",
                table: "BannerItem",
                column: "Order");

            migrationBuilder.CreateIndex(
                name: "IX_BannerItem_PositionID",
                table: "BannerItem",
                column: "PositionID");

            migrationBuilder.CreateIndex(
                name: "IX_BannerPosition_Code",
                table: "BannerPosition",
                column: "Code",
                unique: true);

            migrationBuilder.CreateIndex(
                name: "IX_BannerPosition_IsActive",
                table: "BannerPosition",
                column: "IsActive");

            migrationBuilder.CreateIndex(
                name: "IX_Config_Key",
                table: "Config",
                column: "Key",
                unique: true);

            migrationBuilder.CreateIndex(
                name: "IX_Document_Code",
                table: "Document",
                column: "Code",
                unique: true);

            migrationBuilder.CreateIndex(
                name: "IX_Document_IsActive",
                table: "Document",
                column: "IsActive");

            migrationBuilder.CreateIndex(
                name: "IX_EmailChangeLog_MemberID",
                table: "EmailChangeLog",
                column: "MemberID");

            migrationBuilder.CreateIndex(
                name: "IX_EmailLog_MemberID",
                table: "EmailLog",
                column: "MemberID");

            migrationBuilder.CreateIndex(
                name: "IX_EmailLog_Status",
                table: "EmailLog",
                column: "Status");

            migrationBuilder.CreateIndex(
                name: "IX_EmailVerifyNumber_Email",
                table: "EmailVerifyNumber",
                column: "Email");

            migrationBuilder.CreateIndex(
                name: "IX_EmailVerifyNumber_Expiration",
                table: "EmailVerifyNumber",
                column: "Expiration");

            migrationBuilder.CreateIndex(
                name: "IX_EmailVerifyNumber_IsVerified",
                table: "EmailVerifyNumber",
                column: "IsVerified");

            migrationBuilder.CreateIndex(
                name: "IX_EmailVerifyNumber_Type",
                table: "EmailVerifyNumber",
                column: "Type");

            migrationBuilder.CreateIndex(
                name: "IX_EmailVerifyToken_Email",
                table: "EmailVerifyToken",
                column: "Email");

            migrationBuilder.CreateIndex(
                name: "IX_EmailVerifyToken_Expiration",
                table: "EmailVerifyToken",
                column: "Expiration");

            migrationBuilder.CreateIndex(
                name: "IX_EmailVerifyToken_IsVerified",
                table: "EmailVerifyToken",
                column: "IsVerified");

            migrationBuilder.CreateIndex(
                name: "IX_EmailVerifyToken_Type",
                table: "EmailVerifyToken",
                column: "Type");

            migrationBuilder.CreateIndex(
                name: "IX_FaqCategory_Code",
                table: "FaqCategory",
                column: "Code",
                unique: true);

            migrationBuilder.CreateIndex(
                name: "IX_FaqCategory_Order",
                table: "FaqCategory",
                column: "Order");

            migrationBuilder.CreateIndex(
                name: "IX_FaqItem_CategoryID",
                table: "FaqItem",
                column: "CategoryID");

            migrationBuilder.CreateIndex(
                name: "IX_FaqItem_IsActive",
                table: "FaqItem",
                column: "IsActive");

            migrationBuilder.CreateIndex(
                name: "IX_FaqItem_Order",
                table: "FaqItem",
                column: "Order");

            migrationBuilder.CreateIndex(
                name: "IX_LoginLog_MemberID",
                table: "LoginLog",
                column: "MemberID");

            migrationBuilder.CreateIndex(
                name: "IX_Member_Email",
                table: "Member",
                column: "Email",
                unique: true);

            migrationBuilder.CreateIndex(
                name: "IX_Member_FullName",
                table: "Member",
                column: "FullName");

            migrationBuilder.CreateIndex(
                name: "IX_Member_GradeID",
                table: "Member",
                column: "GradeID");

            migrationBuilder.CreateIndex(
                name: "IX_Member_IsAdmin",
                table: "Member",
                column: "IsAdmin");

            migrationBuilder.CreateIndex(
                name: "IX_Member_IsAuthCertified",
                table: "Member",
                column: "IsAuthCertified");

            migrationBuilder.CreateIndex(
                name: "IX_Member_IsDenied",
                table: "Member",
                column: "IsDenied");

            migrationBuilder.CreateIndex(
                name: "IX_Member_IsEmailVerified",
                table: "Member",
                column: "IsEmailVerified");

            migrationBuilder.CreateIndex(
                name: "IX_Member_IsWithdraw",
                table: "Member",
                column: "IsWithdraw");

            migrationBuilder.CreateIndex(
                name: "IX_Member_Name",
                table: "Member",
                column: "Name",
                unique: true,
                filter: "[Name] IS NOT NULL");

            migrationBuilder.CreateIndex(
                name: "IX_Member_Phone",
                table: "Member",
                column: "Phone");

            migrationBuilder.CreateIndex(
                name: "IX_Member_SID",
                table: "Member",
                column: "SID",
                unique: true);

            migrationBuilder.CreateIndex(
                name: "IX_MemberGrade_EngName",
                table: "MemberGrade",
                column: "EngName",
                unique: true);

            migrationBuilder.CreateIndex(
                name: "IX_MemberGrade_KorName",
                table: "MemberGrade",
                column: "KorName",
                unique: true);

            migrationBuilder.CreateIndex(
                name: "IX_NameChangeLog_MemberID",
                table: "NameChangeLog",
                column: "MemberID");

            migrationBuilder.CreateIndex(
                name: "IX_Popup_IsActive",
                table: "Popup",
                column: "IsActive");

            migrationBuilder.CreateIndex(
                name: "IX_Popup_Order",
                table: "Popup",
                column: "Order");
        }

        /// <inheritdoc />
        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropTable(
                name: "BannerItem");

            migrationBuilder.DropTable(
                name: "Config");

            migrationBuilder.DropTable(
                name: "Document");

            migrationBuilder.DropTable(
                name: "EmailChangeLog");

            migrationBuilder.DropTable(
                name: "EmailLog");

            migrationBuilder.DropTable(
                name: "EmailVerifyNumber");

            migrationBuilder.DropTable(
                name: "EmailVerifyToken");

            migrationBuilder.DropTable(
                name: "FaqItem");

            migrationBuilder.DropTable(
                name: "LoginLog");

            migrationBuilder.DropTable(
                name: "MemberApprove");

            migrationBuilder.DropTable(
                name: "NameChangeLog");

            migrationBuilder.DropTable(
                name: "Popup");

            migrationBuilder.DropTable(
                name: "RefreshToken");

            migrationBuilder.DropTable(
                name: "BannerPosition");

            migrationBuilder.DropTable(
                name: "FaqCategory");

            migrationBuilder.DropTable(
                name: "Member");

            migrationBuilder.DropTable(
                name: "MemberGrade");
        }
    }
}
