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 Permissions { get; set; } public DbSet GroupPairPreferredPermissions { get; set; } public DbSet UserDefaultPreferredPermissions { get; set; } public IQueryable GetAllPairsForUser(string uid) => FromExpression(() => GetAllPairsForUser(uid)); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().ToTable("auth"); modelBuilder.Entity().ToTable("users"); modelBuilder.Entity().ToTable("file_caches"); modelBuilder.Entity().HasIndex(c => c.UploaderUID); modelBuilder.Entity().ToTable("client_pairs"); modelBuilder.Entity().HasKey(u => new { u.UserUID, u.OtherUserUID }); modelBuilder.Entity().HasIndex(c => c.UserUID); modelBuilder.Entity().HasIndex(c => c.OtherUserUID); modelBuilder.Entity().ToTable("forbidden_upload_entries"); modelBuilder.Entity().ToTable("banned_users"); modelBuilder.Entity().ToTable("lodestone_auth"); modelBuilder.Entity().ToTable("banned_registrations"); modelBuilder.Entity().ToTable("groups"); modelBuilder.Entity().HasIndex(c => c.OwnerUID); modelBuilder.Entity().ToTable("group_pairs"); modelBuilder.Entity().HasKey(u => new { u.GroupGID, u.GroupUserUID }); modelBuilder.Entity().HasIndex(c => c.GroupUserUID); modelBuilder.Entity().HasIndex(c => c.GroupGID); modelBuilder.Entity().ToTable("group_bans"); modelBuilder.Entity().HasKey(u => new { u.GroupGID, u.BannedUserUID }); modelBuilder.Entity().HasIndex(c => c.BannedUserUID); modelBuilder.Entity().HasIndex(c => c.GroupGID); modelBuilder.Entity().ToTable("group_temp_invites"); modelBuilder.Entity().HasKey(u => new { u.GroupGID, u.Invite }); modelBuilder.Entity().HasIndex(c => c.GroupGID); modelBuilder.Entity().HasIndex(c => c.Invite); modelBuilder.Entity().ToTable("user_profile_data"); modelBuilder.Entity().HasKey(c => c.UserUID); modelBuilder.Entity().ToTable("user_profile_data_reports"); modelBuilder.Entity().ToTable("user_permission_sets"); modelBuilder.Entity().HasKey(u => new { u.UserUID, u.OtherUserUID }); modelBuilder.Entity().HasIndex(c => c.UserUID); modelBuilder.Entity().HasIndex(c => c.OtherUserUID); modelBuilder.Entity().ToTable("group_pair_preferred_permissions"); modelBuilder.Entity().HasKey(u => new { u.UserUID, u.GroupGID }); modelBuilder.Entity().HasIndex(c => c.UserUID); modelBuilder.Entity().HasIndex(c => c.GroupGID); modelBuilder.Entity().ToTable("user_default_preferred_permissions"); modelBuilder.Entity().HasKey(u => u.UserUID); modelBuilder.Entity().HasIndex(u => u.UserUID); modelBuilder.Entity().HasOne(u => u.User); modelBuilder.HasDbFunction(typeof(MareDbContext).GetMethod(nameof(GetAllPairsForUser), new[] { typeof(string) })) .HasName("get_all_pairs_for_user"); modelBuilder.Entity().HasNoKey(); modelBuilder.Entity().ToTable("user_permission_query", t => t.ExcludeFromMigrations()); } }