feat(applications): preserve submitted packages

This commit is contained in:
cesnimda
2026-08-31 16:54:41 +02:00
parent 47e8e3e50e
commit 5337ba3a5e
22 changed files with 903 additions and 11 deletions
+29
View File
@@ -59,6 +59,8 @@ namespace JobTrackerApi.Data
public DbSet<AiUsageRecord> AiUsageRecords => Set<AiUsageRecord>();
public DbSet<ApplicationChecklistItem> ApplicationChecklistItems => Set<ApplicationChecklistItem>();
public DbSet<CoverLetterVersion> CoverLetterVersions => Set<CoverLetterVersion>();
public DbSet<SubmittedApplicationPackage> SubmittedApplicationPackages => Set<SubmittedApplicationPackage>();
public DbSet<SubmittedPackageAttachment> SubmittedPackageAttachments => Set<SubmittedPackageAttachment>();
public DbSet<InterviewPrepItem> InterviewPrepItems => Set<InterviewPrepItem>();
public DbSet<UserOperation> UserOperations => Set<UserOperation>();
public DbSet<UserNotification> UserNotifications => Set<UserNotification>();
@@ -550,6 +552,33 @@ namespace JobTrackerApi.Data
.HasForeignKey(x => x.JobApplicationId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<SubmittedApplicationPackage>()
.HasQueryFilter(x => CurrentUserId != null && x.OwnerUserId == CurrentUserId);
modelBuilder.Entity<SubmittedApplicationPackage>().Property(x => x.OwnerUserId).HasMaxLength(255);
modelBuilder.Entity<SubmittedApplicationPackage>().Property(x => x.CvVariantName).HasMaxLength(255);
modelBuilder.Entity<SubmittedApplicationPackage>().Property(x => x.CvThemeId).HasMaxLength(64);
modelBuilder.Entity<SubmittedApplicationPackage>()
.HasIndex(x => new { x.OwnerUserId, x.JobApplicationId, x.Version })
.IsUnique();
modelBuilder.Entity<SubmittedApplicationPackage>()
.HasOne(x => x.JobApplication)
.WithMany()
.HasForeignKey(x => x.JobApplicationId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<SubmittedPackageAttachment>()
.HasQueryFilter(x => CurrentUserId != null && x.Package != null && x.Package.OwnerUserId == CurrentUserId);
modelBuilder.Entity<SubmittedPackageAttachment>().Property(x => x.FileName).HasMaxLength(500);
modelBuilder.Entity<SubmittedPackageAttachment>().Property(x => x.FileType).HasMaxLength(255);
modelBuilder.Entity<SubmittedPackageAttachment>().Property(x => x.Purpose).HasMaxLength(64);
modelBuilder.Entity<SubmittedPackageAttachment>().Property(x => x.Sha256).HasMaxLength(64);
modelBuilder.Entity<SubmittedPackageAttachment>()
.HasOne(x => x.Package)
.WithMany(x => x.Attachments)
.HasForeignKey(x => x.SubmittedApplicationPackageId)
.HasConstraintName("FK_SubmittedPackageAttachments_Packages_PackageId")
.OnDelete(DeleteBehavior.Cascade);
// Phase 5.5: user-owned interview preparation. Unlike InterviewPrepNote (an AI cache), nothing
// regenerates this. docs/architecture/application-workspace.md.
modelBuilder.Entity<InterviewPrepItem>()