// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using TakeoutSaaS.Infrastructure.Identity.Persistence;

#nullable disable

namespace TakeoutSaaS.Infrastructure.Migrations.IdentityDb
{
    [DbContext(typeof(IdentityDbContext))]
    [Migration("20251206021946_AddPermissionHierarchyFields")]
    partial class AddPermissionHierarchyFields
    {
        /// <inheritdoc />
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
                .HasAnnotation("ProductVersion", "10.0.0")
                .HasAnnotation("Relational:MaxIdentifierLength", 63);

            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);

            modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.IdentityUser", b =>
                {
                    b.Property<long>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("bigint")
                        .HasComment("实体唯一标识。");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));

                    b.Property<string>("Account")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)")
                        .HasComment("登录账号。");

                    b.Property<string>("Avatar")
                        .HasMaxLength(256)
                        .HasColumnType("character varying(256)")
                        .HasComment("头像地址。");

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("创建时间（UTC）。");

                    b.Property<long?>("CreatedBy")
                        .HasColumnType("bigint")
                        .HasComment("创建人用户标识，匿名或系统操作时为 null。");

                    b.Property<DateTime?>("DeletedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("软删除时间（UTC），未删除时为 null。");

                    b.Property<long?>("DeletedBy")
                        .HasColumnType("bigint")
                        .HasComment("删除人用户标识（软删除），未删除时为 null。");

                    b.Property<string>("DisplayName")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)")
                        .HasComment("展示名称。");

                    b.Property<long?>("MerchantId")
                        .HasColumnType("bigint")
                        .HasComment("所属商户（平台管理员为空）。");

                    b.Property<string>("PasswordHash")
                        .IsRequired()
                        .HasMaxLength(256)
                        .HasColumnType("character varying(256)")
                        .HasComment("密码哈希。");

                    b.Property<long>("TenantId")
                        .HasColumnType("bigint")
                        .HasComment("所属租户 ID。");

                    b.Property<DateTime?>("UpdatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("最近一次更新时间（UTC），从未更新时为 null。");

                    b.Property<long?>("UpdatedBy")
                        .HasColumnType("bigint")
                        .HasComment("最后更新人用户标识，匿名或系统操作时为 null。");

                    b.HasKey("Id");

                    b.HasIndex("TenantId");

                    b.HasIndex("TenantId", "Account")
                        .IsUnique();

                    b.ToTable("identity_users", null, t =>
                        {
                            t.HasComment("管理后台账户实体（平台管理员、租户管理员或商户员工）。");
                        });
                });

            modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.MenuDefinition", b =>
                {
                    b.Property<long>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("bigint")
                        .HasComment("实体唯一标识。");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));

                    b.Property<string>("AuthListJson")
                        .HasColumnType("text")
                        .HasComment("按钮权限列表 JSON（存储 MenuAuthItemDto 数组）。");

                    b.Property<string>("Component")
                        .IsRequired()
                        .HasMaxLength(256)
                        .HasColumnType("character varying(256)")
                        .HasComment("组件路径（不含 .vue）。");

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("创建时间（UTC）。");

                    b.Property<long?>("CreatedBy")
                        .HasColumnType("bigint")
                        .HasComment("创建人用户标识，匿名或系统操作时为 null。");

                    b.Property<DateTime?>("DeletedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("软删除时间（UTC），未删除时为 null。");

                    b.Property<long?>("DeletedBy")
                        .HasColumnType("bigint")
                        .HasComment("删除人用户标识（软删除），未删除时为 null。");

                    b.Property<string>("Icon")
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)")
                        .HasComment("图标标识。");

                    b.Property<bool>("IsIframe")
                        .HasColumnType("boolean")
                        .HasComment("是否 iframe。");

                    b.Property<bool>("KeepAlive")
                        .HasColumnType("boolean")
                        .HasComment("是否缓存。");

                    b.Property<string>("Link")
                        .HasMaxLength(512)
                        .HasColumnType("character varying(512)")
                        .HasComment("外链或 iframe 地址。");

                    b.Property<string>("MetaPermissions")
                        .IsRequired()
                        .HasMaxLength(1024)
                        .HasColumnType("character varying(1024)")
                        .HasComment("Meta.permissions（逗号分隔）。");

                    b.Property<string>("MetaRoles")
                        .IsRequired()
                        .HasMaxLength(1024)
                        .HasColumnType("character varying(1024)")
                        .HasComment("Meta.roles（逗号分隔）。");

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)")
                        .HasComment("菜单名称（前端路由 name）。");

                    b.Property<long>("ParentId")
                        .HasColumnType("bigint")
                        .HasComment("父级菜单 ID，根节点为 0。");

                    b.Property<string>("Path")
                        .IsRequired()
                        .HasMaxLength(256)
                        .HasColumnType("character varying(256)")
                        .HasComment("路由路径。");

                    b.Property<string>("RequiredPermissions")
                        .IsRequired()
                        .HasMaxLength(1024)
                        .HasColumnType("character varying(1024)")
                        .HasComment("访问该菜单所需的权限集合（逗号分隔）。");

                    b.Property<int>("SortOrder")
                        .HasColumnType("integer")
                        .HasComment("排序。");

                    b.Property<long>("TenantId")
                        .HasColumnType("bigint")
                        .HasComment("所属租户 ID。");

                    b.Property<string>("Title")
                        .IsRequired()
                        .HasMaxLength(128)
                        .HasColumnType("character varying(128)")
                        .HasComment("标题。");

                    b.Property<DateTime?>("UpdatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("最近一次更新时间（UTC），从未更新时为 null。");

                    b.Property<long?>("UpdatedBy")
                        .HasColumnType("bigint")
                        .HasComment("最后更新人用户标识，匿名或系统操作时为 null。");

                    b.HasKey("Id");

                    b.HasIndex("TenantId", "ParentId", "SortOrder");

                    b.ToTable("menu_definitions", null, t =>
                        {
                            t.HasComment("管理端菜单定义。");
                        });
                });

            modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.MiniUser", b =>
                {
                    b.Property<long>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("bigint")
                        .HasComment("实体唯一标识。");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));

                    b.Property<string>("Avatar")
                        .HasMaxLength(256)
                        .HasColumnType("character varying(256)")
                        .HasComment("头像地址。");

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("创建时间（UTC）。");

                    b.Property<long?>("CreatedBy")
                        .HasColumnType("bigint")
                        .HasComment("创建人用户标识，匿名或系统操作时为 null。");

                    b.Property<DateTime?>("DeletedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("软删除时间（UTC），未删除时为 null。");

                    b.Property<long?>("DeletedBy")
                        .HasColumnType("bigint")
                        .HasComment("删除人用户标识（软删除），未删除时为 null。");

                    b.Property<string>("Nickname")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)")
                        .HasComment("昵称。");

                    b.Property<string>("OpenId")
                        .IsRequired()
                        .HasMaxLength(128)
                        .HasColumnType("character varying(128)")
                        .HasComment("微信 OpenId。");

                    b.Property<long>("TenantId")
                        .HasColumnType("bigint")
                        .HasComment("所属租户 ID。");

                    b.Property<string>("UnionId")
                        .HasMaxLength(128)
                        .HasColumnType("character varying(128)")
                        .HasComment("微信 UnionId，可能为空。");

                    b.Property<DateTime?>("UpdatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("最近一次更新时间（UTC），从未更新时为 null。");

                    b.Property<long?>("UpdatedBy")
                        .HasColumnType("bigint")
                        .HasComment("最后更新人用户标识，匿名或系统操作时为 null。");

                    b.HasKey("Id");

                    b.HasIndex("TenantId");

                    b.HasIndex("TenantId", "OpenId")
                        .IsUnique();

                    b.ToTable("mini_users", null, t =>
                        {
                            t.HasComment("小程序用户实体。");
                        });
                });

            modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.Permission", b =>
                {
                    b.Property<long>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("bigint")
                        .HasComment("实体唯一标识。");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));

                    b.Property<string>("Code")
                        .IsRequired()
                        .HasMaxLength(128)
                        .HasColumnType("character varying(128)")
                        .HasComment("权限编码（租户内唯一）。");

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("创建时间（UTC）。");

                    b.Property<long?>("CreatedBy")
                        .HasColumnType("bigint")
                        .HasComment("创建人用户标识，匿名或系统操作时为 null。");

                    b.Property<DateTime?>("DeletedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("软删除时间（UTC），未删除时为 null。");

                    b.Property<long?>("DeletedBy")
                        .HasColumnType("bigint")
                        .HasComment("删除人用户标识（软删除），未删除时为 null。");

                    b.Property<string>("Description")
                        .HasMaxLength(256)
                        .HasColumnType("character varying(256)")
                        .HasComment("描述。");

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)")
                        .HasComment("权限名称。");

                    b.Property<long>("ParentId")
                        .HasColumnType("bigint")
                        .HasComment("父级权限 ID，根节点为 0。");

                    b.Property<int>("SortOrder")
                        .HasColumnType("integer")
                        .HasComment("排序值，值越小越靠前。");

                    b.Property<long>("TenantId")
                        .HasColumnType("bigint")
                        .HasComment("所属租户 ID。");

                    b.Property<string>("Type")
                        .IsRequired()
                        .HasMaxLength(16)
                        .HasColumnType("character varying(16)")
                        .HasComment("权限类型（group/leaf）。");

                    b.Property<DateTime?>("UpdatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("最近一次更新时间（UTC），从未更新时为 null。");

                    b.Property<long?>("UpdatedBy")
                        .HasColumnType("bigint")
                        .HasComment("最后更新人用户标识，匿名或系统操作时为 null。");

                    b.HasKey("Id");

                    b.HasIndex("TenantId");

                    b.HasIndex("TenantId", "Code")
                        .IsUnique();

                    b.HasIndex("TenantId", "ParentId", "SortOrder");

                    b.ToTable("permissions", null, t =>
                        {
                            t.HasComment("权限定义。");
                        });
                });

            modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.Role", b =>
                {
                    b.Property<long>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("bigint")
                        .HasComment("实体唯一标识。");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));

                    b.Property<string>("Code")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)")
                        .HasComment("角色编码（租户内唯一）。");

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("创建时间（UTC）。");

                    b.Property<long?>("CreatedBy")
                        .HasColumnType("bigint")
                        .HasComment("创建人用户标识，匿名或系统操作时为 null。");

                    b.Property<DateTime?>("DeletedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("软删除时间（UTC），未删除时为 null。");

                    b.Property<long?>("DeletedBy")
                        .HasColumnType("bigint")
                        .HasComment("删除人用户标识（软删除），未删除时为 null。");

                    b.Property<string>("Description")
                        .HasMaxLength(256)
                        .HasColumnType("character varying(256)")
                        .HasComment("描述。");

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)")
                        .HasComment("角色名称。");

                    b.Property<long>("TenantId")
                        .HasColumnType("bigint")
                        .HasComment("所属租户 ID。");

                    b.Property<DateTime?>("UpdatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("最近一次更新时间（UTC），从未更新时为 null。");

                    b.Property<long?>("UpdatedBy")
                        .HasColumnType("bigint")
                        .HasComment("最后更新人用户标识，匿名或系统操作时为 null。");

                    b.HasKey("Id");

                    b.HasIndex("TenantId");

                    b.HasIndex("TenantId", "Code")
                        .IsUnique();

                    b.ToTable("roles", null, t =>
                        {
                            t.HasComment("角色定义。");
                        });
                });

            modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.RolePermission", b =>
                {
                    b.Property<long>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("bigint")
                        .HasComment("实体唯一标识。");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("创建时间（UTC）。");

                    b.Property<long?>("CreatedBy")
                        .HasColumnType("bigint")
                        .HasComment("创建人用户标识，匿名或系统操作时为 null。");

                    b.Property<DateTime?>("DeletedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("软删除时间（UTC），未删除时为 null。");

                    b.Property<long?>("DeletedBy")
                        .HasColumnType("bigint")
                        .HasComment("删除人用户标识（软删除），未删除时为 null。");

                    b.Property<long>("PermissionId")
                        .HasColumnType("bigint")
                        .HasComment("权限 ID。");

                    b.Property<long>("RoleId")
                        .HasColumnType("bigint")
                        .HasComment("角色 ID。");

                    b.Property<long>("TenantId")
                        .HasColumnType("bigint")
                        .HasComment("所属租户 ID。");

                    b.Property<DateTime?>("UpdatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("最近一次更新时间（UTC），从未更新时为 null。");

                    b.Property<long?>("UpdatedBy")
                        .HasColumnType("bigint")
                        .HasComment("最后更新人用户标识，匿名或系统操作时为 null。");

                    b.HasKey("Id");

                    b.HasIndex("TenantId");

                    b.HasIndex("TenantId", "RoleId", "PermissionId")
                        .IsUnique();

                    b.ToTable("role_permissions", null, t =>
                        {
                            t.HasComment("角色-权限关系。");
                        });
                });

            modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.RoleTemplate", b =>
                {
                    b.Property<long>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("bigint")
                        .HasComment("实体唯一标识。");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("创建时间（UTC）。");

                    b.Property<long?>("CreatedBy")
                        .HasColumnType("bigint")
                        .HasComment("创建人用户标识，匿名或系统操作时为 null。");

                    b.Property<DateTime?>("DeletedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("软删除时间（UTC），未删除时为 null。");

                    b.Property<long?>("DeletedBy")
                        .HasColumnType("bigint")
                        .HasComment("删除人用户标识（软删除），未删除时为 null。");

                    b.Property<string>("Description")
                        .HasMaxLength(256)
                        .HasColumnType("character varying(256)")
                        .HasComment("模板描述。");

                    b.Property<bool>("IsActive")
                        .HasColumnType("boolean")
                        .HasComment("是否启用。");

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasMaxLength(128)
                        .HasColumnType("character varying(128)")
                        .HasComment("模板名称。");

                    b.Property<string>("TemplateCode")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)")
                        .HasComment("模板编码（唯一）。");

                    b.Property<DateTime?>("UpdatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("最近一次更新时间（UTC），从未更新时为 null。");

                    b.Property<long?>("UpdatedBy")
                        .HasColumnType("bigint")
                        .HasComment("最后更新人用户标识，匿名或系统操作时为 null。");

                    b.HasKey("Id");

                    b.HasIndex("TemplateCode")
                        .IsUnique();

                    b.ToTable("role_templates", null, t =>
                        {
                            t.HasComment("角色模板定义（平台级）。");
                        });
                });

            modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.RoleTemplatePermission", b =>
                {
                    b.Property<long>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("bigint")
                        .HasComment("实体唯一标识。");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("创建时间（UTC）。");

                    b.Property<long?>("CreatedBy")
                        .HasColumnType("bigint")
                        .HasComment("创建人用户标识，匿名或系统操作时为 null。");

                    b.Property<DateTime?>("DeletedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("软删除时间（UTC），未删除时为 null。");

                    b.Property<long?>("DeletedBy")
                        .HasColumnType("bigint")
                        .HasComment("删除人用户标识（软删除），未删除时为 null。");

                    b.Property<string>("PermissionCode")
                        .IsRequired()
                        .HasMaxLength(128)
                        .HasColumnType("character varying(128)")
                        .HasComment("权限编码。");

                    b.Property<long>("RoleTemplateId")
                        .HasColumnType("bigint")
                        .HasComment("模板 ID。");

                    b.Property<DateTime?>("UpdatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("最近一次更新时间（UTC），从未更新时为 null。");

                    b.Property<long?>("UpdatedBy")
                        .HasColumnType("bigint")
                        .HasComment("最后更新人用户标识，匿名或系统操作时为 null。");

                    b.HasKey("Id");

                    b.HasIndex("RoleTemplateId", "PermissionCode")
                        .IsUnique();

                    b.ToTable("role_template_permissions", null, t =>
                        {
                            t.HasComment("角色模板-权限关系（平台级）。");
                        });
                });

            modelBuilder.Entity("TakeoutSaaS.Domain.Identity.Entities.UserRole", b =>
                {
                    b.Property<long>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("bigint")
                        .HasComment("实体唯一标识。");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("创建时间（UTC）。");

                    b.Property<long?>("CreatedBy")
                        .HasColumnType("bigint")
                        .HasComment("创建人用户标识，匿名或系统操作时为 null。");

                    b.Property<DateTime?>("DeletedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("软删除时间（UTC），未删除时为 null。");

                    b.Property<long?>("DeletedBy")
                        .HasColumnType("bigint")
                        .HasComment("删除人用户标识（软删除），未删除时为 null。");

                    b.Property<long>("RoleId")
                        .HasColumnType("bigint")
                        .HasComment("角色 ID。");

                    b.Property<long>("TenantId")
                        .HasColumnType("bigint")
                        .HasComment("所属租户 ID。");

                    b.Property<DateTime?>("UpdatedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("最近一次更新时间（UTC），从未更新时为 null。");

                    b.Property<long?>("UpdatedBy")
                        .HasColumnType("bigint")
                        .HasComment("最后更新人用户标识，匿名或系统操作时为 null。");

                    b.Property<long>("UserId")
                        .HasColumnType("bigint")
                        .HasComment("用户 ID。");

                    b.HasKey("Id");

                    b.HasIndex("TenantId");

                    b.HasIndex("TenantId", "UserId", "RoleId")
                        .IsUnique();

                    b.ToTable("user_roles", null, t =>
                        {
                            t.HasComment("用户-角色关系。");
                        });
                });
#pragma warning restore 612, 618
        }
    }
}
