//
using System;
using System.Text.Json;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using Tiku.Infrastructure.Persistence;
#nullable disable
namespace Tiku.Infrastructure.Persistence.Migrations
{
[DbContext(typeof(TikuDbContext))]
partial class TikuDbContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "10.0.10")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "citext");
NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "ltree");
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Tiku.Domain.Catalog.Category", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("CategoryType")
.HasMaxLength(32)
.HasColumnType("character varying(32)")
.HasColumnName("category_type");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("IsActive")
.HasColumnType("boolean")
.HasColumnName("is_active");
b.Property("LegacyId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_id");
b.Property("Name")
.IsRequired()
.HasMaxLength(300)
.HasColumnType("character varying(300)")
.HasColumnName("name");
b.Property("NodeId")
.HasColumnType("uuid")
.HasColumnName("node_id");
b.Property("SortOrder")
.HasColumnType("integer")
.HasColumnName("sort_order");
b.Property("SubjectId")
.HasColumnType("uuid")
.HasColumnName("subject_id");
b.Property("SvipQuestionLimit")
.HasColumnType("integer")
.HasColumnName("svip_question_limit");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.Property("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("updated_at")
.HasDefaultValueSql("now()");
b.HasKey("Id")
.HasName("pk_categories");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_categories_tenant_id_id");
b.HasIndex("TenantId", "LegacyId")
.IsUnique()
.HasDatabaseName("ix_categories_tenant_id_legacy_id");
b.HasIndex("TenantId", "NodeId")
.HasDatabaseName("ix_categories_tenant_id_node_id");
b.HasIndex("TenantId", "SubjectId")
.HasDatabaseName("ix_categories_tenant_id_subject_id");
b.ToTable("categories", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Catalog.Major", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("Description")
.HasColumnType("text")
.HasColumnName("description");
b.Property("IsActive")
.HasColumnType("boolean")
.HasColumnName("is_active");
b.Property("LegacyId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_id");
b.Property("Name")
.IsRequired()
.HasMaxLength(300)
.HasColumnType("character varying(300)")
.HasColumnName("name");
b.Property("RegionId")
.HasColumnType("uuid")
.HasColumnName("region_id");
b.Property("SchoolId")
.HasColumnType("uuid")
.HasColumnName("school_id");
b.Property("SortOrder")
.HasColumnType("integer")
.HasColumnName("sort_order");
b.Property("StudyTips")
.HasColumnType("text")
.HasColumnName("study_tips");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.Property("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("updated_at")
.HasDefaultValueSql("now()");
b.HasKey("Id")
.HasName("pk_majors");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_majors_tenant_id_id");
b.HasIndex("TenantId", "LegacyId")
.IsUnique()
.HasDatabaseName("ix_majors_tenant_id_legacy_id");
b.HasIndex("TenantId", "RegionId")
.HasDatabaseName("ix_majors_tenant_id_region_id");
b.HasIndex("TenantId", "SchoolId")
.HasDatabaseName("ix_majors_tenant_id_school_id");
b.ToTable("majors", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Catalog.ModuleNode", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("IsActive")
.HasColumnType("boolean")
.HasColumnName("is_active");
b.Property("LegacyId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_id");
b.Property("LegacyModuleId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_module_id");
b.Property("LegacyParentId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_parent_id");
b.Property("Metadata")
.ValueGeneratedOnAdd()
.HasColumnType("jsonb")
.HasColumnName("metadata")
.HasDefaultValueSql("'{}'::jsonb");
b.Property("ModuleId")
.HasColumnType("uuid")
.HasColumnName("module_id");
b.Property("Name")
.IsRequired()
.HasMaxLength(300)
.HasColumnType("character varying(300)")
.HasColumnName("name");
b.Property("ParentId")
.HasColumnType("uuid")
.HasColumnName("parent_id");
b.Property("Path")
.HasMaxLength(1000)
.HasColumnType("character varying(1000)")
.HasColumnName("path");
b.Property("RegionId")
.HasColumnType("uuid")
.HasColumnName("region_id");
b.Property("SortOrder")
.HasColumnType("integer")
.HasColumnName("sort_order");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.Property("Type")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("character varying(32)")
.HasColumnName("type");
b.Property("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("updated_at")
.HasDefaultValueSql("now()");
b.HasKey("Id")
.HasName("pk_module_nodes");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_module_nodes_tenant_id_id");
b.HasIndex("TenantId", "LegacyId")
.IsUnique()
.HasDatabaseName("ix_module_nodes_tenant_id_legacy_id");
b.HasIndex("TenantId", "ModuleId")
.HasDatabaseName("ix_module_nodes_tenant_id_module_id");
b.HasIndex("TenantId", "ParentId")
.HasDatabaseName("ix_module_nodes_tenant_id_parent_id");
b.HasIndex("TenantId", "RegionId")
.HasDatabaseName("ix_module_nodes_tenant_id_region_id");
b.ToTable("module_nodes", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Catalog.Region", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("Code")
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("code");
b.Property("Config")
.ValueGeneratedOnAdd()
.HasColumnType("jsonb")
.HasColumnName("config")
.HasDefaultValueSql("'{}'::jsonb");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("FullName")
.HasMaxLength(300)
.HasColumnType("character varying(300)")
.HasColumnName("full_name");
b.Property("Icon")
.HasMaxLength(2048)
.HasColumnType("character varying(2048)")
.HasColumnName("icon");
b.Property("IsActive")
.HasColumnType("boolean")
.HasColumnName("is_active");
b.Property("IsHot")
.HasColumnType("boolean")
.HasColumnName("is_hot");
b.Property("LegacyId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_id");
b.Property("Name")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)")
.HasColumnName("name");
b.Property("Pinyin")
.HasMaxLength(255)
.HasColumnType("character varying(255)")
.HasColumnName("pinyin");
b.Property("ShortName")
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("short_name");
b.Property("SortOrder")
.HasColumnType("integer")
.HasColumnName("sort_order");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.Property("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("updated_at")
.HasDefaultValueSql("now()");
b.HasKey("Id")
.HasName("pk_regions");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_regions_tenant_id_id");
b.HasIndex("TenantId", "LegacyId")
.IsUnique()
.HasDatabaseName("ix_regions_tenant_id_legacy_id");
b.ToTable("regions", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Catalog.RegionModule", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("Color")
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("color");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("Description")
.HasColumnType("text")
.HasColumnName("description");
b.Property("Icon")
.HasMaxLength(2048)
.HasColumnType("character varying(2048)")
.HasColumnName("icon");
b.Property("IsActive")
.HasColumnType("boolean")
.HasColumnName("is_active");
b.Property("IsPrimarySchoolModule")
.HasColumnType("boolean")
.HasColumnName("is_primary_school_module");
b.Property("LegacyId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_id");
b.Property("Name")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)")
.HasColumnName("name");
b.Property("RegionId")
.HasColumnType("uuid")
.HasColumnName("region_id");
b.Property("Route")
.HasMaxLength(500)
.HasColumnType("character varying(500)")
.HasColumnName("route");
b.Property("SortOrder")
.HasColumnType("integer")
.HasColumnName("sort_order");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.Property("TextColor")
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("text_color");
b.Property("Type")
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("type");
b.Property("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("updated_at")
.HasDefaultValueSql("now()");
b.HasKey("Id")
.HasName("pk_region_modules");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_region_modules_tenant_id_id");
b.HasIndex("TenantId", "LegacyId")
.IsUnique()
.HasDatabaseName("ix_region_modules_tenant_id_legacy_id");
b.HasIndex("TenantId", "RegionId")
.HasDatabaseName("ix_region_modules_tenant_id_region_id");
b.ToTable("region_modules", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Catalog.School", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("LegacyId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_id");
b.Property("Metadata")
.ValueGeneratedOnAdd()
.HasColumnType("jsonb")
.HasColumnName("metadata")
.HasDefaultValueSql("'{}'::jsonb");
b.Property("ModuleId")
.HasColumnType("uuid")
.HasColumnName("module_id");
b.Property("Name")
.IsRequired()
.HasMaxLength(300)
.HasColumnType("character varying(300)")
.HasColumnName("name");
b.Property("ProfessionalExamDate")
.HasMaxLength(255)
.HasColumnType("character varying(255)")
.HasColumnName("professional_exam_date");
b.Property("RegionId")
.HasColumnType("uuid")
.HasColumnName("region_id");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.Property("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("updated_at")
.HasDefaultValueSql("now()");
b.HasKey("Id")
.HasName("pk_schools");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_schools_tenant_id_id");
b.HasIndex("TenantId", "LegacyId")
.IsUnique()
.HasDatabaseName("ix_schools_tenant_id_legacy_id");
b.HasIndex("TenantId", "ModuleId")
.HasDatabaseName("ix_schools_tenant_id_module_id");
b.HasIndex("TenantId", "RegionId")
.HasDatabaseName("ix_schools_tenant_id_region_id");
b.ToTable("schools", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Catalog.Subject", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("Description")
.HasColumnType("text")
.HasColumnName("description");
b.Property("Icon")
.HasMaxLength(2048)
.HasColumnType("character varying(2048)")
.HasColumnName("icon");
b.Property("IsActive")
.HasColumnType("boolean")
.HasColumnName("is_active");
b.Property("LegacyId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_id");
b.Property("MajorId")
.HasColumnType("uuid")
.HasColumnName("major_id");
b.Property("MajorLegacyIds")
.ValueGeneratedOnAdd()
.HasColumnType("jsonb")
.HasColumnName("major_legacy_ids")
.HasDefaultValueSql("'[]'::jsonb");
b.Property("ModuleId")
.HasColumnType("uuid")
.HasColumnName("module_id");
b.Property("Name")
.IsRequired()
.HasMaxLength(300)
.HasColumnType("character varying(300)")
.HasColumnName("name");
b.Property("NodeId")
.HasColumnType("uuid")
.HasColumnName("node_id");
b.Property("RegionId")
.HasColumnType("uuid")
.HasColumnName("region_id");
b.Property("SchoolId")
.HasColumnType("uuid")
.HasColumnName("school_id");
b.Property("SortOrder")
.HasColumnType("integer")
.HasColumnName("sort_order");
b.Property("Stats")
.ValueGeneratedOnAdd()
.HasColumnType("jsonb")
.HasColumnName("stats")
.HasDefaultValueSql("'{}'::jsonb");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.Property("Type")
.HasMaxLength(32)
.HasColumnType("character varying(32)")
.HasColumnName("type");
b.Property("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("updated_at")
.HasDefaultValueSql("now()");
b.HasKey("Id")
.HasName("pk_subjects");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_subjects_tenant_id_id");
b.HasIndex("TenantId", "LegacyId")
.IsUnique()
.HasDatabaseName("ix_subjects_tenant_id_legacy_id");
b.HasIndex("TenantId", "MajorId")
.HasDatabaseName("ix_subjects_tenant_id_major_id");
b.HasIndex("TenantId", "ModuleId")
.HasDatabaseName("ix_subjects_tenant_id_module_id");
b.HasIndex("TenantId", "NodeId")
.HasDatabaseName("ix_subjects_tenant_id_node_id");
b.HasIndex("TenantId", "RegionId")
.HasDatabaseName("ix_subjects_tenant_id_region_id");
b.HasIndex("TenantId", "SchoolId")
.HasDatabaseName("ix_subjects_tenant_id_school_id");
b.ToTable("subjects", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Commerce.ActivationCode", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("AgentUserId")
.HasColumnType("uuid")
.HasColumnName("agent_user_id");
b.Property("BatchId")
.HasColumnType("uuid")
.HasColumnName("batch_id");
b.Property("Code")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("citext")
.HasColumnName("code");
b.Property("CouponCode")
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("coupon_code");
b.Property("CouponRedemptionId")
.HasColumnType("uuid")
.HasColumnName("coupon_redemption_id");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("Days")
.HasColumnType("integer")
.HasColumnName("days");
b.Property("IsUsed")
.HasColumnType("boolean")
.HasColumnName("is_used");
b.Property("LegacyId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_id");
b.Property("Remark")
.HasColumnType("text")
.HasColumnName("remark");
b.Property("SaleType")
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("sale_type");
b.Property("SoldTo")
.HasMaxLength(200)
.HasColumnType("character varying(200)")
.HasColumnName("sold_to");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.Property("UnitPriceCents")
.HasColumnType("integer")
.HasColumnName("unit_price_cents");
b.Property("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("updated_at")
.HasDefaultValueSql("now()");
b.Property("UsedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("used_at");
b.Property("UsedBy")
.HasColumnType("uuid")
.HasColumnName("used_by");
b.Property("UsedRegionId")
.HasColumnType("uuid")
.HasColumnName("used_region_id");
b.HasKey("Id")
.HasName("pk_activation_codes");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_activation_codes_tenant_id_id");
b.HasIndex("AgentUserId")
.HasDatabaseName("ix_activation_codes_agent_user_id");
b.HasIndex("UsedBy")
.HasDatabaseName("ix_activation_codes_used_by");
b.HasIndex("TenantId", "BatchId")
.HasDatabaseName("ix_activation_codes_tenant_id_batch_id");
b.HasIndex("TenantId", "Code")
.IsUnique()
.HasDatabaseName("ix_activation_codes_tenant_id_code");
b.HasIndex("TenantId", "CouponRedemptionId")
.HasDatabaseName("ix_activation_codes_tenant_id_coupon_redemption_id");
b.HasIndex("TenantId", "LegacyId")
.IsUnique()
.HasDatabaseName("ix_activation_codes_tenant_id_legacy_id");
b.HasIndex("TenantId", "UsedRegionId")
.HasDatabaseName("ix_activation_codes_tenant_id_used_region_id");
b.ToTable("activation_codes", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Commerce.CodeBatch", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("CampaignName")
.HasMaxLength(200)
.HasColumnType("character varying(200)")
.HasColumnName("campaign_name");
b.Property("Channel")
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("channel");
b.Property("CommissionRate")
.HasPrecision(6, 4)
.HasColumnType("numeric(6,4)")
.HasColumnName("commission_rate");
b.Property("CostPriceCents")
.HasColumnType("integer")
.HasColumnName("cost_price_cents");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("CreatedBy")
.HasColumnType("uuid")
.HasColumnName("created_by");
b.Property("Days")
.HasColumnType("integer")
.HasColumnName("days");
b.Property("DefaultUnitPriceCents")
.HasColumnType("integer")
.HasColumnName("default_unit_price_cents");
b.Property("IssuedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("issued_at");
b.Property("LegacyId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_id");
b.Property("LegacyRegionId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_region_id");
b.Property("Name")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)")
.HasColumnName("name");
b.Property("RegionId")
.HasColumnType("uuid")
.HasColumnName("region_id");
b.Property("Remark")
.HasColumnType("text")
.HasColumnName("remark");
b.Property("SaleType")
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("sale_type");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.Property("TotalCount")
.HasColumnType("integer")
.HasColumnName("total_count");
b.Property("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("updated_at")
.HasDefaultValueSql("now()");
b.HasKey("Id")
.HasName("pk_code_batches");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_code_batches_tenant_id_id");
b.HasIndex("TenantId", "LegacyId")
.IsUnique()
.HasDatabaseName("ix_code_batches_tenant_id_legacy_id");
b.ToTable("code_batches", null, t =>
{
t.HasCheckConstraint("ck_code_batches_amounts", "default_unit_price_cents >= 0 and cost_price_cents >= 0");
t.HasCheckConstraint("ck_code_batches_counts", "total_count >= 0");
});
});
modelBuilder.Entity("Tiku.Domain.Commerce.Coupon", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("Code")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("citext")
.HasColumnName("code");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("DiscountType")
.HasMaxLength(32)
.HasColumnType("character varying(32)")
.HasColumnName("discount_type");
b.Property("DiscountValue")
.HasPrecision(10, 2)
.HasColumnType("numeric(10,2)")
.HasColumnName("discount_value");
b.Property("LegacyId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_id");
b.Property("MaxUses")
.HasColumnType("integer")
.HasColumnName("max_uses");
b.Property("PlanId")
.HasColumnType("uuid")
.HasColumnName("plan_id");
b.Property("Remark")
.HasColumnType("text")
.HasColumnName("remark");
b.Property("Source")
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("source");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.Property("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("updated_at")
.HasDefaultValueSql("now()");
b.Property("UsedCount")
.HasColumnType("integer")
.HasColumnName("used_count");
b.Property("ValidFrom")
.HasColumnType("timestamp with time zone")
.HasColumnName("valid_from");
b.Property("ValidTo")
.HasColumnType("timestamp with time zone")
.HasColumnName("valid_to");
b.HasKey("Id")
.HasName("pk_coupons");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_coupons_tenant_id_id");
b.HasIndex("TenantId", "Code")
.IsUnique()
.HasDatabaseName("ix_coupons_tenant_id_code");
b.HasIndex("TenantId", "LegacyId")
.IsUnique()
.HasDatabaseName("ix_coupons_tenant_id_legacy_id");
b.HasIndex("TenantId", "PlanId")
.HasDatabaseName("ix_coupons_tenant_id_plan_id");
b.ToTable("coupons", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Commerce.CouponRedemption", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("ClaimedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("claimed_at");
b.Property("CouponCode")
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("coupon_code");
b.Property("CouponId")
.HasColumnType("uuid")
.HasColumnName("coupon_id");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("DiscountAppliedCents")
.HasColumnType("integer")
.HasColumnName("discount_applied_cents");
b.Property("LegacyId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_id");
b.Property("OrderId")
.HasColumnType("uuid")
.HasColumnName("order_id");
b.Property("PlanId")
.HasColumnType("uuid")
.HasColumnName("plan_id");
b.Property("RegionId")
.HasColumnType("uuid")
.HasColumnName("region_id");
b.Property("Remark")
.HasColumnType("text")
.HasColumnName("remark");
b.Property("Source")
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("source");
b.Property("Status")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("character varying(32)")
.HasColumnName("status");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.Property("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("updated_at")
.HasDefaultValueSql("now()");
b.Property("UsedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("used_at");
b.Property("UserId")
.HasColumnType("uuid")
.HasColumnName("user_id");
b.HasKey("Id")
.HasName("pk_coupon_redemptions");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_coupon_redemptions_tenant_id_id");
b.HasIndex("UserId")
.HasDatabaseName("ix_coupon_redemptions_user_id");
b.HasIndex("TenantId", "CouponId")
.HasDatabaseName("ix_coupon_redemptions_tenant_id_coupon_id");
b.HasIndex("TenantId", "LegacyId")
.IsUnique()
.HasDatabaseName("ix_coupon_redemptions_tenant_id_legacy_id");
b.HasIndex("TenantId", "PlanId")
.HasDatabaseName("ix_coupon_redemptions_tenant_id_plan_id");
b.HasIndex("TenantId", "RegionId")
.HasDatabaseName("ix_coupon_redemptions_tenant_id_region_id");
b.HasIndex("TenantId", "OrderId", "UserId")
.HasDatabaseName("ix_coupon_redemptions_tenant_id_order_id_user_id")
.HasFilter("order_id is not null");
b.HasIndex("TenantId", "UserId", "CouponId")
.IsUnique()
.HasDatabaseName("ix_coupon_redemptions_tenant_id_user_id_coupon_id")
.HasFilter("coupon_id is not null");
b.ToTable("coupon_redemptions", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Commerce.Entitlement", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("EntitlementType")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("entitlement_type");
b.Property("ExpiresAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("expires_at");
b.Property("LegacySourceId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_source_id");
b.Property("Metadata")
.ValueGeneratedOnAdd()
.HasColumnType("jsonb")
.HasColumnName("metadata")
.HasDefaultValueSql("'{}'::jsonb");
b.Property("ScopeId")
.HasColumnType("uuid")
.HasColumnName("scope_id");
b.Property("ScopeType")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("character varying(32)")
.HasColumnName("scope_type");
b.Property("SourceId")
.HasColumnType("uuid")
.HasColumnName("source_id");
b.Property("SourceType")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("source_type");
b.Property("StartsAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("starts_at")
.HasDefaultValueSql("now()");
b.Property("Status")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("character varying(32)")
.HasColumnName("status");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.Property("UserId")
.HasColumnType("uuid")
.HasColumnName("user_id");
b.HasKey("Id")
.HasName("pk_entitlements");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_entitlements_tenant_id_id");
b.HasIndex("UserId")
.HasDatabaseName("ix_entitlements_user_id");
b.HasIndex("TenantId", "UserId", "Status", "ExpiresAt")
.HasDatabaseName("ix_entitlements_tenant_id_user_id_status_expires_at");
b.ToTable("entitlements", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Commerce.Order", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("AmountCents")
.HasColumnType("integer")
.HasColumnName("amount_cents");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("Days")
.HasColumnType("integer")
.HasColumnName("days");
b.Property("LegacyId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_id");
b.Property("LegacyPlanId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_plan_id");
b.Property("LegacyRegionId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_region_id");
b.Property("LegacyUserId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_user_id");
b.Property("OrderNo")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("order_no");
b.Property("PaidAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("paid_at");
b.Property("PayMethod")
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("pay_method");
b.Property("PayProvider")
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("pay_provider");
b.Property("PlanId")
.HasColumnType("uuid")
.HasColumnName("plan_id");
b.Property("ProductName")
.HasMaxLength(300)
.HasColumnType("character varying(300)")
.HasColumnName("product_name");
b.Property("ProductType")
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("product_type");
b.Property("RawPayload")
.ValueGeneratedOnAdd()
.HasColumnType("jsonb")
.HasColumnName("raw_payload")
.HasDefaultValueSql("'{}'::jsonb");
b.Property("RegionId")
.HasColumnType("uuid")
.HasColumnName("region_id");
b.Property("Status")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("character varying(32)")
.HasColumnName("status");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.Property("TradeNo")
.HasMaxLength(200)
.HasColumnType("character varying(200)")
.HasColumnName("trade_no");
b.Property("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("updated_at")
.HasDefaultValueSql("now()");
b.Property("UserId")
.HasColumnType("uuid")
.HasColumnName("user_id");
b.HasKey("Id")
.HasName("pk_orders");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_orders_tenant_id_id");
b.HasIndex("UserId")
.HasDatabaseName("ix_orders_user_id");
b.HasIndex("TenantId", "LegacyId")
.IsUnique()
.HasDatabaseName("ix_orders_tenant_id_legacy_id");
b.HasIndex("TenantId", "OrderNo")
.IsUnique()
.HasDatabaseName("ix_orders_tenant_id_order_no");
b.HasIndex("TenantId", "PlanId")
.HasDatabaseName("ix_orders_tenant_id_plan_id");
b.HasIndex("TenantId", "RegionId")
.HasDatabaseName("ix_orders_tenant_id_region_id");
b.HasIndex("TenantId", "UserId", "CreatedAt")
.HasDatabaseName("ix_orders_tenant_id_user_id_created_at");
b.ToTable("orders", null, t =>
{
t.HasCheckConstraint("ck_orders_amount", "amount_cents >= 0");
});
});
modelBuilder.Entity("Tiku.Domain.Commerce.OrderItem", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("ItemId")
.HasColumnType("uuid")
.HasColumnName("item_id");
b.Property("ItemType")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("item_type");
b.Property("LegacyId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_id");
b.Property("Metadata")
.ValueGeneratedOnAdd()
.HasColumnType("jsonb")
.HasColumnName("metadata")
.HasDefaultValueSql("'{}'::jsonb");
b.Property("Name")
.IsRequired()
.HasMaxLength(300)
.HasColumnType("character varying(300)")
.HasColumnName("name");
b.Property("OrderId")
.HasColumnType("uuid")
.HasColumnName("order_id");
b.Property("Quantity")
.HasColumnType("integer")
.HasColumnName("quantity");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.Property("TotalAmountCents")
.HasColumnType("integer")
.HasColumnName("total_amount_cents");
b.Property("UnitAmountCents")
.HasColumnType("integer")
.HasColumnName("unit_amount_cents");
b.Property("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("updated_at")
.HasDefaultValueSql("now()");
b.HasKey("Id")
.HasName("pk_order_items");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_order_items_tenant_id_id");
b.HasIndex("TenantId", "LegacyId")
.IsUnique()
.HasDatabaseName("ix_order_items_tenant_id_legacy_id");
b.HasIndex("TenantId", "OrderId")
.HasDatabaseName("ix_order_items_tenant_id_order_id");
b.ToTable("order_items", null, t =>
{
t.HasCheckConstraint("ck_order_items_amounts", "unit_amount_cents >= 0 and total_amount_cents >= 0");
t.HasCheckConstraint("ck_order_items_quantity", "quantity > 0");
});
});
modelBuilder.Entity("Tiku.Domain.Commerce.Payment", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("AmountCents")
.HasColumnType("integer")
.HasColumnName("amount_cents");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("LegacyId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_id");
b.Property("LegacyOrderId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_order_id");
b.Property("Method")
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("method");
b.Property("OrderId")
.HasColumnType("uuid")
.HasColumnName("order_id");
b.Property("PaidAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("paid_at");
b.Property("Provider")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("provider");
b.Property("ProviderTradeNo")
.HasMaxLength(200)
.HasColumnType("character varying(200)")
.HasColumnName("provider_trade_no");
b.Property("RawPayload")
.ValueGeneratedOnAdd()
.HasColumnType("jsonb")
.HasColumnName("raw_payload")
.HasDefaultValueSql("'{}'::jsonb");
b.Property("Status")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("character varying(32)")
.HasColumnName("status");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.Property("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("updated_at")
.HasDefaultValueSql("now()");
b.HasKey("Id")
.HasName("pk_payments");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_payments_tenant_id_id");
b.HasIndex("Provider", "ProviderTradeNo")
.IsUnique()
.HasDatabaseName("ix_payments_provider_provider_trade_no")
.HasFilter("provider_trade_no is not null");
b.HasIndex("TenantId", "LegacyId")
.IsUnique()
.HasDatabaseName("ix_payments_tenant_id_legacy_id");
b.HasIndex("TenantId", "OrderId", "UpdatedAt")
.HasDatabaseName("ix_payments_tenant_id_order_id_updated_at");
b.ToTable("payments", null, t =>
{
t.HasCheckConstraint("ck_payments_amount", "amount_cents >= 0");
});
});
modelBuilder.Entity("Tiku.Domain.Commerce.PaymentEvent", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("Error")
.HasColumnType("text")
.HasColumnName("error");
b.Property("EventId")
.HasMaxLength(200)
.HasColumnType("character varying(200)")
.HasColumnName("event_id");
b.Property("EventType")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("event_type");
b.Property("Payload")
.ValueGeneratedOnAdd()
.HasColumnType("jsonb")
.HasColumnName("payload")
.HasDefaultValueSql("'{}'::jsonb");
b.Property("PaymentId")
.HasColumnType("uuid")
.HasColumnName("payment_id");
b.Property("ProcessedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("processed_at");
b.Property("Provider")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("provider");
b.Property("SignatureValid")
.HasColumnType("boolean")
.HasColumnName("signature_valid");
b.Property("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.HasKey("Id")
.HasName("pk_payment_events");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_payment_events_tenant_id_id");
b.HasIndex("Provider", "EventId")
.IsUnique()
.HasDatabaseName("ix_payment_events_provider_event_id");
b.HasIndex("TenantId", "PaymentId")
.HasDatabaseName("ix_payment_events_tenant_id_payment_id");
b.ToTable("payment_events", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Commerce.Product", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property("Cover")
.HasMaxLength(2048)
.HasColumnType("character varying(2048)")
.HasColumnName("cover");
b.Property("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property("DetailImages")
.ValueGeneratedOnAdd()
.HasColumnType("jsonb")
.HasColumnName("detail_images")
.HasDefaultValueSql("'[]'::jsonb");
b.Property("LegacyId")
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("legacy_id");
b.Property("LegacyPriceText")
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("legacy_price_text");
b.Property("Link")
.HasMaxLength(2048)
.HasColumnType("character varying(2048)")
.HasColumnName("link");
b.Property("PreviewIframe")
.HasMaxLength(2048)
.HasColumnType("character varying(2048)")
.HasColumnName("preview_iframe");
b.Property("RegionId")
.HasColumnType("uuid")
.HasColumnName("region_id");
b.Property("SortOrder")
.HasColumnType("integer")
.HasColumnName("sort_order");
b.Property("Tags")
.ValueGeneratedOnAdd()
.HasColumnType("jsonb")
.HasColumnName("tags")
.HasDefaultValueSql("'[]'::jsonb");
b.Property