//
using System;
using MiaoJiZhang.Infrastructure.Persistence;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
namespace MiaoJiZhang.Infrastructure.Persistence.Migrations
{
[DbContext(typeof(AppDbContext))]
partial class AppDbContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.8")
.HasAnnotation("Relational:MaxIdentifierLength", 64);
MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder);
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.AdminAuditLog", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("Action")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("varchar(80)");
b.Property("AdminUserId")
.HasColumnType("bigint");
b.Property("CreatedAt")
.HasColumnType("datetime(6)");
b.Property("Detail")
.HasMaxLength(1000)
.HasColumnType("varchar(1000)");
b.Property("HttpMethod")
.IsRequired()
.HasMaxLength(12)
.HasColumnType("varchar(12)");
b.Property("IpAddress")
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property("Path")
.IsRequired()
.HasMaxLength(300)
.HasColumnType("varchar(300)");
b.Property("Resource")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("varchar(120)");
b.Property("StatusCode")
.HasColumnType("int");
b.Property("Success")
.HasColumnType("tinyint(1)");
b.Property("Username")
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.HasKey("Id");
b.HasIndex("CreatedAt");
b.HasIndex("AdminUserId", "CreatedAt");
b.ToTable("AdminAuditLogs");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.AdminSession", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("AbsoluteExpiresAt")
.HasColumnType("datetime(6)");
b.Property("AdminUserId")
.HasColumnType("bigint");
b.Property("AuthVersion")
.HasColumnType("int");
b.Property("CreatedAt")
.HasColumnType("datetime(6)");
b.Property("CsrfTokenHash")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property("ExpiresAt")
.HasColumnType("datetime(6)");
b.Property("IpAddress")
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property("LastSeenAt")
.HasColumnType("datetime(6)");
b.Property("RevokedAt")
.HasColumnType("datetime(6)");
b.Property("TokenHash")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property("UserAgent")
.HasMaxLength(300)
.HasColumnType("varchar(300)");
b.HasKey("Id");
b.HasIndex("TokenHash")
.IsUnique();
b.HasIndex("AdminUserId", "RevokedAt", "ExpiresAt");
b.ToTable("AdminSessions");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.AdminUser", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("AuthVersion")
.HasColumnType("int");
b.Property("CreatedAt")
.HasColumnType("datetime(6)");
b.Property("FailedLoginCount")
.HasColumnType("int");
b.Property("IsActive")
.HasColumnType("tinyint(1)");
b.Property("LastLoginAt")
.HasColumnType("datetime(6)");
b.Property("LockedUntil")
.HasColumnType("datetime(6)");
b.Property("MustChangePassword")
.HasColumnType("tinyint(1)");
b.Property("PasswordHash")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)");
b.Property("Role")
.IsRequired()
.HasMaxLength(24)
.HasColumnType("varchar(24)");
b.Property("UpdatedAt")
.HasColumnType("datetime(6)");
b.Property("Username")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.HasKey("Id");
b.HasIndex("Username")
.IsUnique();
b.HasIndex("IsActive", "Role");
b.ToTable("AdminUsers");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.AiAvatar", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("DefaultName")
.IsRequired()
.HasColumnType("longtext");
b.Property("ImageUrl")
.HasColumnType("longtext");
b.Property("IsEnabled")
.HasColumnType("tinyint(1)");
b.Property("Key")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property("SpeechTic")
.IsRequired()
.HasColumnType("longtext");
b.HasKey("Id");
b.HasIndex("Key")
.IsUnique();
b.ToTable("AiAvatars");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.AiCompanionSetting", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("AvatarKey")
.IsRequired()
.HasColumnType("longtext");
b.Property("CustomName")
.HasColumnType("longtext");
b.Property("PersonaKey")
.IsRequired()
.HasColumnType("longtext");
b.Property("ProactiveLevel")
.HasColumnType("int");
b.Property("RoastLevel")
.HasColumnType("int");
b.Property("StickerFrequency")
.HasColumnType("int");
b.Property("UserId")
.HasColumnType("bigint");
b.HasKey("Id");
b.HasIndex("UserId")
.IsUnique();
b.ToTable("AiCompanionSettings");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.AiPersona", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("Description")
.IsRequired()
.HasColumnType("longtext");
b.Property("IsEnabled")
.HasColumnType("tinyint(1)");
b.Property("Key")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property("Name")
.IsRequired()
.HasColumnType("longtext");
b.Property("PromptTemplate")
.IsRequired()
.HasColumnType("longtext");
b.Property("SampleLine")
.IsRequired()
.HasColumnType("longtext");
b.Property("Version")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("Key")
.IsUnique();
b.ToTable("AiPersonas");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.AppConfig", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("Key")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property("UpdatedAt")
.HasColumnType("datetime(6)");
b.Property("Value")
.IsRequired()
.HasColumnType("longtext");
b.Property("Version")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("Key")
.IsUnique();
b.ToTable("AppConfigs");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.Budget", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("Amount")
.HasPrecision(12, 2)
.HasColumnType("decimal(12,2)");
b.Property("CategoryId")
.HasColumnType("bigint");
b.Property("LedgerId")
.HasColumnType("bigint");
b.Property("Period")
.HasColumnType("int");
b.Property("UserId")
.HasColumnType("bigint");
b.HasKey("Id");
b.HasIndex("LedgerId", "Period", "CategoryId")
.IsUnique();
b.ToTable("Budgets");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.BudgetNotificationReceipt", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("BudgetId")
.HasColumnType("bigint");
b.Property("CreatedAt")
.HasColumnType("datetime(6)");
b.Property("Period")
.HasColumnType("int");
b.Property("Threshold")
.HasColumnType("int");
b.Property("UserId")
.HasColumnType("bigint");
b.HasKey("Id");
b.HasIndex("UserId", "Period");
b.HasIndex("BudgetId", "Period", "Threshold")
.IsUnique();
b.ToTable("BudgetNotificationReceipts");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.Category", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("ColorKey")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("varchar(32)");
b.Property("IconKey")
.IsRequired()
.HasColumnType("longtext");
b.Property("IsDeleted")
.HasColumnType("tinyint(1)");
b.Property("Name")
.IsRequired()
.HasColumnType("longtext");
b.Property("SortOrder")
.HasColumnType("int");
b.Property("Type")
.HasColumnType("int");
b.Property("UserId")
.HasColumnType("bigint");
b.HasKey("Id");
b.ToTable("Categories");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.ChatMessage", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("Content")
.IsRequired()
.HasColumnType("longtext");
b.Property("CreatedAt")
.HasColumnType("datetime(6)");
b.Property("Role")
.HasColumnType("int");
b.Property("TransactionId")
.HasColumnType("bigint");
b.Property("Type")
.HasColumnType("int");
b.Property("UserId")
.HasColumnType("bigint");
b.HasKey("Id");
b.HasIndex("UserId", "CreatedAt");
b.ToTable("ChatMessages");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.Ledger", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("CreatedAt")
.HasColumnType("datetime(6)");
b.Property("IconKey")
.IsRequired()
.HasColumnType("longtext");
b.Property("IsDefault")
.HasColumnType("tinyint(1)");
b.Property("Name")
.IsRequired()
.HasColumnType("longtext");
b.Property("OwnerId")
.HasColumnType("bigint");
b.HasKey("Id");
b.HasIndex("OwnerId");
b.ToTable("Ledgers");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.PushDelivery", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("AcceptedAt")
.HasColumnType("datetime(6)");
b.Property("AttemptCount")
.HasColumnType("int");
b.Property("CreatedAt")
.HasColumnType("datetime(6)");
b.Property("ErrorCode")
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property("ErrorMessage")
.HasMaxLength(400)
.HasColumnType("varchar(400)");
b.Property("LeaseExpiresAt")
.HasColumnType("datetime(6)");
b.Property("LeaseId")
.HasMaxLength(36)
.HasColumnType("varchar(36)");
b.Property("NextAttemptAt")
.HasColumnType("datetime(6)");
b.Property("Provider")
.IsRequired()
.HasMaxLength(16)
.HasColumnType("varchar(16)");
b.Property("ProviderMessageId")
.HasMaxLength(128)
.HasColumnType("varchar(128)");
b.Property("PushDeviceId")
.HasColumnType("bigint");
b.Property("PushMessageId")
.HasColumnType("bigint");
b.Property("State")
.IsRequired()
.HasMaxLength(24)
.HasColumnType("varchar(24)");
b.Property("UpdatedAt")
.HasColumnType("datetime(6)");
b.Property("UserId")
.HasColumnType("bigint");
b.HasKey("Id");
b.HasIndex("PushDeviceId");
b.HasIndex("PushMessageId", "PushDeviceId")
.IsUnique();
b.HasIndex("State", "NextAttemptAt", "LeaseExpiresAt");
b.ToTable("PushDeliveries");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.PushDevice", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("AppVersion")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("varchar(32)");
b.Property("CreatedAt")
.HasColumnType("datetime(6)");
b.Property("DisabledReason")
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property("Flavor")
.IsRequired()
.HasMaxLength(24)
.HasColumnType("varchar(24)");
b.Property("InstallationId")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property("IsActive")
.HasColumnType("tinyint(1)");
b.Property("LastSeenAt")
.HasColumnType("datetime(6)");
b.Property("NotificationsAllowed")
.HasColumnType("tinyint(1)");
b.Property("PackageName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)");
b.Property("Provider")
.IsRequired()
.HasMaxLength(16)
.HasColumnType("varchar(16)");
b.Property("TokenCiphertext")
.IsRequired()
.HasMaxLength(6144)
.HasColumnType("varchar(6144)");
b.Property("TokenHash")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property("UnbindTokenHash")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property("UpdatedAt")
.HasColumnType("datetime(6)");
b.Property("UserId")
.HasColumnType("bigint");
b.Property("VersionCode")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("LastSeenAt");
b.HasIndex("PackageName", "InstallationId")
.IsUnique();
b.HasIndex("UserId", "IsActive");
b.HasIndex("Provider", "PackageName", "TokenHash")
.IsUnique();
b.ToTable("PushDevices");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.PushMessage", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("Action")
.IsRequired()
.HasMaxLength(24)
.HasColumnType("varchar(24)");
b.Property("Body")
.IsRequired()
.HasMaxLength(240)
.HasColumnType("varchar(240)");
b.Property("CancelledAt")
.HasColumnType("datetime(6)");
b.Property("Category")
.IsRequired()
.HasMaxLength(24)
.HasColumnType("varchar(24)");
b.Property("CompletedAt")
.HasColumnType("datetime(6)");
b.Property("CreatedAt")
.HasColumnType("datetime(6)");
b.Property("EntityId")
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property("Flavor")
.IsRequired()
.HasMaxLength(24)
.HasColumnType("varchar(24)");
b.Property("IsTest")
.HasColumnType("tinyint(1)");
b.Property("MaxVersionCode")
.HasColumnType("int");
b.Property("MinVersionCode")
.HasColumnType("int");
b.Property("ProviderFilter")
.HasMaxLength(16)
.HasColumnType("varchar(16)");
b.Property("PublicId")
.IsRequired()
.HasMaxLength(36)
.HasColumnType("varchar(36)");
b.Property("ScheduledAt")
.HasColumnType("datetime(6)");
b.Property("Source")
.IsRequired()
.HasMaxLength(24)
.HasColumnType("varchar(24)");
b.Property("StartedAt")
.HasColumnType("datetime(6)");
b.Property("State")
.IsRequired()
.HasMaxLength(24)
.HasColumnType("varchar(24)");
b.Property("TargetUserId")
.HasColumnType("bigint");
b.Property("TestDeviceId")
.HasColumnType("bigint");
b.Property("Title")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("varchar(80)");
b.Property("TtlSeconds")
.HasColumnType("int");
b.Property("UpdatedAt")
.HasColumnType("datetime(6)");
b.HasKey("Id");
b.HasIndex("PublicId")
.IsUnique();
b.HasIndex("State", "ScheduledAt");
b.HasIndex("TargetUserId", "CreatedAt");
b.ToTable("PushMessages");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.Sticker", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("GroupKey")
.IsRequired()
.HasColumnType("longtext");
b.Property("ImageUrl")
.HasColumnType("longtext");
b.Property("IsEnabled")
.HasColumnType("tinyint(1)");
b.Property("Key")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property("Label")
.IsRequired()
.HasColumnType("longtext");
b.Property("TriggerTags")
.HasColumnType("longtext");
b.HasKey("Id");
b.HasIndex("Key")
.IsUnique();
b.ToTable("Stickers");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.Transaction", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("Amount")
.HasPrecision(12, 2)
.HasColumnType("decimal(12,2)");
b.Property("CategoryId")
.HasColumnType("bigint");
b.Property("ClientRequestId")
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property("Counterparty")
.HasMaxLength(100)
.HasColumnType("varchar(100)");
b.Property("CreatedAt")
.HasColumnType("datetime(6)");
b.Property("DeletedAt")
.HasColumnType("datetime(6)");
b.Property("EvidenceFingerprint")
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property("IsDeleted")
.HasColumnType("tinyint(1)");
b.Property("LedgerId")
.HasColumnType("bigint");
b.Property("Note")
.HasColumnType("longtext");
b.Property("OccurredAt")
.HasColumnType("datetime(6)");
b.Property("PaymentMethod")
.HasColumnType("longtext");
b.Property("Provider")
.HasMaxLength(24)
.HasColumnType("varchar(24)");
b.Property("ProviderTransactionId")
.HasMaxLength(128)
.HasColumnType("varchar(128)");
b.Property("RecognitionConfidence")
.HasMaxLength(24)
.HasColumnType("varchar(24)");
b.Property("RecognitionOccurrenceId")
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property("Source")
.HasColumnType("int");
b.Property("SourceChatMessageId")
.HasColumnType("bigint");
b.Property("SourceText")
.HasColumnType("longtext");
b.Property("TransferDirection")
.HasColumnType("int");
b.Property("Type")
.HasColumnType("int");
b.Property("UpdatedAt")
.HasColumnType("datetime(6)");
b.Property("UserId")
.HasColumnType("bigint");
b.HasKey("Id");
b.HasIndex("CategoryId");
b.HasIndex("LedgerId", "OccurredAt");
b.HasIndex("UserId", "ClientRequestId")
.IsUnique();
b.HasIndex("UserId", "IsDeleted");
b.HasIndex("UserId", "RecognitionOccurrenceId")
.IsUnique();
b.HasIndex("UserId", "Provider", "ProviderTransactionId")
.IsUnique();
b.ToTable("Transactions");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.User", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("AccountClosureRequestedAt")
.HasColumnType("datetime(6)");
b.Property("AccountClosureScheduledAt")
.HasColumnType("datetime(6)");
b.Property("AiChatLimit")
.HasColumnType("int");
b.Property("AiChatPeriod")
.HasColumnType("int");
b.Property("AiChatUsed")
.HasColumnType("int");
b.Property("AiChatWindowStartedAt")
.HasColumnType("datetime(6)");
b.Property("AppMode")
.HasColumnType("int");
b.Property("AppleUserId")
.HasColumnType("longtext");
b.Property("AuthVersion")
.HasColumnType("int");
b.Property("AvatarUrl")
.HasColumnType("longtext");
b.Property("CreatedAt")
.HasColumnType("datetime(6)");
b.Property("Email")
.HasColumnType("varchar(255)");
b.Property("EmailVerified")
.HasColumnType("tinyint(1)");
b.Property("IsBanned")
.HasColumnType("tinyint(1)");
b.Property("LastLoginAt")
.HasColumnType("datetime(6)");
b.Property("Nickname")
.HasMaxLength(32)
.HasColumnType("varchar(32)");
b.Property("PasswordHash")
.IsRequired()
.HasColumnType("longtext");
b.Property("Phone")
.HasColumnType("varchar(255)");
b.Property("PhoneVerified")
.HasColumnType("tinyint(1)");
b.Property("Username")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("varchar(32)");
b.Property("WeChatOpenId")
.HasColumnType("varchar(255)");
b.Property("WeChatUnionId")
.HasColumnType("longtext");
b.HasKey("Id");
b.HasIndex("AccountClosureScheduledAt");
b.HasIndex("Email")
.IsUnique();
b.HasIndex("Phone")
.IsUnique();
b.HasIndex("Username")
.IsUnique();
b.HasIndex("WeChatOpenId")
.IsUnique();
b.ToTable("Users");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.UserFeaturePermission", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("CreatedAt")
.HasColumnType("datetime(6)");
b.Property("IsEnabled")
.HasColumnType("tinyint(1)");
b.Property("PermissionKey")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("varchar(32)");
b.Property("UpdatedAt")
.HasColumnType("datetime(6)");
b.Property("UserId")
.HasColumnType("bigint");
b.HasKey("Id");
b.HasIndex("UserId", "PermissionKey")
.IsUnique();
b.ToTable("UserFeaturePermissions");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.UserPushPreference", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
b.Property("Category")
.IsRequired()
.HasMaxLength(24)
.HasColumnType("varchar(24)");
b.Property("IsEnabled")
.HasColumnType("tinyint(1)");
b.Property("UpdatedAt")
.HasColumnType("datetime(6)");
b.Property("UserId")
.HasColumnType("bigint");
b.HasKey("Id");
b.HasIndex("UserId", "Category")
.IsUnique();
b.ToTable("UserPushPreferences");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.AdminSession", b =>
{
b.HasOne("MiaoJiZhang.Domain.Entities.AdminUser", "AdminUser")
.WithMany("Sessions")
.HasForeignKey("AdminUserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("AdminUser");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.AiCompanionSetting", b =>
{
b.HasOne("MiaoJiZhang.Domain.Entities.User", "User")
.WithOne("AiCompanion")
.HasForeignKey("MiaoJiZhang.Domain.Entities.AiCompanionSetting", "UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("User");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.Budget", b =>
{
b.HasOne("MiaoJiZhang.Domain.Entities.Ledger", "Ledger")
.WithMany("Budgets")
.HasForeignKey("LedgerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Ledger");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.BudgetNotificationReceipt", b =>
{
b.HasOne("MiaoJiZhang.Domain.Entities.Budget", "Budget")
.WithMany()
.HasForeignKey("BudgetId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("MiaoJiZhang.Domain.Entities.User", "User")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Budget");
b.Navigation("User");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.Ledger", b =>
{
b.HasOne("MiaoJiZhang.Domain.Entities.User", "Owner")
.WithMany("Ledgers")
.HasForeignKey("OwnerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Owner");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.PushDelivery", b =>
{
b.HasOne("MiaoJiZhang.Domain.Entities.PushDevice", "PushDevice")
.WithMany("Deliveries")
.HasForeignKey("PushDeviceId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("MiaoJiZhang.Domain.Entities.PushMessage", "PushMessage")
.WithMany("Deliveries")
.HasForeignKey("PushMessageId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("PushDevice");
b.Navigation("PushMessage");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.PushDevice", b =>
{
b.HasOne("MiaoJiZhang.Domain.Entities.User", "User")
.WithMany("PushDevices")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("User");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.Transaction", b =>
{
b.HasOne("MiaoJiZhang.Domain.Entities.Category", "Category")
.WithMany()
.HasForeignKey("CategoryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("MiaoJiZhang.Domain.Entities.Ledger", "Ledger")
.WithMany("Transactions")
.HasForeignKey("LedgerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Category");
b.Navigation("Ledger");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.UserFeaturePermission", b =>
{
b.HasOne("MiaoJiZhang.Domain.Entities.User", "User")
.WithMany("FeaturePermissions")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("User");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.UserPushPreference", b =>
{
b.HasOne("MiaoJiZhang.Domain.Entities.User", "User")
.WithMany("PushPreferences")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("User");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.AdminUser", b =>
{
b.Navigation("Sessions");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.Ledger", b =>
{
b.Navigation("Budgets");
b.Navigation("Transactions");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.PushDevice", b =>
{
b.Navigation("Deliveries");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.PushMessage", b =>
{
b.Navigation("Deliveries");
});
modelBuilder.Entity("MiaoJiZhang.Domain.Entities.User", b =>
{
b.Navigation("AiCompanion");
b.Navigation("FeaturePermissions");
b.Navigation("Ledgers");
b.Navigation("PushDevices");
b.Navigation("PushPreferences");
});
#pragma warning restore 612, 618
}
}
}