using MareSynchronosShared.Models; using Microsoft.EntityFrameworkCore; namespace MareSynchronosShared.Data; public class MareDbContext : DbContext { #if DEBUG public MareDbContext() { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (optionsBuilder.IsConfigured) { base.OnConfiguring(optionsBuilder); return; } optionsBuilder.UseNpgsql("Host=localhost;Port=5432;Database=mare;Username=postgres", builder => { builder.MigrationsHistoryTable("_efmigrationshistory", "public"); builder.MigrationsAssembly("MareSynchronosShared"); }).UseSnakeCaseNamingConvention(); optionsBuilder.EnableThreadSafetyChecks(false); base.OnConfiguring(optionsBuilder); } #endif public MareDbContext(DbContextOptions options) : base(options) { } public DbSet Auth { get; set; } public DbSet BannedRegistrations { get; set; } public DbSet BannedUsers { get; set; } public DbSet ClientPairs { get; set; } public DbSet Files { get; set; } public DbSet ForbiddenUploadEntries { get; set; } public DbSet GroupBans { get; set; } public DbSet GroupPairs { get; set; } public DbSet Groups { get; set; } public DbSet GroupTempInvites { get; set; } public DbSet LodeStoneAuth { get; set; } public DbSet UserProfileData { get; set; } public DbSet UserProfileReports { get; set; } public DbSet Users { get; set; } public DbSet CharaData { get; set; } public DbSet CharaDataFiles { get; set; } public DbSet CharaDataFileSwaps { get; set; } public DbSet CharaDataOriginalFiles { get; set; } public DbSet CharaDataPoses { get; set; } public DbSet CharaDataAllowances { get; set; } protected override void OnModelCreating(ModelBuilder mb) { mb.Entity().ToTable("auth"); mb.Entity().ToTable("users"); mb.Entity().ToTable("file_caches"); mb.Entity().HasIndex(c => c.UploaderUID); mb.Entity().ToTable("client_pairs"); mb.Entity().HasKey(u => new { u.UserUID, u.OtherUserUID }); mb.Entity().HasIndex(c => c.UserUID); mb.Entity().HasIndex(c => c.OtherUserUID); mb.Entity().ToTable("forbidden_upload_entries"); mb.Entity().ToTable("banned_users"); mb.Entity().ToTable("lodestone_auth"); mb.Entity().ToTable("banned_registrations"); mb.Entity().ToTable("groups"); mb.Entity().HasIndex(c => c.OwnerUID); mb.Entity().ToTable("group_pairs"); mb.Entity().HasKey(u => new { u.GroupGID, u.GroupUserUID }); mb.Entity().HasIndex(c => c.GroupUserUID); mb.Entity().HasIndex(c => c.GroupGID); mb.Entity().ToTable("group_bans"); mb.Entity().HasKey(u => new { u.GroupGID, u.BannedUserUID }); mb.Entity().HasIndex(c => c.BannedUserUID); mb.Entity().HasIndex(c => c.GroupGID); mb.Entity().ToTable("group_temp_invites"); mb.Entity().HasKey(u => new { u.GroupGID, u.Invite }); mb.Entity().HasIndex(c => c.GroupGID); mb.Entity().HasIndex(c => c.Invite); mb.Entity().ToTable("user_profile_data"); mb.Entity().HasKey(c => c.UserUID); mb.Entity().ToTable("user_profile_data_reports"); mb.Entity().ToTable("chara_data"); mb.Entity() .HasMany(p => p.Poses) .WithOne(c => c.Parent) .HasForeignKey(c => new { c.ParentId, c.ParentUploaderUID }); mb.Entity() .HasMany(p => p.Files) .WithOne(c => c.Parent) .HasForeignKey(c => new { c.ParentId, c.ParentUploaderUID }); mb.Entity() .HasMany(p => p.OriginalFiles) .WithOne(p => p.Parent) .HasForeignKey(p => new { p.ParentId, p.ParentUploaderUID }); mb.Entity() .HasMany(p => p.AllowedIndividiuals) .WithOne(p => p.Parent) .HasForeignKey(p => new { p.ParentId, p.ParentUploaderUID }); mb.Entity() .HasMany(p => p.FileSwaps) .WithOne(p => p.Parent) .HasForeignKey(p => new { p.ParentId, p.ParentUploaderUID }); mb.Entity().HasKey(p => new { p.Id, p.UploaderUID }); mb.Entity().HasIndex(p => p.UploaderUID); mb.Entity().HasIndex(p => p.Id); mb.Entity().ToTable("chara_data_files"); mb.Entity().HasKey(c => new { c.ParentId, c.ParentUploaderUID, c.GamePath }); mb.Entity().HasIndex(c => c.ParentId); mb.Entity().HasOne(f => f.FileCache).WithMany().HasForeignKey(f => f.FileCacheHash).OnDelete(DeleteBehavior.Cascade); mb.Entity().ToTable("chara_data_file_swaps"); mb.Entity().HasKey(c => new { c.ParentId, c.ParentUploaderUID, c.GamePath }); mb.Entity().HasIndex(c => c.ParentId); mb.Entity().ToTable("chara_data_poses"); mb.Entity().Property(p => p.Id).ValueGeneratedOnAdd(); mb.Entity().HasKey(c => new { c.ParentId, c.ParentUploaderUID, c.Id }); mb.Entity().HasIndex(c => c.ParentId); mb.Entity().ToTable("chara_data_orig_files"); mb.Entity().HasKey(c => new { c.ParentId, c.ParentUploaderUID, c.GamePath }); mb.Entity().HasIndex(c => c.ParentId); mb.Entity().ToTable("chara_data_allowance"); mb.Entity().HasKey(c => new { c.ParentId, c.ParentUploaderUID, c.Id }); mb.Entity().Property(p => p.Id).ValueGeneratedOnAdd(); mb.Entity().HasIndex(c => c.ParentId); mb.Entity().HasOne(u => u.AllowedGroup).WithMany().HasForeignKey(u => u.AllowedGroupGID).OnDelete(DeleteBehavior.Cascade); mb.Entity().HasOne(u => u.AllowedUser).WithMany().HasForeignKey(u => u.AllowedUserUID).OnDelete(DeleteBehavior.Cascade); } }