using System; using Microsoft.EntityFrameworkCore.Migrations; using Rag.Data; #nullable disable namespace Rag.Data.Migrations { /// public partial class InitialRagSchema : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.EnsureSchema( name: MigrationConstants.SchemaName); migrationBuilder.CreateTable( name: "ChatCompletionCache", schema: MigrationConstants.SchemaName, columns: table => new { CacheKey = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), Model = table.Column(type: "nvarchar(120)", maxLength: 120, nullable: false), Temperature = table.Column(type: "decimal(4,2)", nullable: false), ResponseText = table.Column(type: "nvarchar(max)", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false, defaultValueSql: "SYSUTCDATETIME()") }, constraints: table => { table.PrimaryKey("PK_ChatCompletionCache", x => x.CacheKey); }); migrationBuilder.CreateTable( name: "Documents", schema: MigrationConstants.SchemaName, columns: table => new { Id = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), DocumentType = table.Column(type: "nvarchar(80)", maxLength: 80, nullable: false), Title = table.Column(type: "nvarchar(300)", maxLength: 300, nullable: false), SourceUrl = table.Column(type: "nvarchar(1200)", maxLength: 1200, nullable: true), RawText = table.Column(type: "nvarchar(max)", nullable: false), TextHash = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), TypeConfidence = table.Column(type: "float", nullable: false), MetadataJson = table.Column(type: "nvarchar(max)", nullable: false, defaultValue: "{}"), CreatedAt = table.Column(type: "datetime2", nullable: false, defaultValueSql: "SYSUTCDATETIME()") }, constraints: table => { table.PrimaryKey("PK_Documents", x => x.Id); }); migrationBuilder.CreateTable( name: "EmbeddingCache", schema: MigrationConstants.SchemaName, columns: table => new { CacheKey = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), Model = table.Column(type: "nvarchar(120)", maxLength: 120, nullable: false), TextHash = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), Vector = table.Column(type: "varbinary(max)", nullable: false), CreatedAt = table.Column(type: "datetime2", nullable: false, defaultValueSql: "SYSUTCDATETIME()") }, constraints: table => { table.PrimaryKey("PK_EmbeddingCache", x => x.CacheKey); }); migrationBuilder.CreateTable( name: "Chunks", schema: MigrationConstants.SchemaName, columns: table => new { Id = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), DocumentId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), ChunkIndex = table.Column(type: "int", nullable: false), Text = table.Column(type: "nvarchar(max)", nullable: false), Embedding = table.Column(type: "varbinary(max)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_Chunks", x => x.Id); table.ForeignKey( name: "FK_Chunks_Documents_DocumentId", column: x => x.DocumentId, principalSchema: MigrationConstants.SchemaName, principalTable: "Documents", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateIndex( name: "IX_Chunks_DocumentId", schema: MigrationConstants.SchemaName, table: "Chunks", column: "DocumentId"); migrationBuilder.CreateIndex( name: "IX_Documents_DocumentType", schema: MigrationConstants.SchemaName, table: "Documents", column: "DocumentType"); migrationBuilder.CreateIndex( name: "IX_Documents_TextHash", schema: MigrationConstants.SchemaName, table: "Documents", column: "TextHash"); migrationBuilder.CreateIndex( name: "IX_EmbeddingCache_TextHash", schema: MigrationConstants.SchemaName, table: "EmbeddingCache", column: "TextHash"); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "ChatCompletionCache", schema: MigrationConstants.SchemaName); migrationBuilder.DropTable( name: "Chunks", schema: MigrationConstants.SchemaName); migrationBuilder.DropTable( name: "EmbeddingCache", schema: MigrationConstants.SchemaName); migrationBuilder.DropTable( name: "Documents", schema: MigrationConstants.SchemaName); } } }