diff --git a/OnlineSales.sln b/OnlineSales.sln
index 959657af..7a34e43e 100644
--- a/OnlineSales.sln
+++ b/OnlineSales.sln
@@ -126,6 +126,6 @@ Global
$0.DotNetNamingPolicy = $1
$1.DirectoryNamespaceAssociation = PrefixedHierarchical
$0.TextStylePolicy = $3
- version = 1.2.22-pre
+ version = 1.2.23-pre
EndGlobalSection
EndGlobal
diff --git a/plugins/OnlineSales.Plugin.EmailSync/DTOs/ImapAccountDtos.cs b/plugins/OnlineSales.Plugin.EmailSync/DTOs/ImapAccountDtos.cs
index 143979eb..af04ba1a 100644
--- a/plugins/OnlineSales.Plugin.EmailSync/DTOs/ImapAccountDtos.cs
+++ b/plugins/OnlineSales.Plugin.EmailSync/DTOs/ImapAccountDtos.cs
@@ -29,11 +29,11 @@ public class ImapAccountCreateDto : ImapAccountBaseDto
public class ImapAccountUpdateDto
{
- public string? Host { get; set; } = string.Empty;
+ public string? Host { get; set; }
- public string? UserName { get; set; } = string.Empty;
+ public string? UserName { get; set; }
- public string? Password { get; set; } = string.Empty;
+ public string? Password { get; set; }
public int? Port { get; set; }
diff --git a/plugins/OnlineSales.Plugin.EmailSync/Migrations/20240229073050_CreatedById.Designer.cs b/plugins/OnlineSales.Plugin.EmailSync/Migrations/20240229073050_CreatedById.Designer.cs
new file mode 100644
index 00000000..e704b1d3
--- /dev/null
+++ b/plugins/OnlineSales.Plugin.EmailSync/Migrations/20240229073050_CreatedById.Designer.cs
@@ -0,0 +1,2952 @@
+//
+using System;
+using System.Collections.Generic;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+using OnlineSales.Entities;
+using OnlineSales.Plugin.EmailSync.Data;
+
+#nullable disable
+
+namespace OnlineSales.Plugin.EmailSync.Migrations
+{
+ [DbContext(typeof(EmailSyncDbContext))]
+ [Migration("20240229073050_CreatedById")]
+ partial class CreatedById
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "7.0.9")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("ContactDeal", b =>
+ {
+ b.Property("ContactsId")
+ .HasColumnType("integer")
+ .HasColumnName("contacts_id");
+
+ b.Property("DealsId")
+ .HasColumnType("integer")
+ .HasColumnName("deals_id");
+
+ b.HasKey("ContactsId", "DealsId")
+ .HasName("pk_contact_deal");
+
+ b.HasIndex("DealsId")
+ .HasDatabaseName("ix_contact_deal_deals_id");
+
+ b.ToTable("contact_deal", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("text")
+ .HasColumnName("id");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnType("text")
+ .HasColumnName("concurrency_stamp");
+
+ b.Property("Name")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)")
+ .HasColumnName("name");
+
+ b.Property("NormalizedName")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)")
+ .HasColumnName("normalized_name");
+
+ b.HasKey("Id")
+ .HasName("pk_roles");
+
+ b.HasIndex("NormalizedName")
+ .IsUnique()
+ .HasDatabaseName("RoleNameIndex");
+
+ b.ToTable("roles", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ClaimType")
+ .HasColumnType("text")
+ .HasColumnName("claim_type");
+
+ b.Property("ClaimValue")
+ .HasColumnType("text")
+ .HasColumnName("claim_value");
+
+ b.Property("RoleId")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("role_id");
+
+ b.HasKey("Id")
+ .HasName("pk_role_claims");
+
+ b.HasIndex("RoleId")
+ .HasDatabaseName("ix_role_claims_role_id");
+
+ b.ToTable("role_claims", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ClaimType")
+ .HasColumnType("text")
+ .HasColumnName("claim_type");
+
+ b.Property("ClaimValue")
+ .HasColumnType("text")
+ .HasColumnName("claim_value");
+
+ b.Property("UserId")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id")
+ .HasName("pk_user_claims");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_user_claims_user_id");
+
+ b.ToTable("user_claims", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b =>
+ {
+ b.Property("LoginProvider")
+ .HasColumnType("text")
+ .HasColumnName("login_provider");
+
+ b.Property("ProviderKey")
+ .HasColumnType("text")
+ .HasColumnName("provider_key");
+
+ b.Property("ProviderDisplayName")
+ .HasColumnType("text")
+ .HasColumnName("provider_display_name");
+
+ b.Property("UserId")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("user_id");
+
+ b.HasKey("LoginProvider", "ProviderKey")
+ .HasName("pk_user_logins");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_user_logins_user_id");
+
+ b.ToTable("user_logins", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("text")
+ .HasColumnName("user_id");
+
+ b.Property("RoleId")
+ .HasColumnType("text")
+ .HasColumnName("role_id");
+
+ b.HasKey("UserId", "RoleId")
+ .HasName("pk_user_roles");
+
+ b.HasIndex("RoleId")
+ .HasDatabaseName("ix_user_roles_role_id");
+
+ b.ToTable("user_roles", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("text")
+ .HasColumnName("user_id");
+
+ b.Property("LoginProvider")
+ .HasColumnType("text")
+ .HasColumnName("login_provider");
+
+ b.Property("Name")
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property("Value")
+ .HasColumnType("text")
+ .HasColumnName("value");
+
+ b.HasKey("UserId", "LoginProvider", "Name")
+ .HasName("pk_user_tokens");
+
+ b.ToTable("user_tokens", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("OnlineSales.Entities.Account", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CityName")
+ .HasColumnType("text")
+ .HasColumnName("city_name");
+
+ b.Property("ContinentCode")
+ .HasColumnType("integer")
+ .HasColumnName("continent_code");
+
+ b.Property("CountryCode")
+ .HasColumnType("integer")
+ .HasColumnName("country_code");
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property("CreatedById")
+ .HasColumnType("text")
+ .HasColumnName("created_by_id");
+
+ b.Property("CreatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("created_by_ip");
+
+ b.Property("CreatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("created_by_user_agent");
+
+ b.Property("Data")
+ .HasColumnType("jsonb")
+ .HasColumnName("data");
+
+ b.Property("EmployeesRange")
+ .HasColumnType("text")
+ .HasColumnName("employees_range");
+
+ b.Property("LogoUrl")
+ .HasColumnType("text")
+ .HasColumnName("logo_url");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property("Revenue")
+ .HasColumnType("double precision")
+ .HasColumnName("revenue");
+
+ b.Property("SiteUrl")
+ .HasColumnType("text")
+ .HasColumnName("site_url");
+
+ b.Property>("SocialMedia")
+ .HasColumnType("jsonb")
+ .HasColumnName("social_media");
+
+ b.Property("Source")
+ .HasColumnType("text")
+ .HasColumnName("source");
+
+ b.Property("State")
+ .HasColumnType("text")
+ .HasColumnName("state");
+
+ b.Property("Tags")
+ .HasColumnType("jsonb")
+ .HasColumnName("tags");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("updated_at");
+
+ b.Property("UpdatedById")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_id");
+
+ b.Property("UpdatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_ip");
+
+ b.Property("UpdatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_user_agent");
+
+ b.HasKey("Id")
+ .HasName("pk_account");
+
+ b.HasIndex("Name")
+ .IsUnique()
+ .HasDatabaseName("ix_account_name");
+
+ b.ToTable("account", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("OnlineSales.Entities.ChangeLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property("Data")
+ .IsRequired()
+ .HasColumnType("jsonb")
+ .HasColumnName("data");
+
+ b.Property("EntityState")
+ .HasColumnType("integer")
+ .HasColumnName("entity_state");
+
+ b.Property("ObjectId")
+ .HasColumnType("integer")
+ .HasColumnName("object_id");
+
+ b.Property("ObjectType")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("object_type");
+
+ b.Property("Source")
+ .HasColumnType("text")
+ .HasColumnName("source");
+
+ b.HasKey("Id")
+ .HasName("pk_change_log");
+
+ b.ToTable("change_log", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("OnlineSales.Entities.ChangeLogTaskLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ChangeLogIdMax")
+ .HasColumnType("integer")
+ .HasColumnName("change_log_id_max");
+
+ b.Property("ChangeLogIdMin")
+ .HasColumnType("integer")
+ .HasColumnName("change_log_id_min");
+
+ b.Property("ChangesProcessed")
+ .HasColumnType("integer")
+ .HasColumnName("changes_processed");
+
+ b.Property("End")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("end");
+
+ b.Property("Source")
+ .HasColumnType("text")
+ .HasColumnName("source");
+
+ b.Property("Start")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("start");
+
+ b.Property("State")
+ .HasColumnType("integer")
+ .HasColumnName("state");
+
+ b.Property("TaskName")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("task_name");
+
+ b.HasKey("Id")
+ .HasName("pk_change_log_task_log");
+
+ b.ToTable("change_log_task_log", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("OnlineSales.Entities.Comment", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AuthorEmail")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("author_email");
+
+ b.Property("AuthorName")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("author_name");
+
+ b.Property("Body")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("body");
+
+ b.Property("CommentableId")
+ .HasColumnType("integer")
+ .HasColumnName("commentable_id");
+
+ b.Property("CommentableType")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("commentable_type");
+
+ b.Property("ContactId")
+ .HasColumnType("integer")
+ .HasColumnName("contact_id");
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property("CreatedById")
+ .HasColumnType("text")
+ .HasColumnName("created_by_id");
+
+ b.Property("CreatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("created_by_ip");
+
+ b.Property("CreatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("created_by_user_agent");
+
+ b.Property("Key")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("key");
+
+ b.Property("Language")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("language");
+
+ b.Property("ParentId")
+ .HasColumnType("integer")
+ .HasColumnName("parent_id");
+
+ b.Property("Source")
+ .HasColumnType("text")
+ .HasColumnName("source");
+
+ b.Property("Status")
+ .HasColumnType("integer")
+ .HasColumnName("status");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("updated_at");
+
+ b.Property("UpdatedById")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_id");
+
+ b.Property("UpdatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_ip");
+
+ b.Property("UpdatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_user_agent");
+
+ b.HasKey("Id")
+ .HasName("pk_comment");
+
+ b.HasIndex("ContactId")
+ .HasDatabaseName("ix_comment_contact_id");
+
+ b.HasIndex("ParentId")
+ .HasDatabaseName("ix_comment_parent_id");
+
+ b.ToTable("comment", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("OnlineSales.Entities.Contact", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AccountId")
+ .HasColumnType("integer")
+ .HasColumnName("account_id");
+
+ b.Property("Address1")
+ .HasColumnType("text")
+ .HasColumnName("address1");
+
+ b.Property("Address2")
+ .HasColumnType("text")
+ .HasColumnName("address2");
+
+ b.Property("Birthday")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("birthday");
+
+ b.Property("CityName")
+ .HasColumnType("text")
+ .HasColumnName("city_name");
+
+ b.Property("CompanyName")
+ .HasColumnType("text")
+ .HasColumnName("company_name");
+
+ b.Property("ContinentCode")
+ .HasColumnType("integer")
+ .HasColumnName("continent_code");
+
+ b.Property("CountryCode")
+ .HasColumnType("integer")
+ .HasColumnName("country_code");
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property("CreatedById")
+ .HasColumnType("text")
+ .HasColumnName("created_by_id");
+
+ b.Property("CreatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("created_by_ip");
+
+ b.Property("CreatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("created_by_user_agent");
+
+ b.Property("Department")
+ .HasColumnType("text")
+ .HasColumnName("department");
+
+ b.Property("DomainId")
+ .HasColumnType("integer")
+ .HasColumnName("domain_id");
+
+ b.Property("Email")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("email");
+
+ b.Property("FirstName")
+ .HasColumnType("text")
+ .HasColumnName("first_name");
+
+ b.Property("JobTitle")
+ .HasColumnType("text")
+ .HasColumnName("job_title");
+
+ b.Property("Language")
+ .HasColumnType("text")
+ .HasColumnName("language");
+
+ b.Property("LastName")
+ .HasColumnType("text")
+ .HasColumnName("last_name");
+
+ b.Property("MiddleName")
+ .HasColumnType("text")
+ .HasColumnName("middle_name");
+
+ b.Property("Phone")
+ .HasColumnType("text")
+ .HasColumnName("phone");
+
+ b.Property("Prefix")
+ .HasColumnType("text")
+ .HasColumnName("prefix");
+
+ b.Property>("SocialMedia")
+ .HasColumnType("jsonb")
+ .HasColumnName("social_media");
+
+ b.Property("Source")
+ .HasColumnType("text")
+ .HasColumnName("source");
+
+ b.Property("State")
+ .HasColumnType("text")
+ .HasColumnName("state");
+
+ b.Property("Timezone")
+ .HasColumnType("integer")
+ .HasColumnName("timezone");
+
+ b.Property("UnsubscribeId")
+ .HasColumnType("integer")
+ .HasColumnName("unsubscribe_id");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("updated_at");
+
+ b.Property("UpdatedById")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_id");
+
+ b.Property("UpdatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_ip");
+
+ b.Property("UpdatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_user_agent");
+
+ b.Property("Zip")
+ .HasColumnType("text")
+ .HasColumnName("zip");
+
+ b.HasKey("Id")
+ .HasName("pk_contact");
+
+ b.HasIndex("AccountId")
+ .HasDatabaseName("ix_contact_account_id");
+
+ b.HasIndex("DomainId")
+ .HasDatabaseName("ix_contact_domain_id");
+
+ b.HasIndex("Email")
+ .IsUnique()
+ .HasDatabaseName("ix_contact_email");
+
+ b.HasIndex("UnsubscribeId")
+ .HasDatabaseName("ix_contact_unsubscribe_id");
+
+ b.ToTable("contact", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("OnlineSales.Entities.ContactEmailSchedule", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ContactId")
+ .HasColumnType("integer")
+ .HasColumnName("contact_id");
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property("CreatedById")
+ .HasColumnType("text")
+ .HasColumnName("created_by_id");
+
+ b.Property("CreatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("created_by_ip");
+
+ b.Property("CreatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("created_by_user_agent");
+
+ b.Property("ScheduleId")
+ .HasColumnType("integer")
+ .HasColumnName("schedule_id");
+
+ b.Property("Source")
+ .HasColumnType("text")
+ .HasColumnName("source");
+
+ b.Property("Status")
+ .HasColumnType("integer")
+ .HasColumnName("status");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("updated_at");
+
+ b.Property("UpdatedById")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_id");
+
+ b.Property("UpdatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_ip");
+
+ b.Property("UpdatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_user_agent");
+
+ b.HasKey("Id")
+ .HasName("pk_contact_email_schedule");
+
+ b.HasIndex("ContactId")
+ .HasDatabaseName("ix_contact_email_schedule_contact_id");
+
+ b.HasIndex("ScheduleId")
+ .HasDatabaseName("ix_contact_email_schedule_schedule_id");
+
+ b.ToTable("contact_email_schedule", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("OnlineSales.Entities.Content", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AllowComments")
+ .HasColumnType("boolean")
+ .HasColumnName("allow_comments");
+
+ b.Property("Author")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("author");
+
+ b.Property("Body")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("body");
+
+ b.Property("Category")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("category");
+
+ b.Property("CoverImageAlt")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("cover_image_alt");
+
+ b.Property("CoverImageUrl")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("cover_image_url");
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property("CreatedById")
+ .HasColumnType("text")
+ .HasColumnName("created_by_id");
+
+ b.Property("CreatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("created_by_ip");
+
+ b.Property("CreatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("created_by_user_agent");
+
+ b.Property("Description")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("description");
+
+ b.Property("Language")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("language");
+
+ b.Property("PublishedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("published_at");
+
+ b.Property("Slug")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("slug");
+
+ b.Property("Source")
+ .HasColumnType("text")
+ .HasColumnName("source");
+
+ b.Property("Tags")
+ .IsRequired()
+ .HasColumnType("text[]")
+ .HasColumnName("tags");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("title");
+
+ b.Property("Type")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("type");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("updated_at");
+
+ b.Property("UpdatedById")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_id");
+
+ b.Property("UpdatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_ip");
+
+ b.Property("UpdatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_user_agent");
+
+ b.HasKey("Id")
+ .HasName("pk_content");
+
+ b.HasIndex("Slug")
+ .IsUnique()
+ .HasDatabaseName("ix_content_slug");
+
+ b.ToTable("content", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("OnlineSales.Entities.Deal", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AccountId")
+ .HasColumnType("integer")
+ .HasColumnName("account_id");
+
+ b.Property("ActualCloseDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("actual_close_date");
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property("CreatedById")
+ .HasColumnType("text")
+ .HasColumnName("created_by_id");
+
+ b.Property("CreatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("created_by_ip");
+
+ b.Property("CreatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("created_by_user_agent");
+
+ b.Property("DealCurrency")
+ .HasColumnType("text")
+ .HasColumnName("deal_currency");
+
+ b.Property("DealPipelineId")
+ .HasColumnType("integer")
+ .HasColumnName("deal_pipeline_id");
+
+ b.Property("DealPipelineStageId")
+ .HasColumnType("integer")
+ .HasColumnName("deal_pipeline_stage_id");
+
+ b.Property("DealValue")
+ .HasColumnType("numeric")
+ .HasColumnName("deal_value");
+
+ b.Property("ExpectedCloseDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("expected_close_date");
+
+ b.Property("Source")
+ .HasColumnType("text")
+ .HasColumnName("source");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("updated_at");
+
+ b.Property("UpdatedById")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_id");
+
+ b.Property("UpdatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_ip");
+
+ b.Property("UpdatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_user_agent");
+
+ b.Property("UserId")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id")
+ .HasName("pk_deal");
+
+ b.HasIndex("AccountId")
+ .HasDatabaseName("ix_deal_account_id");
+
+ b.HasIndex("DealPipelineId")
+ .HasDatabaseName("ix_deal_deal_pipeline_id");
+
+ b.HasIndex("DealPipelineStageId")
+ .HasDatabaseName("ix_deal_deal_pipeline_stage_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_deal_user_id");
+
+ b.ToTable("deal", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("OnlineSales.Entities.DealPipeline", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property("CreatedById")
+ .HasColumnType("text")
+ .HasColumnName("created_by_id");
+
+ b.Property("CreatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("created_by_ip");
+
+ b.Property("CreatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("created_by_user_agent");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property("Source")
+ .HasColumnType("text")
+ .HasColumnName("source");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("updated_at");
+
+ b.Property("UpdatedById")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_id");
+
+ b.Property("UpdatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_ip");
+
+ b.Property("UpdatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_user_agent");
+
+ b.HasKey("Id")
+ .HasName("pk_deal_pipeline");
+
+ b.ToTable("deal_pipeline", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("OnlineSales.Entities.DealPipelineStage", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property("CreatedById")
+ .HasColumnType("text")
+ .HasColumnName("created_by_id");
+
+ b.Property("CreatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("created_by_ip");
+
+ b.Property("CreatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("created_by_user_agent");
+
+ b.Property("DealPipelineId")
+ .HasColumnType("integer")
+ .HasColumnName("deal_pipeline_id");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property("Order")
+ .HasColumnType("integer")
+ .HasColumnName("order");
+
+ b.Property("Source")
+ .HasColumnType("text")
+ .HasColumnName("source");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("updated_at");
+
+ b.Property("UpdatedById")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_id");
+
+ b.Property("UpdatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_ip");
+
+ b.Property("UpdatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_user_agent");
+
+ b.HasKey("Id")
+ .HasName("pk_deal_pipeline_stage");
+
+ b.HasIndex("DealPipelineId")
+ .HasDatabaseName("ix_deal_pipeline_stage_deal_pipeline_id");
+
+ b.ToTable("deal_pipeline_stage", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("OnlineSales.Entities.Discount", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property("CreatedById")
+ .HasColumnType("text")
+ .HasColumnName("created_by_id");
+
+ b.Property("CreatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("created_by_ip");
+
+ b.Property("CreatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("created_by_user_agent");
+
+ b.Property("OrderId")
+ .HasColumnType("integer")
+ .HasColumnName("order_id");
+
+ b.Property("OrderItemId")
+ .HasColumnType("integer")
+ .HasColumnName("order_item_id");
+
+ b.Property("PromotionId")
+ .HasColumnType("integer")
+ .HasColumnName("promotion_id");
+
+ b.Property("Source")
+ .HasColumnType("text")
+ .HasColumnName("source");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("updated_at");
+
+ b.Property("UpdatedById")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_id");
+
+ b.Property("UpdatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_ip");
+
+ b.Property("UpdatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("updated_by_user_agent");
+
+ b.Property("Value")
+ .HasColumnType("numeric")
+ .HasColumnName("value");
+
+ b.HasKey("Id")
+ .HasName("pk_discount");
+
+ b.HasIndex("OrderId")
+ .HasDatabaseName("ix_discount_order_id");
+
+ b.HasIndex("OrderItemId")
+ .IsUnique()
+ .HasDatabaseName("ix_discount_order_item_id");
+
+ b.HasIndex("PromotionId")
+ .HasDatabaseName("ix_discount_promotion_id");
+
+ b.ToTable("discount", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("OnlineSales.Entities.Domain", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AccountId")
+ .HasColumnType("integer")
+ .HasColumnName("account_id");
+
+ b.Property("AccountStatus")
+ .HasColumnType("integer")
+ .HasColumnName("account_status");
+
+ b.Property("CatchAll")
+ .HasColumnType("boolean")
+ .HasColumnName("catch_all");
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property("Description")
+ .HasColumnType("text")
+ .HasColumnName("description");
+
+ b.Property("Disposable")
+ .HasColumnType("boolean")
+ .HasColumnName("disposable");
+
+ b.Property("DnsCheck")
+ .HasColumnType("boolean")
+ .HasColumnName("dns_check");
+
+ b.Property>("DnsRecords")
+ .HasColumnType("jsonb")
+ .HasColumnName("dns_records");
+
+ b.Property("FaviconUrl")
+ .HasColumnType("text")
+ .HasColumnName("favicon_url");
+
+ b.Property("Free")
+ .HasColumnType("boolean")
+ .HasColumnName("free");
+
+ b.Property("HttpCheck")
+ .HasColumnType("boolean")
+ .HasColumnName("http_check");
+
+ b.Property("MxCheck")
+ .HasColumnType("boolean")
+ .HasColumnName("mx_check");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property("Source")
+ .HasColumnType("text")
+ .HasColumnName("source");
+
+ b.Property("Title")
+ .HasColumnType("text")
+ .HasColumnName("title");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("updated_at");
+
+ b.Property("Url")
+ .HasColumnType("text")
+ .HasColumnName("url");
+
+ b.HasKey("Id")
+ .HasName("pk_domain");
+
+ b.HasIndex("AccountId")
+ .HasDatabaseName("ix_domain_account_id");
+
+ b.HasIndex("Name")
+ .IsUnique()
+ .HasDatabaseName("ix_domain_name");
+
+ b.ToTable("domain", null, t =>
+ {
+ t.ExcludeFromMigrations();
+ });
+ });
+
+ modelBuilder.Entity("OnlineSales.Entities.EmailGroup", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property("CreatedById")
+ .HasColumnType("text")
+ .HasColumnName("created_by_id");
+
+ b.Property("CreatedByIp")
+ .HasColumnType("text")
+ .HasColumnName("created_by_ip");
+
+ b.Property("CreatedByUserAgent")
+ .HasColumnType("text")
+ .HasColumnName("created_by_user_agent");
+
+ b.Property("Language")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("language");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property("Source")
+ .HasColumnType("text")
+ .HasColumnName("source");
+
+ b.Property("UpdatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("updated_at");
+
+ b.Property