// 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.CvVariant", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("CreatedAtUtc") .HasColumnType("TEXT"); b.Property("IsPublic") .HasColumnType("INTEGER"); b.Property("JobApplicationId") .HasColumnType("INTEGER"); b.Property("Name") .IsRequired() .HasColumnType("TEXT"); b.Property("OwnerUserId") .IsRequired() .HasColumnType("TEXT"); b.Property("PublicSlug") .IsRequired() .HasColumnType("TEXT"); b.Property("SettingsJson") .IsRequired() .HasColumnType("TEXT"); b.Property("UpdatedAtUtc") .HasColumnType("TEXT"); b.Property("Version") .HasColumnType("INTEGER"); b.HasKey("Id"); b.HasIndex("JobApplicationId"); b.HasIndex("PublicSlug") .IsUnique(); b.HasIndex("OwnerUserId", "UpdatedAtUtc"); b.ToTable("CvVariants"); }); modelBuilder.Entity("JobTrackerApi.Models.CvVariantVersion", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("CreatedAtUtc") .HasColumnType("TEXT"); b.Property("CvVariantId") .HasColumnType("INTEGER"); b.Property("OwnerUserId") .IsRequired() .HasColumnType("TEXT"); b.Property("SettingsJson") .IsRequired() .HasColumnType("TEXT"); b.Property("Source") .IsRequired() .HasColumnType("TEXT"); b.Property("Version") .HasColumnType("INTEGER"); b.HasKey("Id"); b.HasIndex("CvVariantId", "Version"); b.ToTable("CvVariantVersions"); }); 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("Deadline") .HasColumnType("TEXT"); b.Property("DeletedAt") .HasColumnType("TEXT"); b.Property("Description") .HasColumnType("TEXT"); b.Property("DescriptionLanguage") .HasColumnType("TEXT"); b.Property("FeedbackRequestedAt") .HasColumnType("TEXT"); b.Property("FollowUpAt") .HasColumnType("TEXT"); b.Property("HasCoverLetter") .HasColumnType("INTEGER"); b.Property("HasOtherAttachment") .HasColumnType("INTEGER"); b.Property("HasPortfolio") .HasColumnType("INTEGER"); b.Property("HasResume") .HasColumnType("INTEGER"); b.Property("IsDeleted") .HasColumnType("INTEGER"); b.Property("JobId") .HasColumnType("INTEGER"); b.Property("JobTitle") .IsRequired() .HasColumnType("TEXT"); b.Property("JobUrl") .HasColumnType("TEXT"); b.Property("LastReminderEmailSentAt") .HasColumnType("TEXT"); b.Property("Location") .HasColumnType("TEXT"); b.Property("NextAction") .HasColumnType("TEXT"); b.Property("Notes") .HasColumnType("TEXT"); b.Property("OwnerUserId") .HasColumnType("TEXT"); b.Property("RecruiterMessageDraft") .HasColumnType("TEXT"); b.Property("ResponseDate") .HasColumnType("TEXT"); b.Property("ResponseReceived") .HasColumnType("INTEGER"); 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("Status") .IsRequired() .HasColumnType("TEXT"); b.Property("Tags") .HasColumnType("TEXT"); b.Property("TailoredCvText") .HasColumnType("TEXT"); b.Property("TailoredCvUpdatedAt") .HasColumnType("TEXT"); b.Property("TranslatedDescription") .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("CompanyId"); b.HasIndex("JobId"); b.HasIndex("OwnerUserId"); b.HasIndex("OwnerUserId", "FollowUpAt"); b.HasIndex("OwnerUserId", "IsDeleted"); b.HasIndex("OwnerUserId", "IsDeleted", "Status"); b.ToTable("JobApplications"); }); modelBuilder.Entity("JobTrackerApi.Models.JobEvent", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("At") .HasColumnType("TEXT"); b.Property("JobApplicationId") .HasColumnType("INTEGER"); b.Property("NewValue") .HasColumnType("TEXT"); b.Property("Note") .HasColumnType("TEXT"); b.Property("OldValue") .HasColumnType("TEXT"); b.Property("Type") .IsRequired() .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("JobApplicationId"); b.ToTable("JobEvents"); }); modelBuilder.Entity("JobTrackerApi.Models.MicrosoftGraphConnection", 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("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("MailAddress") .IsRequired() .HasColumnType("TEXT"); b.Property("OwnerUserId") .IsRequired() .HasColumnType("TEXT"); b.Property("Scope") .IsRequired() .HasColumnType("TEXT"); b.HasKey("Id"); b.ToTable("MicrosoftGraphConnections"); }); modelBuilder.Entity("JobTrackerApi.Models.RuleSettings", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("AppliedFollowUpDays") .HasColumnType("INTEGER"); b.Property("AppliedGhostDays") .HasColumnType("INTEGER"); b.Property("FeedbackFollowUpDays") .HasColumnType("INTEGER"); b.Property("FeedbackGhostDays") .HasColumnType("INTEGER"); b.Property("OfferFollowUpDays") .HasColumnType("INTEGER"); b.Property("OfferGhostDays") .HasColumnType("INTEGER"); b.HasKey("Id"); b.ToTable("RuleSettings"); b.HasData( new { Id = 1, AppliedFollowUpDays = 14, AppliedGhostDays = 30, FeedbackFollowUpDays = 7, FeedbackGhostDays = 14, OfferFollowUpDays = 7, OfferGhostDays = 14 }); }); modelBuilder.Entity("JobTrackerApi.Models.SystemEmailSettings", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("Enabled") .HasColumnType("INTEGER"); b.Property("From") .HasColumnType("TEXT"); b.Property("FromName") .HasColumnType("TEXT"); b.Property("SmtpEnableSsl") .HasColumnType("INTEGER"); b.Property("SmtpHost") .HasColumnType("TEXT"); b.Property("SmtpPassword") .HasColumnType("TEXT"); b.Property("SmtpPort") .HasColumnType("INTEGER"); b.Property("SmtpTimeoutMs") .HasColumnType("INTEGER"); b.Property("SmtpUser") .HasColumnType("TEXT"); b.HasKey("Id"); b.ToTable("SystemEmailSettings"); }); modelBuilder.Entity("JobTrackerApi.Models.TailoredCvDraft", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("CanonicalProfileVersion") .HasColumnType("INTEGER"); b.Property("CustomSectionsJson") .HasColumnType("TEXT"); b.Property("EducationJson") .HasColumnType("TEXT"); b.Property("ExperienceJson") .HasColumnType("TEXT"); b.Property("GenerationContextHash") .HasColumnType("TEXT"); b.Property("Headline") .HasColumnType("TEXT"); b.Property("JobApplicationId") .HasColumnType("INTEGER"); b.Property("LastEditedAtUtc") .HasColumnType("TEXT"); b.Property("LastGeneratedAtUtc") .HasColumnType("TEXT"); b.Property("OwnerUserId") .IsRequired() .HasColumnType("TEXT"); b.Property("RenderOptionsJson") .HasColumnType("TEXT"); b.Property("SelectedSkillsJson") .HasColumnType("TEXT"); b.Property("Status") .IsRequired() .HasColumnType("TEXT"); b.Property("SummaryJson") .HasColumnType("TEXT"); b.Property("TemplateId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("JobApplicationId") .IsUnique(); b.HasIndex("OwnerUserId", "JobApplicationId") .IsUnique(); b.ToTable("TailoredCvDrafts"); }); modelBuilder.Entity("JobTrackerApi.Models.TrustedDevice", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("CreatedAtUtc") .HasColumnType("TEXT"); b.Property("DeviceLabel") .HasColumnType("TEXT"); b.Property("ExpiresAtUtc") .HasColumnType("TEXT"); b.Property("LastSeenAtUtc") .HasColumnType("TEXT"); b.Property("TokenHash") .IsRequired() .HasColumnType("TEXT"); b.Property("UserId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("TokenHash"); b.HasIndex("UserId"); b.ToTable("TrustedDevices"); }); modelBuilder.Entity("JobTrackerApi.Models.TwoFactorRecoveryCode", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("CodeHash") .IsRequired() .HasColumnType("TEXT"); b.Property("CreatedAtUtc") .HasColumnType("TEXT"); b.Property("UsedAtUtc") .HasColumnType("TEXT"); b.Property("UserId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("UserId", "UsedAtUtc"); b.ToTable("TwoFactorRecoveryCodes"); }); modelBuilder.Entity("JobTrackerApi.Models.UserRuleSettings", b => { b.Property("OwnerUserId") .HasColumnType("TEXT"); b.Property("AppliedFollowUpDays") .HasColumnType("INTEGER"); b.Property("AppliedGhostDays") .HasColumnType("INTEGER"); b.Property("FeedbackFollowUpDays") .HasColumnType("INTEGER"); b.Property("FeedbackGhostDays") .HasColumnType("INTEGER"); b.Property("OfferFollowUpDays") .HasColumnType("INTEGER"); b.Property("OfferGhostDays") .HasColumnType("INTEGER"); b.HasKey("OwnerUserId"); b.ToTable("UserRuleSettings"); }); modelBuilder.Entity("JobTrackerApi.Models.UserSession", b => { b.Property("Id") .HasColumnType("TEXT"); b.Property("CreatedAtUtc") .HasColumnType("TEXT"); b.Property("DeviceLabel") .HasColumnType("TEXT"); b.Property("ExpiresAtUtc") .HasColumnType("TEXT"); b.Property("LastSeenAtUtc") .HasColumnType("TEXT"); b.Property("RevokedAtUtc") .HasColumnType("TEXT"); b.Property("UserId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("UserId"); b.ToTable("UserSessions"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => { b.Property("Id") .HasColumnType("TEXT"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("TEXT"); b.Property("Name") .HasMaxLength(256) .HasColumnType("TEXT"); b.Property("NormalizedName") .HasMaxLength(256) .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("NormalizedName") .IsUnique() .HasDatabaseName("RoleNameIndex"); b.ToTable("AspNetRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("ClaimType") .HasColumnType("TEXT"); b.Property("ClaimValue") .HasColumnType("TEXT"); b.Property("RoleId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("RoleId"); b.ToTable("AspNetRoleClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); b.Property("ClaimType") .HasColumnType("TEXT"); b.Property("ClaimValue") .HasColumnType("TEXT"); b.Property("UserId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("Id"); b.HasIndex("UserId"); b.ToTable("AspNetUserClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.Property("LoginProvider") .HasColumnType("TEXT"); b.Property("ProviderKey") .HasColumnType("TEXT"); b.Property("ProviderDisplayName") .HasColumnType("TEXT"); b.Property("UserId") .IsRequired() .HasColumnType("TEXT"); b.HasKey("LoginProvider", "ProviderKey"); b.HasIndex("UserId"); b.ToTable("AspNetUserLogins", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.Property("UserId") .HasColumnType("TEXT"); b.Property("RoleId") .HasColumnType("TEXT"); b.HasKey("UserId", "RoleId"); b.HasIndex("RoleId"); b.ToTable("AspNetUserRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.Property("UserId") .HasColumnType("TEXT"); b.Property("LoginProvider") .HasColumnType("TEXT"); b.Property("Name") .HasColumnType("TEXT"); b.Property("Value") .HasColumnType("TEXT"); b.HasKey("UserId", "LoginProvider", "Name"); b.ToTable("AspNetUserTokens", (string)null); }); modelBuilder.Entity("JobTrackerApi.Models.AiWorkspaceNote", b => { b.HasOne("JobTrackerApi.Models.JobApplication", "JobApplication") .WithMany() .HasForeignKey("JobApplicationId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("JobApplication"); }); modelBuilder.Entity("JobTrackerApi.Models.Attachment", b => { b.HasOne("JobTrackerApi.Models.JobApplication", "JobApplication") .WithMany("Attachments") .HasForeignKey("JobApplicationId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("JobApplication"); }); modelBuilder.Entity("JobTrackerApi.Models.CareerCertification", b => { b.HasOne("JobTrackerApi.Models.CareerProfile", "CareerProfile") .WithMany("Certifications") .HasForeignKey("CareerProfileId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("CareerProfile"); }); modelBuilder.Entity("JobTrackerApi.Models.CareerEducation", b => { b.HasOne("JobTrackerApi.Models.CareerProfile", "CareerProfile") .WithMany("Education") .HasForeignKey("CareerProfileId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("CareerProfile"); }); modelBuilder.Entity("JobTrackerApi.Models.CareerExperience", b => { b.HasOne("JobTrackerApi.Models.CareerProfile", "CareerProfile") .WithMany("Experiences") .HasForeignKey("CareerProfileId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("CareerProfile"); }); modelBuilder.Entity("JobTrackerApi.Models.CareerLanguage", b => { b.HasOne("JobTrackerApi.Models.CareerProfile", "CareerProfile") .WithMany("Languages") .HasForeignKey("CareerProfileId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("CareerProfile"); }); modelBuilder.Entity("JobTrackerApi.Models.CareerProfileVersion", b => { b.HasOne("JobTrackerApi.Models.CareerProfile", "CareerProfile") .WithMany() .HasForeignKey("CareerProfileId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("CareerProfile"); }); modelBuilder.Entity("JobTrackerApi.Models.CareerProject", b => { b.HasOne("JobTrackerApi.Models.CareerProfile", "CareerProfile") .WithMany("Projects") .HasForeignKey("CareerProfileId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("CareerProfile"); }); modelBuilder.Entity("JobTrackerApi.Models.CareerSkill", b => { b.HasOne("JobTrackerApi.Models.CareerProfile", "CareerProfile") .WithMany("Skills") .HasForeignKey("CareerProfileId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("CareerProfile"); }); modelBuilder.Entity("JobTrackerApi.Models.Correspondence", b => { b.HasOne("JobTrackerApi.Models.JobApplication", "JobApplication") .WithMany("Messages") .HasForeignKey("JobApplicationId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("JobApplication"); }); modelBuilder.Entity("JobTrackerApi.Models.CvExtractionRun", b => { b.HasOne("JobTrackerApi.Models.CvUploadArtifact", "Artifact") .WithMany() .HasForeignKey("ArtifactId") .OnDelete(DeleteBehavior.SetNull); b.Navigation("Artifact"); }); modelBuilder.Entity("JobTrackerApi.Models.CvVariant", b => { b.HasOne("JobTrackerApi.Models.JobApplication", "JobApplication") .WithMany() .HasForeignKey("JobApplicationId") .OnDelete(DeleteBehavior.SetNull); b.Navigation("JobApplication"); }); modelBuilder.Entity("JobTrackerApi.Models.CvVariantVersion", b => { b.HasOne("JobTrackerApi.Models.CvVariant", "CvVariant") .WithMany() .HasForeignKey("CvVariantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("CvVariant"); }); modelBuilder.Entity("JobTrackerApi.Models.InterviewPrepNote", b => { b.HasOne("JobTrackerApi.Models.JobApplication", "JobApplication") .WithMany() .HasForeignKey("JobApplicationId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("JobApplication"); }); modelBuilder.Entity("JobTrackerApi.Models.Job", b => { b.HasOne("JobTrackerApi.Models.Company", "Company") .WithMany() .HasForeignKey("CompanyId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("Company"); }); modelBuilder.Entity("JobTrackerApi.Models.JobApplication", b => { b.HasOne("JobTrackerApi.Models.Company", "Company") .WithMany("Jobs") .HasForeignKey("CompanyId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("JobTrackerApi.Models.Job", "Job") .WithMany("Applications") .HasForeignKey("JobId") .OnDelete(DeleteBehavior.SetNull); b.Navigation("Company"); b.Navigation("Job"); }); modelBuilder.Entity("JobTrackerApi.Models.JobEvent", b => { b.HasOne("JobTrackerApi.Models.JobApplication", "JobApplication") .WithMany("Events") .HasForeignKey("JobApplicationId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("JobApplication"); }); modelBuilder.Entity("JobTrackerApi.Models.TailoredCvDraft", b => { b.HasOne("JobTrackerApi.Models.JobApplication", "JobApplication") .WithOne("TailoredCvDraft") .HasForeignKey("JobTrackerApi.Models.TailoredCvDraft", "JobApplicationId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("JobApplication"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => { b.HasOne("JobTrackerApi.Models.ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.HasOne("JobTrackerApi.Models.ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("JobTrackerApi.Models.ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => { b.HasOne("JobTrackerApi.Models.ApplicationUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("JobTrackerApi.Models.CareerProfile", b => { b.Navigation("Certifications"); b.Navigation("Education"); b.Navigation("Experiences"); b.Navigation("Languages"); b.Navigation("Projects"); b.Navigation("Skills"); }); modelBuilder.Entity("JobTrackerApi.Models.Company", b => { b.Navigation("Jobs"); }); modelBuilder.Entity("JobTrackerApi.Models.Job", b => { b.Navigation("Applications"); }); modelBuilder.Entity("JobTrackerApi.Models.JobApplication", b => { b.Navigation("Attachments"); b.Navigation("Events"); b.Navigation("Messages"); b.Navigation("TailoredCvDraft"); }); #pragma warning restore 612, 618 } } }