feat(discovery): add saved job searches

This commit is contained in:
cesnimda
2026-08-31 17:17:48 +02:00
parent 78ad0c66f9
commit c2181afaea
13 changed files with 461 additions and 80 deletions
+12
View File
@@ -52,6 +52,8 @@ namespace JobTrackerApi.Data
public DbSet<CareerCertification> CareerCertifications => Set<CareerCertification>();
public DbSet<CareerLanguage> CareerLanguages => Set<CareerLanguage>();
public DbSet<CareerEvidence> CareerEvidence => Set<CareerEvidence>();
public DbSet<SavedJobSearch> SavedJobSearches => Set<SavedJobSearch>();
public DbSet<SavedJobSearchResult> SavedJobSearchResults => Set<SavedJobSearchResult>();
public DbSet<InterviewPrepNote> InterviewPrepNotes => Set<InterviewPrepNote>();
public DbSet<AiWorkspaceNote> AiWorkspaceNotes => Set<AiWorkspaceNote>();
public DbSet<CvVariant> CvVariants => Set<CvVariant>();
@@ -426,6 +428,16 @@ namespace JobTrackerApi.Data
modelBuilder.Entity<CareerEvidence>().Property(x => x.SourceType).HasMaxLength(32);
modelBuilder.Entity<CareerEvidence>().Property(x => x.SourceReference).HasMaxLength(500);
modelBuilder.Entity<CareerEvidence>().HasIndex(x => new { x.OwnerUserId, x.UpdatedAtUtc });
modelBuilder.Entity<SavedJobSearch>().HasQueryFilter(x => CurrentUserId != null && x.OwnerUserId == CurrentUserId);
modelBuilder.Entity<SavedJobSearch>().Property(x => x.OwnerUserId).HasMaxLength(255);
modelBuilder.Entity<SavedJobSearch>().Property(x => x.Name).HasMaxLength(255);
modelBuilder.Entity<SavedJobSearch>().Property(x => x.Query).HasMaxLength(500);
modelBuilder.Entity<SavedJobSearch>().Property(x => x.Location).HasMaxLength(255);
modelBuilder.Entity<SavedJobSearch>().HasIndex(x => new { x.OwnerUserId, x.UpdatedAtUtc });
modelBuilder.Entity<SavedJobSearchResult>().HasQueryFilter(x => CurrentUserId != null && x.SavedJobSearch != null && x.SavedJobSearch.OwnerUserId == CurrentUserId);
modelBuilder.Entity<SavedJobSearchResult>().Property(x => x.ExternalJobId).HasMaxLength(128);
modelBuilder.Entity<SavedJobSearchResult>().HasIndex(x => new { x.SavedJobSearchId, x.ExternalJobId }).IsUnique();
modelBuilder.Entity<SavedJobSearchResult>().HasOne(x => x.SavedJobSearch).WithMany(x => x.Results).HasForeignKey(x => x.SavedJobSearchId).OnDelete(DeleteBehavior.Cascade);
// Interview prep persistence (career-workspace-implementation-roadmap.md Phase F5).
modelBuilder.Entity<InterviewPrepNote>()