ace/Source/ACE.Database/Models/Auth/AuthDbContext.cs
2025-08-23 13:32:35 -04:00

136 lines
5.2 KiB
C#

using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using Pomelo.EntityFrameworkCore.MySql.Scaffolding.Internal;
namespace ACE.Database.Models.Auth;
public partial class AuthDbContext : DbContext
{
public AuthDbContext()
{
}
public AuthDbContext(DbContextOptions<AuthDbContext> options)
: base(options)
{
}
public virtual DbSet<Accesslevel> Accesslevel { get; set; }
public virtual DbSet<Account> Account { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
var config = Common.ConfigManager.Config.MySql.Authentication;
var connectionString = $"server={config.Host};port={config.Port};user={config.Username};password={config.Password};database={config.Database};{config.ConnectionOptions}";
optionsBuilder.UseMySql(connectionString, DatabaseManager.CachedServerVersionAutoDetect(config.Database, connectionString), builder =>
{
builder.EnableRetryOnFailure(10);
});
if (config.EnableDetailedErrors)
optionsBuilder.EnableDetailedErrors();
if (config.EnableSensitiveDataLogging)
optionsBuilder.EnableSensitiveDataLogging();
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.UseCollation("utf8_general_ci")
.HasCharSet("utf8mb3");
modelBuilder.Entity<Accesslevel>(entity =>
{
entity.HasKey(e => e.Level).HasName("PRIMARY");
entity.ToTable("accesslevel");
entity.HasIndex(e => e.Level, "level").IsUnique();
entity.Property(e => e.Level)
.ValueGeneratedNever()
.HasColumnName("level");
entity.Property(e => e.Name)
.IsRequired()
.HasMaxLength(45)
.HasColumnName("name");
entity.Property(e => e.Prefix)
.HasMaxLength(45)
.HasDefaultValueSql("''")
.HasColumnName("prefix");
});
modelBuilder.Entity<Account>(entity =>
{
entity.HasKey(e => e.AccountId).HasName("PRIMARY");
entity.ToTable("account");
entity.HasIndex(e => e.AccessLevel, "accesslevel_idx");
entity.HasIndex(e => e.AccountName, "accountName_uidx").IsUnique();
entity.Property(e => e.AccountId).HasColumnName("accountId");
entity.Property(e => e.AccessLevel).HasColumnName("accessLevel");
entity.Property(e => e.AccountName)
.IsRequired()
.HasMaxLength(50)
.HasColumnName("accountName");
entity.Property(e => e.BanExpireTime)
.HasColumnType("datetime")
.HasColumnName("ban_Expire_Time");
entity.Property(e => e.BanReason)
.HasMaxLength(1000)
.HasColumnName("ban_Reason");
entity.Property(e => e.BannedByAccountId).HasColumnName("banned_By_Account_Id");
entity.Property(e => e.BannedTime)
.HasColumnType("datetime")
.HasColumnName("banned_Time");
entity.Property(e => e.CreateIP)
.HasMaxLength(16)
.HasColumnName("create_I_P");
entity.Property(e => e.CreateTime)
.HasDefaultValueSql("CURRENT_TIMESTAMP")
.HasColumnType("datetime")
.HasColumnName("create_Time");
entity.Property(e => e.EmailAddress)
.HasMaxLength(320)
.HasColumnName("email_Address");
entity.Property(e => e.LastLoginIP)
.HasMaxLength(16)
.HasColumnName("last_Login_I_P");
entity.Property(e => e.LastLoginTime)
.HasColumnType("datetime")
.HasColumnName("last_Login_Time");
entity.Property(e => e.PasswordHash)
.IsRequired()
.HasMaxLength(88)
.HasComment("base64 encoded version of the hashed passwords. 88 characters are needed to base64 encode SHA512 output.")
.HasColumnName("passwordHash");
entity.Property(e => e.PasswordSalt)
.IsRequired()
.HasMaxLength(88)
.HasDefaultValueSql("'use bcrypt'")
.HasComment("This is no longer used, except to indicate if bcrypt is being employed for migration purposes. Previously: base64 encoded version of the password salt. 512 byte salts (88 characters when base64 encoded) are recommend for SHA512.")
.HasColumnName("passwordSalt");
entity.Property(e => e.TotalTimesLoggedIn).HasColumnName("total_Times_Logged_In");
entity.HasOne(d => d.AccessLevelNavigation).WithMany(p => p.Account)
.HasForeignKey(d => d.AccessLevel)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("fk_accesslevel");
});
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}