LingAdmin/Backend/Services/IdentityService/LingAdmin.IdentityService/Data/IdentityDbContext.cs

72 lines
2.5 KiB
C#
Raw Normal View History

2026-04-16 18:13:06 +08:00
using Microsoft.EntityFrameworkCore;
using LingAdmin.Shared.Models;
namespace LingAdmin.IdentityService.Data;
public class IdentityDbContext : DbContext
{
public IdentityDbContext(DbContextOptions<IdentityDbContext> options) : base(options)
{
}
public DbSet<User> Users { get; set; }
public DbSet<RefreshToken> RefreshTokens { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// User configuration
modelBuilder.Entity<User>(entity =>
{
entity.HasKey(e => e.Id);
entity.HasIndex(e => e.Email).IsUnique();
entity.Property(e => e.Name).HasMaxLength(100).IsRequired();
entity.Property(e => e.Email).HasMaxLength(255).IsRequired();
entity.Property(e => e.PasswordHash).HasMaxLength(255).IsRequired();
entity.Property(e => e.Status).HasMaxLength(50).IsRequired();
// Ignore navigation property for this service
entity.Ignore(e => e.UserRoles);
});
// RefreshToken configuration
modelBuilder.Entity<RefreshToken>(entity =>
{
entity.HasKey(e => e.Id);
entity.HasIndex(e => e.Token).IsUnique();
entity.Property(e => e.Token).HasMaxLength(500).IsRequired();
entity.Property(e => e.CreatedByIp).HasMaxLength(50);
entity.Property(e => e.RevokedByIp).HasMaxLength(50);
entity.Property(e => e.ReplacedByToken).HasMaxLength(500);
entity.HasOne(e => e.User)
.WithMany()
.HasForeignKey(e => e.UserId)
.OnDelete(DeleteBehavior.Cascade);
});
// Seed default admin user
SeedData(modelBuilder);
}
private void SeedData(ModelBuilder modelBuilder)
{
// Default password: Admin@123456
// Using a fixed hash to avoid migration issues (generated from BCrypt.HashPassword("Admin@123456", 12))
const string adminPasswordHash = "$2a$12$07r7dSRHvi6NptOwfwTylOl8DTavEvazlQgqE67v/Ux1zAINGoEhe";
modelBuilder.Entity<User>().HasData(
new User
{
Id = 1,
Name = "System Admin",
Email = "admin@lingadmin.com",
PasswordHash = adminPasswordHash,
Status = "Active",
CreatedAt = new DateTime(2024, 1, 1, 0, 0, 0, DateTimeKind.Utc)
}
);
}
}