feat(member): implement member center management module
Some checks failed
Build and Deploy TenantApi + SkuWorker / build-and-deploy (push) Failing after 1m54s

This commit is contained in:
2026-03-03 20:38:31 +08:00
parent c2821202c7
commit d96ca4971a
40 changed files with 4846 additions and 1 deletions

View File

@@ -390,6 +390,14 @@ public sealed class TakeoutAppDbContext(
/// </summary>
public DbSet<MemberTier> MemberTiers => Set<MemberTier>();
/// <summary>
/// 会员标签。
/// </summary>
public DbSet<MemberProfileTag> MemberProfileTags => Set<MemberProfileTag>();
/// <summary>
/// 会员日设置。
/// </summary>
public DbSet<MemberDaySetting> MemberDaySettings => Set<MemberDaySetting>();
/// <summary>
/// 积分流水。
/// </summary>
public DbSet<MemberPointLedger> MemberPointLedgers => Set<MemberPointLedger>();
@@ -557,6 +565,8 @@ public sealed class TakeoutAppDbContext(
ConfigurePunchCardUsageRecord(modelBuilder.Entity<PunchCardUsageRecord>());
ConfigureMemberProfile(modelBuilder.Entity<MemberProfile>());
ConfigureMemberTier(modelBuilder.Entity<MemberTier>());
ConfigureMemberProfileTag(modelBuilder.Entity<MemberProfileTag>());
ConfigureMemberDaySetting(modelBuilder.Entity<MemberDaySetting>());
ConfigureMemberPointLedger(modelBuilder.Entity<MemberPointLedger>());
ConfigureChatSession(modelBuilder.Entity<ChatSession>());
ConfigureChatMessage(modelBuilder.Entity<ChatMessage>());
@@ -1785,8 +1795,12 @@ public sealed class TakeoutAppDbContext(
builder.Property(x => x.Mobile).HasMaxLength(32).IsRequired();
builder.Property(x => x.Nickname).HasMaxLength(64);
builder.Property(x => x.AvatarUrl).HasMaxLength(256);
builder.Property(x => x.StoredBalance).HasPrecision(18, 2);
builder.Property(x => x.StoredRechargeBalance).HasPrecision(18, 2);
builder.Property(x => x.StoredGiftBalance).HasPrecision(18, 2);
builder.Property(x => x.Status).HasConversion<int>();
builder.HasIndex(x => new { x.TenantId, x.Mobile }).IsUnique();
builder.HasIndex(x => new { x.TenantId, x.MemberTierId });
}
private static void ConfigureMemberTier(EntityTypeBuilder<MemberTier> builder)
@@ -1794,8 +1808,33 @@ public sealed class TakeoutAppDbContext(
builder.ToTable("member_tiers");
builder.HasKey(x => x.Id);
builder.Property(x => x.Name).HasMaxLength(64).IsRequired();
builder.Property(x => x.IconKey).HasMaxLength(32).IsRequired();
builder.Property(x => x.ColorHex).HasMaxLength(16).IsRequired();
builder.Property(x => x.UpgradeRuleType).HasMaxLength(16).IsRequired();
builder.Property(x => x.UpgradeAmountThreshold).HasPrecision(18, 2);
builder.Property(x => x.BenefitsJson).HasColumnType("text");
builder.HasIndex(x => new { x.TenantId, x.Name }).IsUnique();
builder.HasIndex(x => new { x.TenantId, x.SortOrder });
}
private static void ConfigureMemberProfileTag(EntityTypeBuilder<MemberProfileTag> builder)
{
builder.ToTable("member_profile_tags");
builder.HasKey(x => x.Id);
builder.Property(x => x.MemberProfileId).IsRequired();
builder.Property(x => x.TagName).HasMaxLength(32).IsRequired();
builder.HasIndex(x => new { x.TenantId, x.MemberProfileId, x.TagName }).IsUnique();
builder.HasIndex(x => new { x.TenantId, x.MemberProfileId });
}
private static void ConfigureMemberDaySetting(EntityTypeBuilder<MemberDaySetting> builder)
{
builder.ToTable("member_day_settings");
builder.HasKey(x => x.Id);
builder.Property(x => x.IsEnabled).IsRequired();
builder.Property(x => x.Weekday).IsRequired();
builder.Property(x => x.ExtraDiscountRate).HasPrecision(5, 2);
builder.HasIndex(x => x.TenantId).IsUnique();
}
private static void ConfigureMemberPointLedger(EntityTypeBuilder<MemberPointLedger> builder)