2177 lines
92 KiB
C#
2177 lines
92 KiB
C#
// <auto-generated />
|
|
using System;
|
|
using System.Text.Json;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
using Microsoft.EntityFrameworkCore.Migrations;
|
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|
using Tiku.Infrastructure.Persistence;
|
|
|
|
#nullable disable
|
|
|
|
namespace Tiku.Infrastructure.Persistence.Migrations
|
|
{
|
|
[DbContext(typeof(TikuDbContext))]
|
|
[Migration("20260725205004_InitialCore")]
|
|
partial class InitialCore
|
|
{
|
|
/// <inheritdoc />
|
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
{
|
|
#pragma warning disable 612, 618
|
|
modelBuilder
|
|
.HasAnnotation("ProductVersion", "10.0.10")
|
|
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
|
|
|
NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "citext");
|
|
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Catalog.Category", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<string>("CategoryType")
|
|
.HasMaxLength(32)
|
|
.HasColumnType("character varying(32)")
|
|
.HasColumnName("category_type");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<bool>("IsActive")
|
|
.HasColumnType("boolean")
|
|
.HasColumnName("is_active");
|
|
|
|
b.Property<string>("LegacyId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_id");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(300)
|
|
.HasColumnType("character varying(300)")
|
|
.HasColumnName("name");
|
|
|
|
b.Property<Guid?>("NodeId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("node_id");
|
|
|
|
b.Property<int>("SortOrder")
|
|
.HasColumnType("integer")
|
|
.HasColumnName("sort_order");
|
|
|
|
b.Property<Guid?>("SubjectId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("subject_id");
|
|
|
|
b.Property<int?>("SvipQuestionLimit")
|
|
.HasColumnType("integer")
|
|
.HasColumnName("svip_question_limit");
|
|
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<DateTimeOffset>("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<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<string>("Description")
|
|
.HasColumnType("text")
|
|
.HasColumnName("description");
|
|
|
|
b.Property<bool>("IsActive")
|
|
.HasColumnType("boolean")
|
|
.HasColumnName("is_active");
|
|
|
|
b.Property<string>("LegacyId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_id");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(300)
|
|
.HasColumnType("character varying(300)")
|
|
.HasColumnName("name");
|
|
|
|
b.Property<Guid?>("RegionId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("region_id");
|
|
|
|
b.Property<Guid?>("SchoolId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("school_id");
|
|
|
|
b.Property<int>("SortOrder")
|
|
.HasColumnType("integer")
|
|
.HasColumnName("sort_order");
|
|
|
|
b.Property<string>("StudyTips")
|
|
.HasColumnType("text")
|
|
.HasColumnName("study_tips");
|
|
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<DateTimeOffset>("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<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<bool>("IsActive")
|
|
.HasColumnType("boolean")
|
|
.HasColumnName("is_active");
|
|
|
|
b.Property<string>("LegacyId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_id");
|
|
|
|
b.Property<string>("LegacyModuleId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_module_id");
|
|
|
|
b.Property<string>("LegacyParentId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_parent_id");
|
|
|
|
b.Property<JsonElement>("Metadata")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("metadata")
|
|
.HasDefaultValueSql("'{}'::jsonb");
|
|
|
|
b.Property<Guid?>("ModuleId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("module_id");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(300)
|
|
.HasColumnType("character varying(300)")
|
|
.HasColumnName("name");
|
|
|
|
b.Property<Guid?>("ParentId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("parent_id");
|
|
|
|
b.Property<string>("Path")
|
|
.HasMaxLength(1000)
|
|
.HasColumnType("character varying(1000)")
|
|
.HasColumnName("path");
|
|
|
|
b.Property<Guid?>("RegionId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("region_id");
|
|
|
|
b.Property<int>("SortOrder")
|
|
.HasColumnType("integer")
|
|
.HasColumnName("sort_order");
|
|
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<string>("Type")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("character varying(32)")
|
|
.HasColumnName("type");
|
|
|
|
b.Property<DateTimeOffset>("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<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<string>("Code")
|
|
.HasMaxLength(50)
|
|
.HasColumnType("character varying(50)")
|
|
.HasColumnName("code");
|
|
|
|
b.Property<JsonElement>("Config")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("config")
|
|
.HasDefaultValueSql("'{}'::jsonb");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<string>("FullName")
|
|
.HasMaxLength(300)
|
|
.HasColumnType("character varying(300)")
|
|
.HasColumnName("full_name");
|
|
|
|
b.Property<string>("Icon")
|
|
.HasMaxLength(2048)
|
|
.HasColumnType("character varying(2048)")
|
|
.HasColumnName("icon");
|
|
|
|
b.Property<bool>("IsActive")
|
|
.HasColumnType("boolean")
|
|
.HasColumnName("is_active");
|
|
|
|
b.Property<bool>("IsHot")
|
|
.HasColumnType("boolean")
|
|
.HasColumnName("is_hot");
|
|
|
|
b.Property<string>("LegacyId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_id");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(200)
|
|
.HasColumnType("character varying(200)")
|
|
.HasColumnName("name");
|
|
|
|
b.Property<string>("Pinyin")
|
|
.HasMaxLength(255)
|
|
.HasColumnType("character varying(255)")
|
|
.HasColumnName("pinyin");
|
|
|
|
b.Property<string>("ShortName")
|
|
.HasMaxLength(100)
|
|
.HasColumnType("character varying(100)")
|
|
.HasColumnName("short_name");
|
|
|
|
b.Property<int>("SortOrder")
|
|
.HasColumnType("integer")
|
|
.HasColumnName("sort_order");
|
|
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<DateTimeOffset>("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<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<string>("Color")
|
|
.HasMaxLength(50)
|
|
.HasColumnType("character varying(50)")
|
|
.HasColumnName("color");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<string>("Description")
|
|
.HasColumnType("text")
|
|
.HasColumnName("description");
|
|
|
|
b.Property<string>("Icon")
|
|
.HasMaxLength(2048)
|
|
.HasColumnType("character varying(2048)")
|
|
.HasColumnName("icon");
|
|
|
|
b.Property<bool>("IsActive")
|
|
.HasColumnType("boolean")
|
|
.HasColumnName("is_active");
|
|
|
|
b.Property<bool>("IsPrimarySchoolModule")
|
|
.HasColumnType("boolean")
|
|
.HasColumnName("is_primary_school_module");
|
|
|
|
b.Property<string>("LegacyId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_id");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(200)
|
|
.HasColumnType("character varying(200)")
|
|
.HasColumnName("name");
|
|
|
|
b.Property<Guid?>("RegionId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("region_id");
|
|
|
|
b.Property<string>("Route")
|
|
.HasMaxLength(500)
|
|
.HasColumnType("character varying(500)")
|
|
.HasColumnName("route");
|
|
|
|
b.Property<int>("SortOrder")
|
|
.HasColumnType("integer")
|
|
.HasColumnName("sort_order");
|
|
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<string>("TextColor")
|
|
.HasMaxLength(50)
|
|
.HasColumnType("character varying(50)")
|
|
.HasColumnName("text_color");
|
|
|
|
b.Property<string>("Type")
|
|
.HasMaxLength(50)
|
|
.HasColumnType("character varying(50)")
|
|
.HasColumnName("type");
|
|
|
|
b.Property<DateTimeOffset>("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<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<string>("LegacyId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_id");
|
|
|
|
b.Property<JsonElement>("Metadata")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("metadata")
|
|
.HasDefaultValueSql("'{}'::jsonb");
|
|
|
|
b.Property<Guid?>("ModuleId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("module_id");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(300)
|
|
.HasColumnType("character varying(300)")
|
|
.HasColumnName("name");
|
|
|
|
b.Property<string>("ProfessionalExamDate")
|
|
.HasMaxLength(255)
|
|
.HasColumnType("character varying(255)")
|
|
.HasColumnName("professional_exam_date");
|
|
|
|
b.Property<Guid?>("RegionId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("region_id");
|
|
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<DateTimeOffset>("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<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<string>("Description")
|
|
.HasColumnType("text")
|
|
.HasColumnName("description");
|
|
|
|
b.Property<string>("Icon")
|
|
.HasMaxLength(2048)
|
|
.HasColumnType("character varying(2048)")
|
|
.HasColumnName("icon");
|
|
|
|
b.Property<bool>("IsActive")
|
|
.HasColumnType("boolean")
|
|
.HasColumnName("is_active");
|
|
|
|
b.Property<string>("LegacyId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_id");
|
|
|
|
b.Property<Guid?>("MajorId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("major_id");
|
|
|
|
b.Property<JsonElement>("MajorLegacyIds")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("major_legacy_ids")
|
|
.HasDefaultValueSql("'[]'::jsonb");
|
|
|
|
b.Property<Guid?>("ModuleId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("module_id");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(300)
|
|
.HasColumnType("character varying(300)")
|
|
.HasColumnName("name");
|
|
|
|
b.Property<Guid?>("NodeId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("node_id");
|
|
|
|
b.Property<Guid?>("RegionId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("region_id");
|
|
|
|
b.Property<Guid?>("SchoolId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("school_id");
|
|
|
|
b.Property<int>("SortOrder")
|
|
.HasColumnType("integer")
|
|
.HasColumnName("sort_order");
|
|
|
|
b.Property<JsonElement>("Stats")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("stats")
|
|
.HasDefaultValueSql("'{}'::jsonb");
|
|
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<string>("Type")
|
|
.HasMaxLength(32)
|
|
.HasColumnType("character varying(32)")
|
|
.HasColumnName("type");
|
|
|
|
b.Property<DateTimeOffset>("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.Identity.StudentProfile", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<DateOnly?>("LastCheckInDate")
|
|
.HasColumnType("date")
|
|
.HasColumnName("last_check_in_date");
|
|
|
|
b.Property<string>("LegacyUserId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_user_id");
|
|
|
|
b.Property<int>("MasteredWordsCount")
|
|
.HasColumnType("integer")
|
|
.HasColumnName("mastered_words_count");
|
|
|
|
b.Property<JsonElement>("ModuleSelections")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("module_selections")
|
|
.HasDefaultValueSql("'{}'::jsonb");
|
|
|
|
b.Property<JsonElement>("Progress")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("progress")
|
|
.HasDefaultValueSql("'{}'::jsonb");
|
|
|
|
b.Property<int>("QuestionsAnsweredToday")
|
|
.HasColumnType("integer")
|
|
.HasColumnName("questions_answered_today");
|
|
|
|
b.Property<JsonElement>("RecentActivities")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("recent_activities")
|
|
.HasDefaultValueSql("'[]'::jsonb");
|
|
|
|
b.Property<Guid?>("RegionId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("region_id");
|
|
|
|
b.Property<Guid?>("SelectedMajorId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("selected_major_id");
|
|
|
|
b.Property<Guid?>("SelectedSchoolId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("selected_school_id");
|
|
|
|
b.Property<JsonElement>("Stats")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("stats")
|
|
.HasDefaultValueSql("'{}'::jsonb");
|
|
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<DateTimeOffset>("UpdatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("updated_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("user_id");
|
|
|
|
b.HasKey("Id")
|
|
.HasName("pk_student_profiles");
|
|
|
|
b.HasAlternateKey("TenantId", "Id")
|
|
.HasName("ak_student_profiles_tenant_id_id");
|
|
|
|
b.HasIndex("UserId")
|
|
.HasDatabaseName("ix_student_profiles_user_id");
|
|
|
|
b.HasIndex("TenantId", "RegionId")
|
|
.HasDatabaseName("ix_student_profiles_tenant_id_region_id");
|
|
|
|
b.HasIndex("TenantId", "SelectedMajorId")
|
|
.HasDatabaseName("ix_student_profiles_tenant_id_selected_major_id");
|
|
|
|
b.HasIndex("TenantId", "SelectedSchoolId")
|
|
.HasDatabaseName("ix_student_profiles_tenant_id_selected_school_id");
|
|
|
|
b.HasIndex("TenantId", "UserId")
|
|
.IsUnique()
|
|
.HasDatabaseName("ix_student_profiles_tenant_id_user_id");
|
|
|
|
b.ToTable("student_profiles", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Identity.User", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<string>("AvatarUrl")
|
|
.HasMaxLength(2048)
|
|
.HasColumnType("character varying(2048)")
|
|
.HasColumnName("avatar_url");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<string>("Email")
|
|
.HasMaxLength(320)
|
|
.HasColumnType("citext")
|
|
.HasColumnName("email");
|
|
|
|
b.Property<DateTimeOffset?>("LastSeenAt")
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("last_seen_at");
|
|
|
|
b.Property<string>("LegacyId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_id");
|
|
|
|
b.Property<string>("LegacyPasswordHash")
|
|
.HasMaxLength(512)
|
|
.HasColumnType("character varying(512)")
|
|
.HasColumnName("legacy_password_hash");
|
|
|
|
b.Property<string>("Name")
|
|
.HasMaxLength(200)
|
|
.HasColumnType("character varying(200)")
|
|
.HasColumnName("name");
|
|
|
|
b.Property<bool>("PasswordMigrationRequired")
|
|
.HasColumnType("boolean")
|
|
.HasColumnName("password_migration_required");
|
|
|
|
b.Property<string>("Phone")
|
|
.HasMaxLength(32)
|
|
.HasColumnType("character varying(32)")
|
|
.HasColumnName("phone");
|
|
|
|
b.Property<string>("PrimaryRole")
|
|
.IsRequired()
|
|
.HasMaxLength(50)
|
|
.HasColumnType("character varying(50)")
|
|
.HasColumnName("primary_role");
|
|
|
|
b.Property<JsonElement>("RawProfile")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("raw_profile")
|
|
.HasDefaultValueSql("'{}'::jsonb");
|
|
|
|
b.Property<int>("Score")
|
|
.HasColumnType("integer")
|
|
.HasColumnName("score");
|
|
|
|
b.Property<DateTimeOffset>("UpdatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("updated_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<string>("Username")
|
|
.HasMaxLength(100)
|
|
.HasColumnType("character varying(100)")
|
|
.HasColumnName("username");
|
|
|
|
b.HasKey("Id")
|
|
.HasName("pk_users");
|
|
|
|
b.HasIndex("Email")
|
|
.IsUnique()
|
|
.HasDatabaseName("ix_users_email");
|
|
|
|
b.HasIndex("LegacyId")
|
|
.IsUnique()
|
|
.HasDatabaseName("ix_users_legacy_id");
|
|
|
|
b.HasIndex("Phone")
|
|
.IsUnique()
|
|
.HasDatabaseName("ix_users_phone");
|
|
|
|
b.HasIndex("Username")
|
|
.IsUnique()
|
|
.HasDatabaseName("ix_users_username");
|
|
|
|
b.ToTable("users", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Identity.UserIdentity", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<string>("Email")
|
|
.HasMaxLength(320)
|
|
.HasColumnType("citext")
|
|
.HasColumnName("email");
|
|
|
|
b.Property<string>("OpenId")
|
|
.HasMaxLength(255)
|
|
.HasColumnType("character varying(255)")
|
|
.HasColumnName("open_id");
|
|
|
|
b.Property<string>("Phone")
|
|
.HasMaxLength(32)
|
|
.HasColumnType("character varying(32)")
|
|
.HasColumnName("phone");
|
|
|
|
b.Property<string>("Provider")
|
|
.IsRequired()
|
|
.HasMaxLength(50)
|
|
.HasColumnType("character varying(50)")
|
|
.HasColumnName("provider");
|
|
|
|
b.Property<string>("ProviderSubject")
|
|
.IsRequired()
|
|
.HasMaxLength(255)
|
|
.HasColumnType("character varying(255)")
|
|
.HasColumnName("provider_subject");
|
|
|
|
b.Property<JsonElement>("SecretPayload")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("secret_payload")
|
|
.HasDefaultValueSql("'{}'::jsonb");
|
|
|
|
b.Property<string>("UnionId")
|
|
.HasMaxLength(255)
|
|
.HasColumnType("character varying(255)")
|
|
.HasColumnName("union_id");
|
|
|
|
b.Property<DateTimeOffset>("UpdatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("updated_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("user_id");
|
|
|
|
b.HasKey("Id")
|
|
.HasName("pk_user_identities");
|
|
|
|
b.HasIndex("UserId")
|
|
.HasDatabaseName("ix_user_identities_user_id");
|
|
|
|
b.HasIndex("Provider", "ProviderSubject")
|
|
.IsUnique()
|
|
.HasDatabaseName("ix_user_identities_provider_provider_subject");
|
|
|
|
b.ToTable("user_identities", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Learning.AnswerRecord", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<string>("AnswerText")
|
|
.HasColumnType("text")
|
|
.HasColumnName("answer_text");
|
|
|
|
b.Property<DateTimeOffset>("AnsweredAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("answered_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<bool?>("IsCorrect")
|
|
.HasColumnType("boolean")
|
|
.HasColumnName("is_correct");
|
|
|
|
b.Property<string>("LegacyCategoryId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_category_id");
|
|
|
|
b.Property<string>("LegacyId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_id");
|
|
|
|
b.Property<string>("LegacyQuestionId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_question_id");
|
|
|
|
b.Property<Guid?>("PracticeSessionId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("practice_session_id");
|
|
|
|
b.Property<Guid?>("QuestionId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("question_id");
|
|
|
|
b.Property<Guid?>("QuestionVersionId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("question_version_id");
|
|
|
|
b.Property<JsonElement>("SelectedOptions")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("selected_options")
|
|
.HasDefaultValueSql("'[]'::jsonb");
|
|
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("user_id");
|
|
|
|
b.HasKey("Id")
|
|
.HasName("pk_answer_records");
|
|
|
|
b.HasAlternateKey("TenantId", "Id")
|
|
.HasName("ak_answer_records_tenant_id_id");
|
|
|
|
b.HasIndex("UserId")
|
|
.HasDatabaseName("ix_answer_records_user_id");
|
|
|
|
b.HasIndex("TenantId", "LegacyId")
|
|
.IsUnique()
|
|
.HasDatabaseName("ix_answer_records_tenant_id_legacy_id");
|
|
|
|
b.HasIndex("TenantId", "QuestionId")
|
|
.HasDatabaseName("ix_answer_records_tenant_id_question_id");
|
|
|
|
b.HasIndex("TenantId", "QuestionId", "QuestionVersionId")
|
|
.HasDatabaseName("ix_answer_records_tenant_id_question_id_question_version_id");
|
|
|
|
b.HasIndex("TenantId", "UserId", "PracticeSessionId")
|
|
.HasDatabaseName("ix_answer_records_tenant_id_user_id_practice_session_id");
|
|
|
|
b.ToTable("answer_records", null, t =>
|
|
{
|
|
t.HasCheckConstraint("ck_answer_records_version_requires_question", "question_version_id is null or question_id is not null");
|
|
});
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Learning.FavoriteQuestion", b =>
|
|
{
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("user_id");
|
|
|
|
b.Property<Guid>("QuestionId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("question_id");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<string>("Source")
|
|
.IsRequired()
|
|
.HasMaxLength(50)
|
|
.HasColumnType("character varying(50)")
|
|
.HasColumnName("source");
|
|
|
|
b.HasKey("TenantId", "UserId", "QuestionId")
|
|
.HasName("pk_favorite_questions");
|
|
|
|
b.HasIndex("UserId")
|
|
.HasDatabaseName("ix_favorite_questions_user_id");
|
|
|
|
b.HasIndex("TenantId", "QuestionId")
|
|
.HasDatabaseName("ix_favorite_questions_tenant_id_question_id");
|
|
|
|
b.ToTable("favorite_questions", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Learning.PracticeSession", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<DateTimeOffset?>("FinishedAt")
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("finished_at");
|
|
|
|
b.Property<JsonElement>("Metadata")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("metadata")
|
|
.HasDefaultValueSql("'{}'::jsonb");
|
|
|
|
b.Property<string>("Mode")
|
|
.IsRequired()
|
|
.HasMaxLength(50)
|
|
.HasColumnType("character varying(50)")
|
|
.HasColumnName("mode");
|
|
|
|
b.Property<DateTimeOffset>("StartedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("started_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<Guid?>("TargetId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("target_id");
|
|
|
|
b.Property<string>("TargetType")
|
|
.HasMaxLength(50)
|
|
.HasColumnType("character varying(50)")
|
|
.HasColumnName("target_type");
|
|
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("user_id");
|
|
|
|
b.HasKey("Id")
|
|
.HasName("pk_practice_sessions");
|
|
|
|
b.HasAlternateKey("TenantId", "Id")
|
|
.HasName("ak_practice_sessions_tenant_id_id");
|
|
|
|
b.HasAlternateKey("TenantId", "UserId", "Id")
|
|
.HasName("ak_practice_sessions_tenant_id_user_id_id");
|
|
|
|
b.HasIndex("UserId")
|
|
.HasDatabaseName("ix_practice_sessions_user_id");
|
|
|
|
b.HasIndex("TenantId", "UserId", "StartedAt")
|
|
.HasDatabaseName("ix_practice_sessions_tenant_id_user_id_started_at");
|
|
|
|
b.ToTable("practice_sessions", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Learning.RecentPractice", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<string>("Color")
|
|
.HasMaxLength(50)
|
|
.HasColumnType("character varying(50)")
|
|
.HasColumnName("color");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<DateTimeOffset?>("LastAccessAt")
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("last_access_at");
|
|
|
|
b.Property<DateTimeOffset?>("LastPracticeAt")
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("last_practice_at");
|
|
|
|
b.Property<string>("LegacyId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_id");
|
|
|
|
b.Property<JsonElement>("Metadata")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("metadata")
|
|
.HasDefaultValueSql("'{}'::jsonb");
|
|
|
|
b.Property<string>("PracticeType")
|
|
.HasMaxLength(50)
|
|
.HasColumnType("character varying(50)")
|
|
.HasColumnName("practice_type");
|
|
|
|
b.Property<int>("Progress")
|
|
.HasColumnType("integer")
|
|
.HasColumnName("progress");
|
|
|
|
b.Property<string>("TargetLegacyId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("target_legacy_id");
|
|
|
|
b.Property<string>("TargetName")
|
|
.HasMaxLength(300)
|
|
.HasColumnType("character varying(300)")
|
|
.HasColumnName("target_name");
|
|
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<DateTimeOffset>("UpdatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("updated_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<Guid?>("UserId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("user_id");
|
|
|
|
b.HasKey("Id")
|
|
.HasName("pk_recent_practices");
|
|
|
|
b.HasAlternateKey("TenantId", "Id")
|
|
.HasName("ak_recent_practices_tenant_id_id");
|
|
|
|
b.HasIndex("UserId")
|
|
.HasDatabaseName("ix_recent_practices_user_id");
|
|
|
|
b.HasIndex("TenantId", "LegacyId")
|
|
.IsUnique()
|
|
.HasDatabaseName("ix_recent_practices_tenant_id_legacy_id");
|
|
|
|
b.HasIndex("TenantId", "UserId", "LastAccessAt")
|
|
.HasDatabaseName("ix_recent_practices_tenant_id_user_id_last_access_at");
|
|
|
|
b.ToTable("recent_practices", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Learning.WrongQuestion", b =>
|
|
{
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("user_id");
|
|
|
|
b.Property<Guid>("QuestionId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("question_id");
|
|
|
|
b.Property<DateTimeOffset>("LastWrongAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("last_wrong_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<DateTimeOffset?>("ResolvedAt")
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("resolved_at");
|
|
|
|
b.Property<int>("WrongCount")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("integer")
|
|
.HasDefaultValue(1)
|
|
.HasColumnName("wrong_count");
|
|
|
|
b.HasKey("TenantId", "UserId", "QuestionId")
|
|
.HasName("pk_wrong_questions");
|
|
|
|
b.HasIndex("UserId")
|
|
.HasDatabaseName("ix_wrong_questions_user_id");
|
|
|
|
b.HasIndex("TenantId", "QuestionId")
|
|
.HasDatabaseName("ix_wrong_questions_tenant_id_question_id");
|
|
|
|
b.ToTable("wrong_questions", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.QuestionBanks.Question", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<Guid?>("CategoryId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("category_id");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<Guid?>("CurrentVersionId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("current_version_id");
|
|
|
|
b.Property<int?>("Difficulty")
|
|
.HasColumnType("integer")
|
|
.HasColumnName("difficulty");
|
|
|
|
b.Property<bool>("HasVideoExplanation")
|
|
.HasColumnType("boolean")
|
|
.HasColumnName("has_video_explanation");
|
|
|
|
b.Property<string>("LegacyCategoryId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_category_id");
|
|
|
|
b.Property<string>("LegacyId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_id");
|
|
|
|
b.Property<string>("LegacyNodeId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_node_id");
|
|
|
|
b.Property<string>("LegacySubjectId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_subject_id");
|
|
|
|
b.Property<string>("MediaUrl")
|
|
.HasMaxLength(2048)
|
|
.HasColumnType("character varying(2048)")
|
|
.HasColumnName("media_url");
|
|
|
|
b.Property<Guid?>("NodeId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("node_id");
|
|
|
|
b.Property<Guid?>("QuestionBankId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("question_bank_id");
|
|
|
|
b.Property<string>("Status")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("character varying(32)")
|
|
.HasColumnName("status");
|
|
|
|
b.Property<Guid?>("SubjectId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("subject_id");
|
|
|
|
b.Property<JsonElement>("Tags")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("tags")
|
|
.HasDefaultValueSql("'[]'::jsonb");
|
|
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<string>("Type")
|
|
.IsRequired()
|
|
.HasMaxLength(50)
|
|
.HasColumnType("character varying(50)")
|
|
.HasColumnName("type");
|
|
|
|
b.Property<string>("TypeLabel")
|
|
.HasMaxLength(100)
|
|
.HasColumnType("character varying(100)")
|
|
.HasColumnName("type_label");
|
|
|
|
b.Property<DateTimeOffset>("UpdatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("updated_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.HasKey("Id")
|
|
.HasName("pk_questions");
|
|
|
|
b.HasAlternateKey("TenantId", "Id")
|
|
.HasName("ak_questions_tenant_id_id");
|
|
|
|
b.HasIndex("TenantId", "CategoryId")
|
|
.HasDatabaseName("ix_questions_tenant_id_category_id");
|
|
|
|
b.HasIndex("TenantId", "LegacyId")
|
|
.IsUnique()
|
|
.HasDatabaseName("ix_questions_tenant_id_legacy_id");
|
|
|
|
b.HasIndex("TenantId", "NodeId")
|
|
.HasDatabaseName("ix_questions_tenant_id_node_id");
|
|
|
|
b.HasIndex("TenantId", "QuestionBankId")
|
|
.HasDatabaseName("ix_questions_tenant_id_question_bank_id");
|
|
|
|
b.HasIndex("TenantId", "SubjectId")
|
|
.HasDatabaseName("ix_questions_tenant_id_subject_id");
|
|
|
|
b.HasIndex("TenantId", "Id", "CurrentVersionId")
|
|
.HasDatabaseName("ix_questions_tenant_id_id_current_version_id");
|
|
|
|
b.ToTable("questions", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.QuestionBanks.QuestionBank", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<JsonElement>("Metadata")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("metadata")
|
|
.HasDefaultValueSql("'{}'::jsonb");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(300)
|
|
.HasColumnType("character varying(300)")
|
|
.HasColumnName("name");
|
|
|
|
b.Property<Guid?>("RegionId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("region_id");
|
|
|
|
b.Property<string>("SourceScope")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("character varying(32)")
|
|
.HasColumnName("source_scope");
|
|
|
|
b.Property<string>("Status")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("character varying(32)")
|
|
.HasColumnName("status");
|
|
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<DateTimeOffset>("UpdatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("updated_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.HasKey("Id")
|
|
.HasName("pk_question_banks");
|
|
|
|
b.HasAlternateKey("TenantId", "Id")
|
|
.HasName("ak_question_banks_tenant_id_id");
|
|
|
|
b.HasIndex("TenantId", "RegionId")
|
|
.HasDatabaseName("ix_question_banks_tenant_id_region_id");
|
|
|
|
b.ToTable("question_banks", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.QuestionBanks.QuestionVersion", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<string>("AnswerText")
|
|
.HasColumnType("text")
|
|
.HasColumnName("answer_text");
|
|
|
|
b.Property<string>("CodeLang")
|
|
.HasMaxLength(50)
|
|
.HasColumnType("character varying(50)")
|
|
.HasColumnName("code_lang");
|
|
|
|
b.Property<string>("CodeTemplate")
|
|
.HasColumnType("text")
|
|
.HasColumnName("code_template");
|
|
|
|
b.Property<string>("Content")
|
|
.HasColumnType("text")
|
|
.HasColumnName("content");
|
|
|
|
b.Property<int?>("CorrectOptionIndex")
|
|
.HasColumnType("integer")
|
|
.HasColumnName("correct_option_index");
|
|
|
|
b.Property<JsonElement>("CorrectOptionIndices")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("correct_option_indices")
|
|
.HasDefaultValueSql("'[]'::jsonb");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<Guid?>("CreatedBy")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("created_by");
|
|
|
|
b.Property<string>("Explanation")
|
|
.HasColumnType("text")
|
|
.HasColumnName("explanation");
|
|
|
|
b.Property<JsonElement>("Options")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("options")
|
|
.HasDefaultValueSql("'[]'::jsonb");
|
|
|
|
b.Property<Guid>("QuestionId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("question_id");
|
|
|
|
b.Property<string>("SourceHash")
|
|
.HasMaxLength(128)
|
|
.HasColumnType("character varying(128)")
|
|
.HasColumnName("source_hash");
|
|
|
|
b.Property<JsonElement>("SubQuestions")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("sub_questions")
|
|
.HasDefaultValueSql("'[]'::jsonb");
|
|
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<int>("VersionNo")
|
|
.HasColumnType("integer")
|
|
.HasColumnName("version_no");
|
|
|
|
b.HasKey("Id")
|
|
.HasName("pk_question_versions");
|
|
|
|
b.HasAlternateKey("TenantId", "Id")
|
|
.HasName("ak_question_versions_tenant_id_id");
|
|
|
|
b.HasAlternateKey("TenantId", "QuestionId", "Id")
|
|
.HasName("ak_question_versions_tenant_id_question_id_id");
|
|
|
|
b.HasIndex("CreatedBy")
|
|
.HasDatabaseName("ix_question_versions_created_by");
|
|
|
|
b.HasIndex("QuestionId", "VersionNo")
|
|
.IsUnique()
|
|
.HasDatabaseName("ix_question_versions_question_id_version_no");
|
|
|
|
b.ToTable("question_versions", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Tenancy.Tenant", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<string>("BillingStatus")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("character varying(32)")
|
|
.HasColumnName("billing_status");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<string>("LegacyId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("legacy_id");
|
|
|
|
b.Property<string>("LegalName")
|
|
.HasMaxLength(300)
|
|
.HasColumnType("character varying(300)")
|
|
.HasColumnName("legal_name");
|
|
|
|
b.Property<JsonElement>("Metadata")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("metadata")
|
|
.HasDefaultValueSql("'{}'::jsonb");
|
|
|
|
b.Property<string>("Mode")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("character varying(32)")
|
|
.HasColumnName("mode");
|
|
|
|
b.Property<string>("Name")
|
|
.IsRequired()
|
|
.HasMaxLength(200)
|
|
.HasColumnType("character varying(200)")
|
|
.HasColumnName("name");
|
|
|
|
b.Property<Guid?>("OwnerUserId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("owner_user_id");
|
|
|
|
b.Property<string>("Slug")
|
|
.IsRequired()
|
|
.HasMaxLength(100)
|
|
.HasColumnType("citext")
|
|
.HasColumnName("slug");
|
|
|
|
b.Property<string>("Status")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("character varying(32)")
|
|
.HasColumnName("status");
|
|
|
|
b.Property<DateTimeOffset>("UpdatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("updated_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.HasKey("Id")
|
|
.HasName("pk_tenants");
|
|
|
|
b.HasIndex("LegacyId")
|
|
.IsUnique()
|
|
.HasDatabaseName("ix_tenants_legacy_id");
|
|
|
|
b.HasIndex("OwnerUserId")
|
|
.HasDatabaseName("ix_tenants_owner_user_id");
|
|
|
|
b.HasIndex("Slug")
|
|
.IsUnique()
|
|
.HasDatabaseName("ix_tenants_slug");
|
|
|
|
b.ToTable("tenants", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Tenancy.TenantMembership", b =>
|
|
{
|
|
b.Property<Guid>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("id")
|
|
.HasDefaultValueSql("gen_random_uuid()");
|
|
|
|
b.Property<DateTimeOffset>("CreatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<string>("LegacyRole")
|
|
.HasMaxLength(50)
|
|
.HasColumnType("character varying(50)")
|
|
.HasColumnName("legacy_role");
|
|
|
|
b.Property<JsonElement>("Permissions")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("jsonb")
|
|
.HasColumnName("permissions")
|
|
.HasDefaultValueSql("'{}'::jsonb");
|
|
|
|
b.Property<string>("Role")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("character varying(32)")
|
|
.HasColumnName("role");
|
|
|
|
b.Property<string>("Status")
|
|
.IsRequired()
|
|
.HasMaxLength(32)
|
|
.HasColumnType("character varying(32)")
|
|
.HasColumnName("status");
|
|
|
|
b.Property<Guid>("TenantId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("tenant_id");
|
|
|
|
b.Property<DateTimeOffset>("UpdatedAt")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("updated_at")
|
|
.HasDefaultValueSql("now()");
|
|
|
|
b.Property<Guid>("UserId")
|
|
.HasColumnType("uuid")
|
|
.HasColumnName("user_id");
|
|
|
|
b.HasKey("Id")
|
|
.HasName("pk_tenant_memberships");
|
|
|
|
b.HasAlternateKey("TenantId", "Id")
|
|
.HasName("ak_tenant_memberships_tenant_id_id");
|
|
|
|
b.HasIndex("UserId")
|
|
.HasDatabaseName("ix_tenant_memberships_user_id");
|
|
|
|
b.HasIndex("TenantId", "UserId", "Role")
|
|
.IsUnique()
|
|
.HasDatabaseName("ix_tenant_memberships_tenant_id_user_id_role");
|
|
|
|
b.ToTable("tenant_memberships", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Catalog.Category", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_categories_tenants_tenant_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.ModuleNode", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "NodeId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_categories_module_nodes_tenant_id_node_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.Subject", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "SubjectId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_categories_subjects_tenant_id_subject_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Catalog.Major", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_majors_tenants_tenant_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.Region", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "RegionId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_majors_regions_tenant_id_region_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.School", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "SchoolId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_majors_schools_tenant_id_school_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Catalog.ModuleNode", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_module_nodes_tenants_tenant_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.RegionModule", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "ModuleId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_module_nodes_region_modules_tenant_id_module_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.ModuleNode", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "ParentId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_module_nodes_module_nodes_tenant_id_parent_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.Region", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "RegionId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_module_nodes_regions_tenant_id_region_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Catalog.Region", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_regions_tenants_tenant_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Catalog.RegionModule", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_region_modules_tenants_tenant_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.Region", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "RegionId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_region_modules_regions_tenant_id_region_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Catalog.School", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_schools_tenants_tenant_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.RegionModule", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "ModuleId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_schools_region_modules_tenant_id_module_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.Region", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "RegionId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_schools_regions_tenant_id_region_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Catalog.Subject", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_subjects_tenants_tenant_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.Major", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "MajorId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_subjects_majors_tenant_id_major_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.RegionModule", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "ModuleId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_subjects_region_modules_tenant_id_module_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.ModuleNode", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "NodeId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_subjects_module_nodes_tenant_id_node_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.Region", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "RegionId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_subjects_regions_tenant_id_region_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.School", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "SchoolId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_subjects_schools_tenant_id_school_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Identity.StudentProfile", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_student_profiles_tenants_tenant_id");
|
|
|
|
b.HasOne("Tiku.Domain.Identity.User", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_student_profiles_users_user_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.Region", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "RegionId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_student_profiles_regions_tenant_id_region_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.Major", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "SelectedMajorId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_student_profiles_majors_tenant_id_selected_major_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.School", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "SelectedSchoolId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_student_profiles_schools_tenant_id_selected_school_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Identity.UserIdentity", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Identity.User", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_user_identities_users_user_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Learning.AnswerRecord", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_answer_records_tenants_tenant_id");
|
|
|
|
b.HasOne("Tiku.Domain.Identity.User", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_answer_records_users_user_id");
|
|
|
|
b.HasOne("Tiku.Domain.QuestionBanks.Question", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "QuestionId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_answer_records_questions_tenant_id_question_id");
|
|
|
|
b.HasOne("Tiku.Domain.QuestionBanks.QuestionVersion", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "QuestionId", "QuestionVersionId")
|
|
.HasPrincipalKey("TenantId", "QuestionId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_answer_records_question_versions_tenant_id_question_id_ques~");
|
|
|
|
b.HasOne("Tiku.Domain.Learning.PracticeSession", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "UserId", "PracticeSessionId")
|
|
.HasPrincipalKey("TenantId", "UserId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_answer_records_practice_sessions_tenant_id_user_id_practice~");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Learning.FavoriteQuestion", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_favorite_questions_tenants_tenant_id");
|
|
|
|
b.HasOne("Tiku.Domain.Identity.User", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_favorite_questions_users_user_id");
|
|
|
|
b.HasOne("Tiku.Domain.QuestionBanks.Question", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "QuestionId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_favorite_questions_questions_tenant_id_question_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Learning.PracticeSession", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_practice_sessions_tenants_tenant_id");
|
|
|
|
b.HasOne("Tiku.Domain.Identity.User", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_practice_sessions_users_user_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Learning.RecentPractice", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_recent_practices_tenants_tenant_id");
|
|
|
|
b.HasOne("Tiku.Domain.Identity.User", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.HasConstraintName("fk_recent_practices_users_user_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Learning.WrongQuestion", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_wrong_questions_tenants_tenant_id");
|
|
|
|
b.HasOne("Tiku.Domain.Identity.User", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_wrong_questions_users_user_id");
|
|
|
|
b.HasOne("Tiku.Domain.QuestionBanks.Question", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "QuestionId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_wrong_questions_questions_tenant_id_question_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.QuestionBanks.Question", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_questions_tenants_tenant_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.Category", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "CategoryId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_questions_categories_tenant_id_category_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.ModuleNode", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "NodeId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_questions_module_nodes_tenant_id_node_id");
|
|
|
|
b.HasOne("Tiku.Domain.QuestionBanks.QuestionBank", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "QuestionBankId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_questions_question_banks_tenant_id_question_bank_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.Subject", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "SubjectId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_questions_subjects_tenant_id_subject_id");
|
|
|
|
b.HasOne("Tiku.Domain.QuestionBanks.QuestionVersion", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "Id", "CurrentVersionId")
|
|
.HasPrincipalKey("TenantId", "QuestionId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_questions_question_versions_tenant_id_id_current_version_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.QuestionBanks.QuestionBank", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_question_banks_tenants_tenant_id");
|
|
|
|
b.HasOne("Tiku.Domain.Catalog.Region", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "RegionId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Restrict)
|
|
.HasConstraintName("fk_question_banks_regions_tenant_id_region_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.QuestionBanks.QuestionVersion", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Identity.User", null)
|
|
.WithMany()
|
|
.HasForeignKey("CreatedBy")
|
|
.OnDelete(DeleteBehavior.SetNull)
|
|
.HasConstraintName("fk_question_versions_users_created_by");
|
|
|
|
b.HasOne("Tiku.Domain.QuestionBanks.Question", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId", "QuestionId")
|
|
.HasPrincipalKey("TenantId", "Id")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_question_versions_questions_tenant_id_question_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Tenancy.Tenant", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Identity.User", null)
|
|
.WithMany()
|
|
.HasForeignKey("OwnerUserId")
|
|
.OnDelete(DeleteBehavior.SetNull)
|
|
.HasConstraintName("fk_tenants_users_owner_user_id");
|
|
});
|
|
|
|
modelBuilder.Entity("Tiku.Domain.Tenancy.TenantMembership", b =>
|
|
{
|
|
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
|
|
.WithMany()
|
|
.HasForeignKey("TenantId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_tenant_memberships_tenants_tenant_id");
|
|
|
|
b.HasOne("Tiku.Domain.Identity.User", null)
|
|
.WithMany()
|
|
.HasForeignKey("UserId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired()
|
|
.HasConstraintName("fk_tenant_memberships_users_user_id");
|
|
});
|
|
#pragma warning restore 612, 618
|
|
}
|
|
}
|
|
}
|