diff --git a/JobFlow.Infrastructure.Persistence/Migrations/20260423151531_SeedChangelogEntries.Designer.cs b/JobFlow.Infrastructure.Persistence/Migrations/20260423151531_SeedChangelogEntries.Designer.cs
new file mode 100644
index 0000000..6852ab5
--- /dev/null
+++ b/JobFlow.Infrastructure.Persistence/Migrations/20260423151531_SeedChangelogEntries.Designer.cs
@@ -0,0 +1,6211 @@
+//
+using System;
+using JobFlow.Infrastructure.Persistence;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace JobFlow.Infrastructure.Persistence.Migrations
+{
+ [DbContext(typeof(JobFlowDbContext))]
+ [Migration("20260423151531_SeedChangelogEntries")]
+ partial class SeedChangelogEntries
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "10.0.7")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("JobFlow.Domain.Models.Assignment", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ActualEnd")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("ActualStart")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("Address1")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("City")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("JobId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Notes")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ScheduleType")
+ .HasColumnType("int");
+
+ b.Property("ScheduledEnd")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("ScheduledStart")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("State")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Status")
+ .HasColumnType("int");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ZipCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("JobId");
+
+ b.HasIndex("ScheduledStart");
+
+ b.ToTable("Assignment", (string)null);
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.AssignmentAssignee", b =>
+ {
+ b.Property("AssignmentId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("EmployeeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("IsLead")
+ .HasColumnType("bit");
+
+ b.HasKey("AssignmentId", "EmployeeId");
+
+ b.HasIndex("EmployeeId")
+ .HasDatabaseName("IX_AssignmentAssignee_EmployeeId");
+
+ b.ToTable("AssignmentAssignee", (string)null);
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.AssignmentHistory", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AssignmentId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ChangedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("ChangedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("EventType")
+ .HasColumnType("int");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("NewScheduledEnd")
+ .HasColumnType("datetime2");
+
+ b.Property("NewScheduledStart")
+ .HasColumnType("datetime2");
+
+ b.Property("Notes")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("OldScheduledEnd")
+ .HasColumnType("datetime2");
+
+ b.Property("OldScheduledStart")
+ .HasColumnType("datetime2");
+
+ b.Property("Reason")
+ .HasColumnType("int");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AssignmentId")
+ .HasDatabaseName("IX_AssignmentHistory_AssignmentId");
+
+ b.ToTable("AssignmentHistory", (string)null);
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.AssignmentOrder", b =>
+ {
+ b.Property("AssignmentId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("OrderId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.HasKey("AssignmentId", "OrderId");
+
+ b.HasIndex("AssignmentId");
+
+ b.HasIndex("OrderId");
+
+ b.ToTable("AssignmentOrder", (string)null);
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.AuditLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Action")
+ .IsRequired()
+ .HasMaxLength(20)
+ .HasColumnType("nvarchar(20)");
+
+ b.Property("Category")
+ .IsRequired()
+ .HasMaxLength(80)
+ .HasColumnType("nvarchar(80)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("DetailsJson")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("IpAddress")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("Method")
+ .HasMaxLength(10)
+ .HasColumnType("nvarchar(10)");
+
+ b.Property("OrganizationId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Path")
+ .HasMaxLength(512)
+ .HasColumnType("nvarchar(512)");
+
+ b.Property("ResourceId")
+ .HasMaxLength(80)
+ .HasColumnType("nvarchar(80)");
+
+ b.Property("ResourceType")
+ .IsRequired()
+ .HasMaxLength(120)
+ .HasColumnType("nvarchar(120)");
+
+ b.Property("StatusCode")
+ .HasColumnType("int");
+
+ b.Property("Success")
+ .HasColumnType("bit");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UserAgent")
+ .HasMaxLength(512)
+ .HasColumnType("nvarchar(512)");
+
+ b.Property("UserId")
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreatedAt");
+
+ b.HasIndex("OrganizationId", "CreatedAt");
+
+ b.HasIndex("UserId", "CreatedAt");
+
+ b.ToTable("AuditLog", "security");
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.ChangelogEntry", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Category")
+ .HasColumnType("int");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasMaxLength(2000)
+ .HasColumnType("nvarchar(2000)");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("IsPublished")
+ .HasColumnType("bit");
+
+ b.Property("PublishedAt")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasMaxLength(200)
+ .HasColumnType("nvarchar(200)");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Version")
+ .HasMaxLength(50)
+ .HasColumnType("nvarchar(50)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IsPublished");
+
+ b.ToTable("ChangelogEntries");
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.ClientImportJob", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CompletedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("ErrorMessage")
+ .HasMaxLength(2000)
+ .HasColumnType("nvarchar(2000)");
+
+ b.Property("FailedRows")
+ .HasColumnType("int");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("OrganizationId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ProcessedRows")
+ .HasColumnType("int");
+
+ b.Property("SourceSystem")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("StartedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasMaxLength(32)
+ .HasColumnType("nvarchar(32)");
+
+ b.Property("SucceededRows")
+ .HasColumnType("int");
+
+ b.Property("TotalRows")
+ .HasColumnType("int");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Status");
+
+ b.HasIndex("OrganizationId", "CreatedAt");
+
+ b.ToTable("ClientImportJob", (string)null);
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.ClientImportJobError", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ClientImportJobId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("Message")
+ .IsRequired()
+ .HasMaxLength(2000)
+ .HasColumnType("nvarchar(2000)");
+
+ b.Property("RowNumber")
+ .HasColumnType("int");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ClientImportJobId");
+
+ b.HasIndex("RowNumber");
+
+ b.ToTable("ClientImportJobError", (string)null);
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.ClientImportUploadRow", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ClientImportUploadSessionId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("RowDataJson")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RowNumber")
+ .HasColumnType("int");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ClientImportUploadSessionId", "RowNumber")
+ .IsUnique();
+
+ b.ToTable("ClientImportUploadRow", (string)null);
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.ClientImportUploadSession", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConsumedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("ExpiresAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("OrganizationId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("SourceSystem")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasMaxLength(32)
+ .HasColumnType("nvarchar(32)");
+
+ b.Property("TotalRows")
+ .HasColumnType("int");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationId", "Status", "ExpiresAtUtc");
+
+ b.ToTable("ClientImportUploadSession", (string)null);
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.Conversation", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("OrganizationClientId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Title")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationClientId");
+
+ b.ToTable("Conversation", "messaging");
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.ConversationParticipant", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConversationId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.HasIndex("ConversationId", "UserId")
+ .IsUnique();
+
+ b.ToTable("ConversationParticipant", "messaging");
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.CustomerPaymentProfile", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("DefaultPaymentMethodId")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("EncryptedAccessToken")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("EncryptedRefreshToken")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("IsDelinquent")
+ .HasColumnType("bit");
+
+ b.Property("OrganizationClientId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("OrganizationId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("OwnerId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("OwnerType")
+ .HasColumnType("int");
+
+ b.Property("Provider")
+ .HasColumnType("int");
+
+ b.Property("ProviderCustomerId")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("SquareLocationId")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TokenExpiresAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationClientId");
+
+ b.HasIndex("OrganizationId");
+
+ b.ToTable("CustomerPaymentProfile", "payment");
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.DataExportJob", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CompletedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("ContentType")
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("DownloadCount")
+ .HasColumnType("int");
+
+ b.Property("ErrorMessage")
+ .HasMaxLength(2000)
+ .HasColumnType("nvarchar(2000)");
+
+ b.Property("ExpiresAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("FileContent")
+ .HasColumnType("varbinary(max)");
+
+ b.Property("FileName")
+ .HasMaxLength(255)
+ .HasColumnType("nvarchar(255)");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("OrganizationId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("RequestedByUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("StartedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasMaxLength(32)
+ .HasColumnType("nvarchar(32)");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationId", "CreatedAt");
+
+ b.HasIndex("OrganizationId", "Status");
+
+ b.ToTable("DataExportJob", (string)null);
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.Employee", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("Email")
+ .HasMaxLength(255)
+ .HasColumnType("nvarchar(255)");
+
+ b.Property("FirstName")
+ .IsRequired()
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)");
+
+ b.Property("HireDate")
+ .HasColumnType("datetime2");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("JobTitle")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("LastName")
+ .IsRequired()
+ .HasMaxLength(100)
+ .HasColumnType("nvarchar(100)");
+
+ b.Property("Notes")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("OrganizationId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("PhoneNumber")
+ .HasMaxLength(20)
+ .HasColumnType("nvarchar(20)");
+
+ b.Property("ProfilePictureUrl")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RoleId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TerminationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationId");
+
+ b.HasIndex("RoleId");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("Employees", (string)null);
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.EmployeeImportJob", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CompletedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("ErrorMessage")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("FailedRows")
+ .HasColumnType("int");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("OrganizationId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ProcessedRows")
+ .HasColumnType("int");
+
+ b.Property("SourceSystem")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("StartedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("SucceededRows")
+ .HasColumnType("int");
+
+ b.Property("TotalRows")
+ .HasColumnType("int");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationId");
+
+ b.ToTable("EmployeeImportJobs");
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.EmployeeImportJobError", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("EmployeeImportJobId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("Message")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RowNumber")
+ .HasColumnType("int");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EmployeeImportJobId");
+
+ b.ToTable("EmployeeImportJobErrors");
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.EmployeeImportUploadRow", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("EmployeeImportUploadSessionId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("RowDataJson")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RowNumber")
+ .HasColumnType("int");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EmployeeImportUploadSessionId");
+
+ b.ToTable("EmployeeImportUploadRows");
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.EmployeeImportUploadSession", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConsumedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("ExpiresAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("OrganizationId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("SourceSystem")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TotalRows")
+ .HasColumnType("int");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationId");
+
+ b.ToTable("EmployeeImportUploadSessions");
+ });
+
+ modelBuilder.Entity("JobFlow.Domain.Models.EmployeeInvite", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AccessCount")
+ .HasColumnType("int");
+
+ b.Property("AccessIpAddress")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("AccessedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeactivatedAtUtc")
+ .HasColumnType("datetime2");
+
+ b.Property("Email")
+ .IsRequired()
+ .HasMaxLength(255)
+ .HasColumnType("nvarchar(255)");
+
+ b.Property("ExpiresAt")
+ .HasColumnType("datetime2");
+
+ b.Property("FirstName")
+ .IsRequired()
+ .HasMaxLength(30)
+ .HasColumnType("nvarchar(30)");
+
+ b.Property