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; } public DbSet McdfShares { get; set; } public DbSet McdfShareAllowedUsers { get; set; } public DbSet McdfShareAllowedGroups { 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); mb.Entity().ToTable("mcdf_shares"); mb.Entity().HasIndex(s => s.OwnerUID); mb.Entity().HasOne(s => s.Owner).WithMany().HasForeignKey(s => s.OwnerUID).OnDelete(DeleteBehavior.Cascade); mb.Entity().Property(s => s.Description).HasColumnType("text"); mb.Entity().Property(s => s.CipherData).HasColumnType("bytea"); mb.Entity().Property(s => s.Nonce).HasColumnType("bytea"); mb.Entity().Property(s => s.Salt).HasColumnType("bytea"); mb.Entity().Property(s => s.Tag).HasColumnType("bytea"); mb.Entity().Property(s => s.CreatedUtc).HasColumnType("timestamp with time zone"); mb.Entity().Property(s => s.UpdatedUtc).HasColumnType("timestamp with time zone"); mb.Entity().Property(s => s.ExpiresAtUtc).HasColumnType("timestamp with time zone"); mb.Entity().Property(s => s.DownloadCount).HasColumnType("integer"); mb.Entity().HasMany(s => s.AllowedIndividuals).WithOne(a => a.Share).HasForeignKey(a => a.ShareId).OnDelete(DeleteBehavior.Cascade); mb.Entity().HasMany(s => s.AllowedSyncshells).WithOne(a => a.Share).HasForeignKey(a => a.ShareId).OnDelete(DeleteBehavior.Cascade); mb.Entity().ToTable("mcdf_share_allowed_users"); mb.Entity().HasKey(u => new { u.ShareId, u.AllowedIndividualUid }); mb.Entity().HasIndex(u => u.AllowedIndividualUid); mb.Entity().ToTable("mcdf_share_allowed_groups"); mb.Entity().HasKey(g => new { g.ShareId, g.AllowedGroupGid }); mb.Entity().HasIndex(g => g.AllowedGroupGid); } }