using Microsoft.EntityFrameworkCore;
using MiAssessment.Admin.Business.Entities;
namespace MiAssessment.Admin.Business.Data;
///
/// Admin 业务模块数据库上下文
/// 用于访问业务数据库中的所有业务表
///
public class AdminBusinessDbContext : DbContext
{
public AdminBusinessDbContext(DbContextOptions options) : base(options)
{
}
#region 系统配置
///
/// 系统配置表
///
public DbSet Configs { get; set; } = null!;
#endregion
#region 内容管理
///
/// 轮播图表
///
public DbSet Banners { get; set; } = null!;
///
/// 宣传图表
///
public DbSet Promotions { get; set; } = null!;
#endregion
#region 测评管理
///
/// 测评类型表
///
public DbSet AssessmentTypes { get; set; } = null!;
///
/// 题目表
///
public DbSet Questions { get; set; } = null!;
///
/// 报告分类表
///
public DbSet ReportCategories { get; set; } = null!;
///
/// 题目分类映射表
///
public DbSet QuestionCategoryMappings { get; set; } = null!;
///
/// 报告结论表
///
public DbSet ReportConclusions { get; set; } = null!;
///
/// 测评记录表
///
public DbSet AssessmentRecords { get; set; } = null!;
///
/// 测评答案表
///
public DbSet AssessmentAnswers { get; set; } = null!;
///
/// 测评结果表
///
public DbSet AssessmentResults { get; set; } = null!;
#endregion
#region 用户管理
///
/// 用户表
///
public DbSet Users { get; set; } = null!;
#endregion
#region 订单管理
///
/// 订单表
///
public DbSet Orders { get; set; } = null!;
#endregion
#region 规划师管理
///
/// 规划师表
///
public DbSet Planners { get; set; } = null!;
///
/// 规划预约表
///
public DbSet PlannerBookings { get; set; } = null!;
#endregion
#region 分销管理
///
/// 邀请码表
///
public DbSet InviteCodes { get; set; } = null!;
///
/// 佣金记录表
///
public DbSet Commissions { get; set; } = null!;
///
/// 提现记录表
///
public DbSet Withdrawals { get; set; } = null!;
#endregion
#region 业务介绍页管理
///
/// 业务介绍页表
///
public DbSet BusinessPages { get; set; } = null!;
#endregion
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// =============================================
// Config 配置
// =============================================
modelBuilder.Entity(entity =>
{
// ConfigKey 唯一索引
entity.HasIndex(e => e.ConfigKey)
.IsUnique()
.HasDatabaseName("UK_configs_key");
// ConfigValue 使用 nvarchar(max)
entity.Property(e => e.ConfigValue)
.HasColumnType("nvarchar(max)");
});
// =============================================
// User 配置
// =============================================
modelBuilder.Entity(entity =>
{
// Uid 唯一索引
entity.HasIndex(e => e.Uid)
.IsUnique()
.HasDatabaseName("UK_users_uid");
// OpenId 唯一索引
entity.HasIndex(e => e.OpenId)
.IsUnique()
.HasDatabaseName("UK_users_open_id");
// 金额字段精度配置
entity.Property(e => e.Balance)
.HasColumnType("decimal(10,2)");
entity.Property(e => e.TotalIncome)
.HasColumnType("decimal(10,2)");
entity.Property(e => e.WithdrawnAmount)
.HasColumnType("decimal(10,2)");
});
// =============================================
// AssessmentType 配置
// =============================================
modelBuilder.Entity(entity =>
{
// Code 唯一索引
entity.HasIndex(e => e.Code)
.IsUnique()
.HasDatabaseName("UK_assessment_types_code");
// IntroContent 使用 nvarchar(max)
entity.Property(e => e.IntroContent)
.HasColumnType("nvarchar(max)");
// Price 精度配置
entity.Property(e => e.Price)
.HasColumnType("decimal(10,2)");
});
// =============================================
// Question 配置
// =============================================
modelBuilder.Entity(entity =>
{
// (AssessmentTypeId, QuestionNo) 复合唯一索引
entity.HasIndex(e => new { e.AssessmentTypeId, e.QuestionNo })
.IsUnique()
.HasDatabaseName("UK_questions_type_no");
});
// =============================================
// QuestionCategoryMapping 配置
// =============================================
modelBuilder.Entity(entity =>
{
// (QuestionId, CategoryId) 复合唯一索引
entity.HasIndex(e => new { e.QuestionId, e.CategoryId })
.IsUnique()
.HasDatabaseName("UK_question_category_mappings");
});
// =============================================
// ReportConclusion 配置
// =============================================
modelBuilder.Entity(entity =>
{
// Content 使用 nvarchar(max)
entity.Property(e => e.Content)
.HasColumnType("nvarchar(max)");
});
// =============================================
// Order 配置
// =============================================
modelBuilder.Entity(entity =>
{
// OrderNo 唯一索引
entity.HasIndex(e => e.OrderNo)
.IsUnique()
.HasDatabaseName("UK_orders_order_no");
// 金额字段精度配置
entity.Property(e => e.Amount)
.HasColumnType("decimal(10,2)");
entity.Property(e => e.PayAmount)
.HasColumnType("decimal(10,2)");
entity.Property(e => e.RefundAmount)
.HasColumnType("decimal(10,2)");
});
// =============================================
// Planner 配置
// =============================================
modelBuilder.Entity(entity =>
{
// Price 精度配置
entity.Property(e => e.Price)
.HasColumnType("decimal(10,2)");
});
// =============================================
// PlannerBooking 配置
// =============================================
modelBuilder.Entity(entity =>
{
// BookingDate 使用 date 类型
entity.Property(e => e.BookingDate)
.HasColumnType("date");
});
// =============================================
// InviteCode 配置
// =============================================
modelBuilder.Entity(entity =>
{
// Code 唯一索引
entity.HasIndex(e => e.Code)
.IsUnique()
.HasDatabaseName("UK_invite_codes_code");
});
// =============================================
// Commission 配置
// =============================================
modelBuilder.Entity(entity =>
{
// 金额字段精度配置
entity.Property(e => e.OrderAmount)
.HasColumnType("decimal(10,2)");
entity.Property(e => e.CommissionRate)
.HasColumnType("decimal(5,2)");
entity.Property(e => e.CommissionAmount)
.HasColumnType("decimal(10,2)");
});
// =============================================
// Withdrawal 配置
// =============================================
modelBuilder.Entity(entity =>
{
// WithdrawalNo 唯一索引
entity.HasIndex(e => e.WithdrawalNo)
.IsUnique()
.HasDatabaseName("UK_withdrawals_withdrawal_no");
// 金额字段精度配置
entity.Property(e => e.Amount)
.HasColumnType("decimal(10,2)");
entity.Property(e => e.BeforeBalance)
.HasColumnType("decimal(10,2)");
entity.Property(e => e.AfterBalance)
.HasColumnType("decimal(10,2)");
});
// =============================================
// AssessmentAnswer 配置
// =============================================
modelBuilder.Entity(entity =>
{
// (RecordId, QuestionId) 复合唯一索引
entity.HasIndex(e => new { e.RecordId, e.QuestionId })
.IsUnique()
.HasDatabaseName("UK_assessment_answers_record_question");
});
// =============================================
// AssessmentResult 配置
// =============================================
modelBuilder.Entity(entity =>
{
// 分数字段精度配置
entity.Property(e => e.Score)
.HasColumnType("decimal(18,2)");
entity.Property(e => e.MaxScore)
.HasColumnType("decimal(18,2)");
entity.Property(e => e.Percentage)
.HasColumnType("decimal(18,2)");
});
// =============================================
// BusinessPage 配置
// =============================================
modelBuilder.Entity(entity =>
{
// Status 索引
entity.HasIndex(e => e.Status)
.HasDatabaseName("IX_business_pages_status");
});
}
}