//
using System;
using JobTrackerApi.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
namespace JobTrackerApi.Migrations
{
[DbContext(typeof(JobTrackerContext))]
partial class JobTrackerContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder.HasAnnotation("ProductVersion", "9.0.14");
modelBuilder.Entity("JobTrackerApi.Models.AiWorkspaceNote", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("AttachmentContextSignature")
.IsRequired()
.HasColumnType("TEXT");
b.Property("GeneratedAtUtc")
.HasColumnType("TEXT");
b.Property("JobApplicationId")
.HasColumnType("INTEGER");
b.Property("NoteType")
.IsRequired()
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("ResultJson")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("JobApplicationId");
b.HasIndex("OwnerUserId", "JobApplicationId", "NoteType")
.IsUnique();
b.ToTable("AiWorkspaceNotes");
});
modelBuilder.Entity("JobTrackerApi.Models.ApplicationUser", b =>
{
b.Property("Id")
.HasColumnType("TEXT");
b.Property("AccessFailedCount")
.HasColumnType("INTEGER");
b.Property("AvatarImageDataUrl")
.HasColumnType("TEXT");
b.Property("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("TEXT");
b.Property("CurrentCvExtractionRunId")
.HasColumnType("INTEGER");
b.Property("CurrentCvProfileVersion")
.HasColumnType("INTEGER");
b.Property("CurrentCvUploadArtifactId")
.HasColumnType("INTEGER");
b.Property("DisplayName")
.HasColumnType("TEXT");
b.Property("Email")
.HasMaxLength(256)
.HasColumnType("TEXT");
b.Property("EmailConfirmed")
.HasColumnType("INTEGER");
b.Property("FirstName")
.HasColumnType("TEXT");
b.Property("GoogleEmail")
.HasColumnType("TEXT");
b.Property("GoogleLinkedAt")
.HasColumnType("TEXT");
b.Property("GoogleSubject")
.HasColumnType("TEXT");
b.Property("LastName")
.HasColumnType("TEXT");
b.Property("LockoutEnabled")
.HasColumnType("INTEGER");
b.Property("LockoutEnd")
.HasColumnType("TEXT");
b.Property("MicrosoftEmail")
.HasColumnType("TEXT");
b.Property("MicrosoftLinkedAt")
.HasColumnType("TEXT");
b.Property("MicrosoftSubject")
.HasColumnType("TEXT");
b.Property("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("TEXT");
b.Property("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("TEXT");
b.Property("PasswordHash")
.HasColumnType("TEXT");
b.Property("PhoneNumber")
.HasColumnType("TEXT");
b.Property("PhoneNumberConfirmed")
.HasColumnType("INTEGER");
b.Property("ProfileCvStructureJson")
.HasColumnType("TEXT");
b.Property("ProfileCvText")
.HasColumnType("TEXT");
b.Property("SecurityStamp")
.HasColumnType("TEXT");
b.Property("TotpEnabledAtUtc")
.HasColumnType("TEXT");
b.Property("TotpPendingSecretEncrypted")
.HasColumnType("TEXT");
b.Property("TotpSecretEncrypted")
.HasColumnType("TEXT");
b.Property("TwoFactorEnabled")
.HasColumnType("INTEGER");
b.Property("UserName")
.HasMaxLength(256)
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null);
});
modelBuilder.Entity("JobTrackerApi.Models.Attachment", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("FileName")
.IsRequired()
.HasColumnType("TEXT");
b.Property("FilePath")
.IsRequired()
.HasColumnType("TEXT");
b.Property("FileSize")
.HasColumnType("INTEGER");
b.Property("FileType")
.IsRequired()
.HasColumnType("TEXT");
b.Property("JobApplicationId")
.HasColumnType("INTEGER");
b.Property("Purpose")
.HasColumnType("TEXT");
b.Property("UploadDate")
.HasColumnType("TEXT");
b.Property("UseForAi")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("JobApplicationId");
b.ToTable("Attachments");
});
modelBuilder.Entity("JobTrackerApi.Models.CareerCertification", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("CareerProfileId")
.HasColumnType("INTEGER");
b.Property("Date")
.HasColumnType("TEXT");
b.Property("DateNormalized")
.HasColumnType("TEXT");
b.Property("DetailsJson")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Issuer")
.HasColumnType("TEXT");
b.Property("ItemKey")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Location")
.HasColumnType("TEXT");
b.Property("Name")
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("SortOrder")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("CareerProfileId");
b.HasIndex("OwnerUserId", "CareerProfileId", "SortOrder");
b.ToTable("CareerCertifications");
});
modelBuilder.Entity("JobTrackerApi.Models.CareerEducation", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("CareerProfileId")
.HasColumnType("INTEGER");
b.Property("DetailsJson")
.IsRequired()
.HasColumnType("TEXT");
b.Property("End")
.HasColumnType("TEXT");
b.Property("EndDate")
.HasColumnType("TEXT");
b.Property("Institution")
.HasColumnType("TEXT");
b.Property("ItemKey")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Location")
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Qualification")
.HasColumnType("TEXT");
b.Property("QualificationLevel")
.HasColumnType("TEXT");
b.Property("SortOrder")
.HasColumnType("INTEGER");
b.Property("Start")
.HasColumnType("TEXT");
b.Property("StartDate")
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("CareerProfileId");
b.HasIndex("OwnerUserId", "CareerProfileId", "SortOrder");
b.ToTable("CareerEducations");
});
modelBuilder.Entity("JobTrackerApi.Models.CareerExperience", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("BulletsJson")
.IsRequired()
.HasColumnType("TEXT");
b.Property("CareerProfileId")
.HasColumnType("INTEGER");
b.Property("Company")
.HasColumnType("TEXT");
b.Property("End")
.HasColumnType("TEXT");
b.Property("EndDate")
.HasColumnType("TEXT");
b.Property("IsCurrent")
.HasColumnType("INTEGER");
b.Property("ItemKey")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Location")
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("SkillsJson")
.IsRequired()
.HasColumnType("TEXT");
b.Property("SortOrder")
.HasColumnType("INTEGER");
b.Property("Start")
.HasColumnType("TEXT");
b.Property("StartDate")
.HasColumnType("TEXT");
b.Property("Title")
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("CareerProfileId");
b.HasIndex("OwnerUserId", "CareerProfileId", "SortOrder");
b.ToTable("CareerExperiences");
});
modelBuilder.Entity("JobTrackerApi.Models.CareerLanguage", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("CareerProfileId")
.HasColumnType("INTEGER");
b.Property("ItemKey")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Level")
.HasColumnType("TEXT");
b.Property("Name")
.HasColumnType("TEXT");
b.Property("Notes")
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("SortOrder")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("CareerProfileId");
b.HasIndex("OwnerUserId", "CareerProfileId", "SortOrder");
b.ToTable("CareerLanguages");
});
modelBuilder.Entity("JobTrackerApi.Models.CareerProfile", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("CreatedAtUtc")
.HasColumnType("TEXT");
b.Property("LongTailJson")
.IsRequired()
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("ProfileJson")
.IsRequired()
.HasColumnType("TEXT");
b.Property("UpdatedAtUtc")
.HasColumnType("TEXT");
b.Property("Version")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("OwnerUserId")
.IsUnique();
b.ToTable("CareerProfiles");
});
modelBuilder.Entity("JobTrackerApi.Models.CareerProfileVersion", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("CareerProfileId")
.HasColumnType("INTEGER");
b.Property("CreatedAtUtc")
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("ProfileJson")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Source")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Version")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("CareerProfileId");
b.HasIndex("OwnerUserId", "CareerProfileId", "Version");
b.ToTable("CareerProfileVersions");
});
modelBuilder.Entity("JobTrackerApi.Models.CareerProject", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("BulletsJson")
.IsRequired()
.HasColumnType("TEXT");
b.Property("CareerProfileId")
.HasColumnType("INTEGER");
b.Property("End")
.HasColumnType("TEXT");
b.Property("EndDate")
.HasColumnType("TEXT");
b.Property("ItemKey")
.IsRequired()
.HasColumnType("TEXT");
b.Property("LinksJson")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Location")
.HasColumnType("TEXT");
b.Property("Name")
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Role")
.HasColumnType("TEXT");
b.Property("SkillsJson")
.IsRequired()
.HasColumnType("TEXT");
b.Property("SortOrder")
.HasColumnType("INTEGER");
b.Property("Start")
.HasColumnType("TEXT");
b.Property("StartDate")
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("CareerProfileId");
b.HasIndex("OwnerUserId", "CareerProfileId", "SortOrder");
b.ToTable("CareerProjects");
});
modelBuilder.Entity("JobTrackerApi.Models.CareerSkill", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("CareerProfileId")
.HasColumnType("INTEGER");
b.Property("Category")
.HasColumnType("TEXT");
b.Property("ItemKey")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Name")
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Proficiency")
.HasColumnType("TEXT");
b.Property("SortOrder")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("CareerProfileId");
b.HasIndex("OwnerUserId", "CareerProfileId", "SortOrder");
b.ToTable("CareerSkills");
});
modelBuilder.Entity("JobTrackerApi.Models.Company", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("LastContactedAt")
.HasColumnType("TEXT");
b.Property("Location")
.HasColumnType("TEXT");
b.Property("Name")
.IsRequired()
.HasColumnType("TEXT");
b.Property("NextContactAt")
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.HasColumnType("TEXT");
b.Property("PipelineStage")
.HasColumnType("TEXT");
b.Property("RecruiterEmail")
.HasColumnType("TEXT");
b.Property("RecruiterLinkedIn")
.HasColumnType("TEXT");
b.Property("RecruiterName")
.HasColumnType("TEXT");
b.Property("Source")
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("OwnerUserId");
b.ToTable("Companies");
});
modelBuilder.Entity("JobTrackerApi.Models.Correspondence", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("AttachmentMetadataJson")
.HasColumnType("TEXT");
b.Property("Channel")
.HasColumnType("TEXT");
b.Property("Content")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Date")
.HasColumnType("TEXT");
b.Property("Direction")
.HasColumnType("TEXT");
b.Property("ExternalFrom")
.HasColumnType("TEXT");
b.Property("ExternalLabelsJson")
.HasColumnType("TEXT");
b.Property("ExternalMessageId")
.HasColumnType("TEXT");
b.Property("ExternalThreadId")
.HasColumnType("TEXT");
b.Property("ExternalTo")
.HasColumnType("TEXT");
b.Property("From")
.IsRequired()
.HasColumnType("TEXT");
b.Property("JobApplicationId")
.HasColumnType("INTEGER");
b.Property("Provider")
.HasColumnType("TEXT");
b.Property("Subject")
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("JobApplicationId");
b.ToTable("Correspondences");
});
modelBuilder.Entity("JobTrackerApi.Models.CvExtractionRun", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("AppliedAtUtc")
.HasColumnType("TEXT");
b.Property("ArtifactId")
.HasColumnType("INTEGER");
b.Property("CompletedAtUtc")
.HasColumnType("TEXT");
b.Property("ErrorMessage")
.HasColumnType("TEXT");
b.Property("LlmPromptVersion")
.IsRequired()
.HasColumnType("TEXT");
b.Property("NormalizedText")
.HasColumnType("TEXT");
b.Property("NormalizerVersion")
.IsRequired()
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("ParserVersion")
.IsRequired()
.HasColumnType("TEXT");
b.Property("RawExtractedText")
.HasColumnType("TEXT");
b.Property("StartedAtUtc")
.HasColumnType("TEXT");
b.Property("Status")
.IsRequired()
.HasColumnType("TEXT");
b.Property("StructuredProfileJson")
.HasColumnType("TEXT");
b.Property("Trigger")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("ArtifactId");
b.HasIndex("OwnerUserId", "StartedAtUtc");
b.ToTable("CvExtractionRuns");
});
modelBuilder.Entity("JobTrackerApi.Models.CvUploadArtifact", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("ByteSize")
.HasColumnType("INTEGER");
b.Property("MimeType")
.IsRequired()
.HasColumnType("TEXT");
b.Property("OriginalFileName")
.IsRequired()
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Sha256")
.IsRequired()
.HasColumnType("TEXT");
b.Property("StoragePath")
.IsRequired()
.HasColumnType("TEXT");
b.Property("StoredFileName")
.IsRequired()
.HasColumnType("TEXT");
b.Property("UploadedAtUtc")
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("OwnerUserId", "UploadedAtUtc");
b.ToTable("CvUploadArtifacts");
});
modelBuilder.Entity("JobTrackerApi.Models.GmailConnection", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("AccessTokenExpiresAt")
.HasColumnType("TEXT");
b.Property("ConnectedAt")
.HasColumnType("TEXT");
b.Property("EncryptedAccessToken")
.HasColumnType("TEXT");
b.Property("EncryptedRefreshToken")
.IsRequired()
.HasColumnType("TEXT");
b.Property("GmailAddress")
.IsRequired()
.HasColumnType("TEXT");
b.Property("LastSyncAttemptedAt")
.HasColumnType("TEXT");
b.Property("LastSyncError")
.HasColumnType("TEXT");
b.Property("LastSyncMode")
.HasColumnType("TEXT");
b.Property("LastSyncSource")
.HasColumnType("TEXT");
b.Property("LastSyncStatus")
.HasColumnType("TEXT");
b.Property("LastSyncSucceededAt")
.HasColumnType("TEXT");
b.Property("LastSyncedAt")
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Scope")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("OwnerUserId");
b.HasIndex("OwnerUserId", "GmailAddress")
.IsUnique();
b.ToTable("GmailConnections");
});
modelBuilder.Entity("JobTrackerApi.Models.GmailReviewDecision", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("Decision")
.IsRequired()
.HasColumnType("TEXT");
b.Property("JobApplicationId")
.HasColumnType("INTEGER");
b.Property("Note")
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("ThreadId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("UpdatedAt")
.HasColumnType("TEXT");
b.HasKey("Id");
b.ToTable("GmailReviewDecisions");
});
modelBuilder.Entity("JobTrackerApi.Models.ImapConnection", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("ConnectedAt")
.HasColumnType("TEXT");
b.Property("EncryptedPassword")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Host")
.IsRequired()
.HasColumnType("TEXT");
b.Property("LastSyncAttemptedAt")
.HasColumnType("TEXT");
b.Property("LastSyncError")
.HasColumnType("TEXT");
b.Property("LastSyncMode")
.HasColumnType("TEXT");
b.Property("LastSyncSource")
.HasColumnType("TEXT");
b.Property("LastSyncStatus")
.HasColumnType("TEXT");
b.Property("LastSyncSucceededAt")
.HasColumnType("TEXT");
b.Property("LastSyncedAt")
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Port")
.HasColumnType("INTEGER");
b.Property("UseSsl")
.HasColumnType("INTEGER");
b.Property("Username")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("Id");
b.ToTable("ImapConnections");
});
modelBuilder.Entity("JobTrackerApi.Models.InterviewPrepNote", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("AttachmentContextSignature")
.IsRequired()
.HasColumnType("TEXT");
b.Property("GeneratedAtUtc")
.HasColumnType("TEXT");
b.Property("JobApplicationId")
.HasColumnType("INTEGER");
b.Property("LikelyQuestionsJson")
.IsRequired()
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.IsRequired()
.HasColumnType("TEXT");
b.Property("Summary")
.IsRequired()
.HasColumnType("TEXT");
b.Property("TalkingPointsJson")
.IsRequired()
.HasColumnType("TEXT");
b.Property("WeakSpotsJson")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("JobApplicationId");
b.HasIndex("OwnerUserId", "JobApplicationId")
.IsUnique();
b.ToTable("InterviewPrepNotes");
});
modelBuilder.Entity("JobTrackerApi.Models.Job", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("CompanyId")
.HasColumnType("INTEGER");
b.Property("CountryCode")
.HasColumnType("TEXT");
b.Property("Deadline")
.HasColumnType("TEXT");
b.Property("Description")
.HasColumnType("TEXT");
b.Property("DescriptionLanguage")
.HasColumnType("TEXT");
b.Property("JobTitle")
.IsRequired()
.HasColumnType("TEXT");
b.Property("JobUrl")
.HasColumnType("TEXT");
b.Property("Location")
.HasColumnType("TEXT");
b.Property("OwnerUserId")
.HasColumnType("TEXT");
b.Property("Salary")
.HasColumnType("TEXT");
b.Property("SalaryCurrency")
.HasColumnType("TEXT");
b.Property("SalaryMax")
.HasColumnType("TEXT");
b.Property("SalaryMin")
.HasColumnType("TEXT");
b.Property("SalaryPeriod")
.HasColumnType("TEXT");
b.Property("SavedAt")
.HasColumnType("TEXT");
b.Property("ShortSummary")
.HasColumnType("TEXT");
b.Property("Source")
.HasColumnType("TEXT");
b.Property("Tags")
.HasColumnType("TEXT");
b.Property("TranslatedDescription")
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("CompanyId");
b.HasIndex("OwnerUserId");
b.ToTable("Jobs");
});
modelBuilder.Entity("JobTrackerApi.Models.JobApplication", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property("CompanyId")
.HasColumnType("INTEGER");
b.Property("CoverLetterText")
.HasColumnType("TEXT");
b.Property("DateApplied")
.HasColumnType("TEXT");
b.Property