using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; namespace FileService.Infrastructure.Migrations { [DbContext(typeof(FileDbContext))] [Migration("20260909000300_AsyncUploadResult")] public partial class AsyncUploadResult : Migration { protected override void Up(MigrationBuilder migrationBuilder) { AlterStringColumns(migrationBuilder, narrowing: true); migrationBuilder.AddColumn( name: "ChatType", table: "upload_files", type: "varchar(16)", maxLength: 16, nullable: true); migrationBuilder.AddColumn( name: "IsPublic", table: "upload_files", type: "tinyint(1)", nullable: false, defaultValue: false); migrationBuilder.AddColumn( name: "SourceTaskId", table: "upload_files", type: "char(36)", nullable: true); migrationBuilder.AddColumn( name: "TargetId", table: "upload_files", type: "char(36)", nullable: true); migrationBuilder.AddColumn( name: "ChatType", table: "upload_tasks", type: "varchar(16)", maxLength: 16, nullable: true); migrationBuilder.AddColumn( name: "FailureReason", table: "upload_tasks", type: "varchar(500)", maxLength: 500, nullable: true); migrationBuilder.AddColumn( name: "ResultFileId", table: "upload_tasks", type: "char(36)", nullable: true); migrationBuilder.AddColumn( name: "TargetId", table: "upload_tasks", type: "char(36)", nullable: true); migrationBuilder.CreateIndex( name: "IX_upload_files_SourceTaskId", table: "upload_files", column: "SourceTaskId", unique: true); migrationBuilder.CreateIndex( name: "IX_upload_files_checksum", table: "upload_files", columns: new[] { "checksum_algorithm", "checksum_value", "IsDeleted" }); } protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropIndex("IX_upload_files_checksum", "upload_files"); migrationBuilder.DropIndex("IX_upload_files_SourceTaskId", "upload_files"); migrationBuilder.DropColumn("ChatType", "upload_files"); migrationBuilder.DropColumn("IsPublic", "upload_files"); migrationBuilder.DropColumn("SourceTaskId", "upload_files"); migrationBuilder.DropColumn("TargetId", "upload_files"); migrationBuilder.DropColumn("ChatType", "upload_tasks"); migrationBuilder.DropColumn("FailureReason", "upload_tasks"); migrationBuilder.DropColumn("ResultFileId", "upload_tasks"); migrationBuilder.DropColumn("TargetId", "upload_tasks"); AlterStringColumns(migrationBuilder, narrowing: false); } private static void AlterStringColumns(MigrationBuilder migrationBuilder, bool narrowing) { var columns = new (string Table, string Column, int Length, bool Nullable)[] { ("upload_files", "FileName", 255, false), ("upload_files", "ContentType", 255, false), ("upload_files", "checksum_algorithm", 16, false), ("upload_files", "checksum_value", 128, false), ("upload_files", "storage_provider", 64, false), ("upload_files", "storage_bucket", 255, false), ("upload_files", "storage_key", 1024, false), ("upload_files", "storage_region", 128, true), ("upload_tasks", "FileName", 255, false), ("upload_tasks", "ContentType", 255, false), ("upload_tasks", "checksum_algorithm", 16, false), ("upload_tasks", "checksum_value", 128, false), ("upload_tasks", "storage_provider", 64, false), ("upload_tasks", "storage_bucket", 255, false), ("upload_tasks", "storage_key", 1024, false), ("upload_tasks", "storage_region", 128, true) }; foreach (var (table, column, length, nullable) in columns) { migrationBuilder.AlterColumn( name: column, table: table, type: narrowing ? $"varchar({length})" : "longtext", maxLength: narrowing ? length : null, nullable: nullable, oldClrType: typeof(string), oldType: narrowing ? "longtext" : $"varchar({length})", oldMaxLength: narrowing ? null : length, oldNullable: nullable); } } } }