feat(applications): preserve submitted packages
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
using JobTrackerApi.Data;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace JobTrackerApi.Migrations;
|
||||
|
||||
[DbContext(typeof(JobTrackerContext))]
|
||||
[Migration("20260830135000_AdoptSubmittedApplicationPackageSchema")]
|
||||
public sealed class AdoptSubmittedApplicationPackageSchema : Migration
|
||||
{
|
||||
protected override void Up(MigrationBuilder migrationBuilder) =>
|
||||
migrationBuilder.Sql(ActiveProvider.Contains("MySql", StringComparison.OrdinalIgnoreCase) ? MySqlDdl : SqliteDdl);
|
||||
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.Sql(ActiveProvider.Contains("MySql", StringComparison.OrdinalIgnoreCase)
|
||||
? "DROP TABLE IF EXISTS `SubmittedPackageAttachments`; DROP TABLE IF EXISTS `SubmittedApplicationPackages`;"
|
||||
: "DROP TABLE IF EXISTS \"SubmittedPackageAttachments\"; DROP TABLE IF EXISTS \"SubmittedApplicationPackages\";");
|
||||
}
|
||||
|
||||
private const string SqliteDdl = """
|
||||
CREATE TABLE IF NOT EXISTS "SubmittedApplicationPackages" (
|
||||
"Id" INTEGER NOT NULL CONSTRAINT "PK_SubmittedApplicationPackages" PRIMARY KEY AUTOINCREMENT,
|
||||
"OwnerUserId" TEXT NOT NULL, "JobApplicationId" INTEGER NOT NULL, "Version" INTEGER NOT NULL,
|
||||
"CvVariantId" INTEGER NULL, "CvVariantName" TEXT NULL, "CvVariantVersion" INTEGER NULL,
|
||||
"CvThemeId" TEXT NULL, "CvSettingsJson" TEXT NULL, "CareerProfileJson" TEXT NULL,
|
||||
"RenderedCvHtml" TEXT NULL, "CoverLetterText" TEXT NULL,
|
||||
"ApplicationMaterialJson" TEXT NOT NULL, "CreatedAtUtc" TEXT NOT NULL,
|
||||
CONSTRAINT "FK_SubmittedApplicationPackages_JobApplications_JobApplicationId"
|
||||
FOREIGN KEY ("JobApplicationId") REFERENCES "JobApplications" ("Id") ON DELETE CASCADE);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "IX_SubmittedApplicationPackages_Owner_Job_Version"
|
||||
ON "SubmittedApplicationPackages" ("OwnerUserId", "JobApplicationId", "Version");
|
||||
CREATE INDEX IF NOT EXISTS "IX_SubmittedApplicationPackages_JobApplicationId"
|
||||
ON "SubmittedApplicationPackages" ("JobApplicationId");
|
||||
CREATE TABLE IF NOT EXISTS "SubmittedPackageAttachments" (
|
||||
"Id" INTEGER NOT NULL CONSTRAINT "PK_SubmittedPackageAttachments" PRIMARY KEY AUTOINCREMENT,
|
||||
"SubmittedApplicationPackageId" INTEGER NOT NULL, "FileName" TEXT NOT NULL,
|
||||
"FileType" TEXT NOT NULL, "Purpose" TEXT NULL, "FileSize" INTEGER NOT NULL,
|
||||
"Sha256" TEXT NOT NULL, "FilePath" TEXT NOT NULL,
|
||||
CONSTRAINT "FK_SubmittedPackageAttachments_Packages_PackageId"
|
||||
FOREIGN KEY ("SubmittedApplicationPackageId") REFERENCES "SubmittedApplicationPackages" ("Id") ON DELETE CASCADE);
|
||||
CREATE INDEX IF NOT EXISTS "IX_SubmittedPackageAttachments_SubmittedApplicationPackageId"
|
||||
ON "SubmittedPackageAttachments" ("SubmittedApplicationPackageId");
|
||||
""";
|
||||
|
||||
private const string MySqlDdl = """
|
||||
CREATE TABLE IF NOT EXISTS `SubmittedApplicationPackages` (
|
||||
`Id` int NOT NULL AUTO_INCREMENT, `OwnerUserId` varchar(255) NOT NULL,
|
||||
`JobApplicationId` int NOT NULL, `Version` int NOT NULL, `CvVariantId` int NULL,
|
||||
`CvVariantName` varchar(255) NULL, `CvVariantVersion` int NULL, `CvThemeId` varchar(64) NULL,
|
||||
`CvSettingsJson` longtext NULL, `CareerProfileJson` longtext NULL, `RenderedCvHtml` longtext NULL,
|
||||
`CoverLetterText` longtext NULL, `ApplicationMaterialJson` longtext NOT NULL,
|
||||
`CreatedAtUtc` datetime(6) NOT NULL, PRIMARY KEY (`Id`),
|
||||
CONSTRAINT `FK_SubmittedApplicationPackages_JobApplications_JobApplicationId`
|
||||
FOREIGN KEY (`JobApplicationId`) REFERENCES `JobApplications` (`Id`) ON DELETE CASCADE)
|
||||
CHARACTER SET=utf8mb4;
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS `IX_SubmittedApplicationPackages_Owner_Job_Version`
|
||||
ON `SubmittedApplicationPackages` (`OwnerUserId`, `JobApplicationId`, `Version`);
|
||||
CREATE INDEX IF NOT EXISTS `IX_SubmittedApplicationPackages_JobApplicationId`
|
||||
ON `SubmittedApplicationPackages` (`JobApplicationId`);
|
||||
CREATE TABLE IF NOT EXISTS `SubmittedPackageAttachments` (
|
||||
`Id` int NOT NULL AUTO_INCREMENT, `SubmittedApplicationPackageId` int NOT NULL,
|
||||
`FileName` varchar(500) NOT NULL, `FileType` varchar(255) NOT NULL, `Purpose` varchar(64) NULL,
|
||||
`FileSize` bigint NOT NULL, `Sha256` varchar(64) NOT NULL, `FilePath` longtext NOT NULL,
|
||||
PRIMARY KEY (`Id`),
|
||||
CONSTRAINT `FK_SubmittedPackageAttachments_Packages_PackageId`
|
||||
FOREIGN KEY (`SubmittedApplicationPackageId`) REFERENCES `SubmittedApplicationPackages` (`Id`) ON DELETE CASCADE)
|
||||
CHARACTER SET=utf8mb4;
|
||||
CREATE INDEX IF NOT EXISTS `IX_SubmittedPackageAttachments_SubmittedApplicationPackageId`
|
||||
ON `SubmittedPackageAttachments` (`SubmittedApplicationPackageId`);
|
||||
""";
|
||||
}
|
||||
@@ -1086,6 +1086,43 @@ namespace JobTrackerApi.Migrations
|
||||
b.ToTable("CoverLetterVersions");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("JobTrackerApi.Models.SubmittedApplicationPackage", b =>
|
||||
{
|
||||
b.Property<int>("Id").ValueGeneratedOnAdd().HasColumnType("INTEGER");
|
||||
b.Property<string>("ApplicationMaterialJson").IsRequired().HasColumnType("TEXT");
|
||||
b.Property<string>("CareerProfileJson").HasColumnType("TEXT");
|
||||
b.Property<string>("CoverLetterText").HasColumnType("TEXT");
|
||||
b.Property<DateTimeOffset>("CreatedAtUtc").HasColumnType("TEXT");
|
||||
b.Property<string>("CvSettingsJson").HasColumnType("TEXT");
|
||||
b.Property<string>("CvThemeId").HasMaxLength(64).HasColumnType("TEXT");
|
||||
b.Property<int?>("CvVariantId").HasColumnType("INTEGER");
|
||||
b.Property<string>("CvVariantName").HasMaxLength(255).HasColumnType("TEXT");
|
||||
b.Property<int?>("CvVariantVersion").HasColumnType("INTEGER");
|
||||
b.Property<int>("JobApplicationId").HasColumnType("INTEGER");
|
||||
b.Property<string>("OwnerUserId").IsRequired().HasMaxLength(255).HasColumnType("TEXT");
|
||||
b.Property<string>("RenderedCvHtml").HasColumnType("TEXT");
|
||||
b.Property<int>("Version").HasColumnType("INTEGER");
|
||||
b.HasKey("Id");
|
||||
b.HasIndex("JobApplicationId");
|
||||
b.HasIndex("OwnerUserId", "JobApplicationId", "Version").IsUnique();
|
||||
b.ToTable("SubmittedApplicationPackages");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("JobTrackerApi.Models.SubmittedPackageAttachment", b =>
|
||||
{
|
||||
b.Property<int>("Id").ValueGeneratedOnAdd().HasColumnType("INTEGER");
|
||||
b.Property<string>("FileName").IsRequired().HasMaxLength(500).HasColumnType("TEXT");
|
||||
b.Property<string>("FilePath").IsRequired().HasColumnType("TEXT");
|
||||
b.Property<long>("FileSize").HasColumnType("INTEGER");
|
||||
b.Property<string>("FileType").IsRequired().HasMaxLength(255).HasColumnType("TEXT");
|
||||
b.Property<string>("Purpose").HasMaxLength(64).HasColumnType("TEXT");
|
||||
b.Property<string>("Sha256").IsRequired().HasMaxLength(64).HasColumnType("TEXT");
|
||||
b.Property<int>("SubmittedApplicationPackageId").HasColumnType("INTEGER");
|
||||
b.HasKey("Id");
|
||||
b.HasIndex("SubmittedApplicationPackageId");
|
||||
b.ToTable("SubmittedPackageAttachments");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("JobTrackerApi.Models.CvExtractionRun", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
@@ -2666,6 +2703,29 @@ namespace JobTrackerApi.Migrations
|
||||
b.Navigation("JobApplication");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("JobTrackerApi.Models.SubmittedApplicationPackage", b =>
|
||||
{
|
||||
b.HasOne("JobTrackerApi.Models.JobApplication", "JobApplication")
|
||||
.WithMany()
|
||||
.HasForeignKey("JobApplicationId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("JobApplication");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("JobTrackerApi.Models.SubmittedPackageAttachment", b =>
|
||||
{
|
||||
b.HasOne("JobTrackerApi.Models.SubmittedApplicationPackage", "Package")
|
||||
.WithMany("Attachments")
|
||||
.HasForeignKey("SubmittedApplicationPackageId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired()
|
||||
.HasConstraintName("FK_SubmittedPackageAttachments_Packages_PackageId");
|
||||
|
||||
b.Navigation("Package");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("JobTrackerApi.Models.CvExtractionRun", b =>
|
||||
{
|
||||
b.HasOne("JobTrackerApi.Models.CvUploadArtifact", "Artifact")
|
||||
@@ -2893,6 +2953,11 @@ namespace JobTrackerApi.Migrations
|
||||
|
||||
b.Navigation("TailoredCvDraft");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("JobTrackerApi.Models.SubmittedApplicationPackage", b =>
|
||||
{
|
||||
b.Navigation("Attachments");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user