From 57e27b78350351442fc33f31b2582e53a980136d Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Sun, 7 Jan 2024 16:48:06 +0100 Subject: [PATCH] Refactor the DatabaseContext --- .../Core/Database/DatabaseContext.cs | 330 ++++++------------ 1 file changed, 116 insertions(+), 214 deletions(-) diff --git a/Iceshrimp.Backend/Core/Database/DatabaseContext.cs b/Iceshrimp.Backend/Core/Database/DatabaseContext.cs index eb48401d..3639017a 100644 --- a/Iceshrimp.Backend/Core/Database/DatabaseContext.cs +++ b/Iceshrimp.Backend/Core/Database/DatabaseContext.cs @@ -1,225 +1,131 @@ -using Iceshrimp.Backend.Core.Database.Tables; +using System.Diagnostics.CodeAnalysis; +using Iceshrimp.Backend.Core.Database.Tables; using Microsoft.EntityFrameworkCore; using Npgsql; namespace Iceshrimp.Backend.Core.Database; -public partial class DatabaseContext : DbContext { - private readonly IConfiguration _config; +[SuppressMessage("ReSharper", "StringLiteralTypo")] +[SuppressMessage("ReSharper", "IdentifierTypo")] +public class DatabaseContext : DbContext { + private readonly IConfiguration? _config; - public DatabaseContext() {} + public DatabaseContext() { } - public DatabaseContext(DbContextOptions options, IConfiguration config) + public DatabaseContext(DbContextOptions options, IConfiguration? config) : base(options) { _config = config; } - public virtual DbSet AbuseUserReports { get; init; } - - public virtual DbSet AccessTokens { get; init; } - - public virtual DbSet Announcements { get; init; } - - public virtual DbSet AnnouncementReads { get; init; } - - public virtual DbSet Antennas { get; init; } - - public virtual DbSet Apps { get; init; } - - public virtual DbSet AttestationChallenges { get; init; } - - public virtual DbSet AuthSessions { get; init; } - - public virtual DbSet Blockings { get; init; } - - public virtual DbSet Channels { get; init; } - - public virtual DbSet ChannelFollowings { get; init; } - - public virtual DbSet ChannelNotePinings { get; init; } - - public virtual DbSet ChartActiveUsers { get; init; } - - public virtual DbSet ChartApRequests { get; init; } - - public virtual DbSet ChartDayActiveUsers { get; init; } - - public virtual DbSet ChartDayApRequests { get; init; } - - public virtual DbSet ChartDayDrives { get; init; } - - public virtual DbSet ChartDayFederations { get; init; } - - public virtual DbSet ChartDayHashtags { get; init; } - - public virtual DbSet ChartDayInstances { get; init; } - - public virtual DbSet ChartDayNetworks { get; init; } - - public virtual DbSet ChartDayNotes { get; init; } - - public virtual DbSet ChartDayPerUserDrives { get; init; } - - public virtual DbSet ChartDayPerUserFollowings { get; init; } - - public virtual DbSet ChartDayPerUserNotes { get; init; } - - public virtual DbSet ChartDayPerUserReactions { get; init; } - - public virtual DbSet ChartDayUsers { get; init; } - - public virtual DbSet ChartDrives { get; init; } - - public virtual DbSet ChartFederations { get; init; } - - public virtual DbSet ChartHashtags { get; init; } - - public virtual DbSet ChartInstances { get; init; } - - public virtual DbSet ChartNetworks { get; init; } - - public virtual DbSet ChartNotes { get; init; } - - public virtual DbSet ChartPerUserDrives { get; init; } - - public virtual DbSet ChartPerUserFollowings { get; init; } - - public virtual DbSet ChartPerUserNotes { get; init; } - - public virtual DbSet ChartPerUserReactions { get; init; } - - public virtual DbSet ChartTests { get; init; } - - public virtual DbSet ChartTestGroupeds { get; init; } - - public virtual DbSet ChartTestUniques { get; init; } - - public virtual DbSet ChartUsers { get; init; } - - public virtual DbSet Clips { get; init; } - - public virtual DbSet ClipNotes { get; init; } - - public virtual DbSet DriveFiles { get; init; } - - public virtual DbSet DriveFolders { get; init; } - - public virtual DbSet Emojis { get; init; } - - public virtual DbSet FollowRequests { get; init; } - - public virtual DbSet Followings { get; init; } - - public virtual DbSet GalleryLikes { get; init; } - - public virtual DbSet GalleryPosts { get; init; } - - public virtual DbSet Hashtags { get; init; } - - public virtual DbSet HtmlNoteCacheEntries { get; init; } - - public virtual DbSet HtmlUserCacheEntries { get; init; } - - public virtual DbSet Instances { get; init; } - - public virtual DbSet MessagingMessages { get; init; } - - public virtual DbSet Meta { get; init; } - - public virtual DbSet Migrations { get; init; } - - public virtual DbSet ModerationLogs { get; init; } - - public virtual DbSet Mutings { get; init; } - - public virtual DbSet Notes { get; init; } - - public virtual DbSet NoteEdits { get; init; } - - public virtual DbSet NoteFavorites { get; init; } - - public virtual DbSet NoteReactions { get; init; } - - public virtual DbSet NoteThreadMutings { get; init; } - - public virtual DbSet NoteUnreads { get; init; } - - public virtual DbSet NoteWatchings { get; init; } - - public virtual DbSet Notifications { get; init; } - - public virtual DbSet OauthApps { get; init; } - - public virtual DbSet OauthTokens { get; init; } - - public virtual DbSet Pages { get; init; } - - public virtual DbSet PageLikes { get; init; } - - public virtual DbSet PasswordResetRequests { get; init; } - - public virtual DbSet Polls { get; init; } - - public virtual DbSet PollVotes { get; init; } - - public virtual DbSet PromoNotes { get; init; } - - public virtual DbSet PromoReads { get; init; } - - public virtual DbSet RegistrationTickets { get; init; } - - public virtual DbSet RegistryItems { get; init; } - - public virtual DbSet Relays { get; init; } - - public virtual DbSet RenoteMutings { get; init; } - - public virtual DbSet Sessions { get; init; } - - public virtual DbSet Signins { get; init; } - - public virtual DbSet SwSubscriptions { get; init; } - - public virtual DbSet UsedUsernames { get; init; } - - public virtual DbSet Users { get; init; } - - public virtual DbSet UserGroups { get; init; } - - public virtual DbSet UserGroupInvitations { get; init; } - - public virtual DbSet UserGroupInvites { get; init; } - - public virtual DbSet UserGroupJoinings { get; init; } - - public virtual DbSet UserIps { get; init; } - - public virtual DbSet UserKeypairs { get; init; } - - public virtual DbSet UserLists { get; init; } - - public virtual DbSet UserListJoinings { get; init; } - - public virtual DbSet UserNotePinings { get; init; } - - public virtual DbSet UserPendings { get; init; } - - public virtual DbSet UserProfiles { get; init; } - - public virtual DbSet UserPublickeys { get; init; } - - public virtual DbSet UserSecurityKeys { get; init; } - - public virtual DbSet Webhooks { get; init; } + public virtual DbSet AbuseUserReports { get; init; } = null!; + public virtual DbSet AccessTokens { get; init; } = null!; + public virtual DbSet Announcements { get; init; } = null!; + public virtual DbSet AnnouncementReads { get; init; } = null!; + public virtual DbSet Antennas { get; init; } = null!; + public virtual DbSet Apps { get; init; } = null!; + public virtual DbSet AttestationChallenges { get; init; } = null!; + public virtual DbSet AuthSessions { get; init; } = null!; + public virtual DbSet Blockings { get; init; } = null!; + public virtual DbSet Channels { get; init; } = null!; + public virtual DbSet ChannelFollowings { get; init; } = null!; + public virtual DbSet ChannelNotePinings { get; init; } = null!; + public virtual DbSet ChartActiveUsers { get; init; } = null!; + public virtual DbSet ChartApRequests { get; init; } = null!; + public virtual DbSet ChartDayActiveUsers { get; init; } = null!; + public virtual DbSet ChartDayApRequests { get; init; } = null!; + public virtual DbSet ChartDayDrives { get; init; } = null!; + public virtual DbSet ChartDayFederations { get; init; } = null!; + public virtual DbSet ChartDayHashtags { get; init; } = null!; + public virtual DbSet ChartDayInstances { get; init; } = null!; + public virtual DbSet ChartDayNetworks { get; init; } = null!; + public virtual DbSet ChartDayNotes { get; init; } = null!; + public virtual DbSet ChartDayPerUserDrives { get; init; } = null!; + public virtual DbSet ChartDayPerUserFollowings { get; init; } = null!; + public virtual DbSet ChartDayPerUserNotes { get; init; } = null!; + public virtual DbSet ChartDayPerUserReactions { get; init; } = null!; + public virtual DbSet ChartDayUsers { get; init; } = null!; + public virtual DbSet ChartDrives { get; init; } = null!; + public virtual DbSet ChartFederations { get; init; } = null!; + public virtual DbSet ChartHashtags { get; init; } = null!; + public virtual DbSet ChartInstances { get; init; } = null!; + public virtual DbSet ChartNetworks { get; init; } = null!; + public virtual DbSet ChartNotes { get; init; } = null!; + public virtual DbSet ChartPerUserDrives { get; init; } = null!; + public virtual DbSet ChartPerUserFollowings { get; init; } = null!; + public virtual DbSet ChartPerUserNotes { get; init; } = null!; + public virtual DbSet ChartPerUserReactions { get; init; } = null!; + public virtual DbSet ChartTests { get; init; } = null!; + public virtual DbSet ChartTestGroupeds { get; init; } = null!; + public virtual DbSet ChartTestUniques { get; init; } = null!; + public virtual DbSet ChartUsers { get; init; } = null!; + public virtual DbSet Clips { get; init; } = null!; + public virtual DbSet ClipNotes { get; init; } = null!; + public virtual DbSet DriveFiles { get; init; } = null!; + public virtual DbSet DriveFolders { get; init; } = null!; + public virtual DbSet Emojis { get; init; } = null!; + public virtual DbSet FollowRequests { get; init; } = null!; + public virtual DbSet Followings { get; init; } = null!; + public virtual DbSet GalleryLikes { get; init; } = null!; + public virtual DbSet GalleryPosts { get; init; } = null!; + public virtual DbSet Hashtags { get; init; } = null!; + public virtual DbSet HtmlNoteCacheEntries { get; init; } = null!; + public virtual DbSet HtmlUserCacheEntries { get; init; } = null!; + public virtual DbSet Instances { get; init; } = null!; + public virtual DbSet MessagingMessages { get; init; } = null!; + public virtual DbSet Meta { get; init; } = null!; + public virtual DbSet Migrations { get; init; } = null!; + public virtual DbSet ModerationLogs { get; init; } = null!; + public virtual DbSet Mutings { get; init; } = null!; + public virtual DbSet Notes { get; init; } = null!; + public virtual DbSet NoteEdits { get; init; } = null!; + public virtual DbSet NoteFavorites { get; init; } = null!; + public virtual DbSet NoteReactions { get; init; } = null!; + public virtual DbSet NoteThreadMutings { get; init; } = null!; + public virtual DbSet NoteUnreads { get; init; } = null!; + public virtual DbSet NoteWatchings { get; init; } = null!; + public virtual DbSet Notifications { get; init; } = null!; + public virtual DbSet OauthApps { get; init; } = null!; + public virtual DbSet OauthTokens { get; init; } = null!; + public virtual DbSet Pages { get; init; } = null!; + public virtual DbSet PageLikes { get; init; } = null!; + public virtual DbSet PasswordResetRequests { get; init; } = null!; + public virtual DbSet Polls { get; init; } = null!; + public virtual DbSet PollVotes { get; init; } = null!; + public virtual DbSet PromoNotes { get; init; } = null!; + public virtual DbSet PromoReads { get; init; } = null!; + public virtual DbSet RegistrationTickets { get; init; } = null!; + public virtual DbSet RegistryItems { get; init; } = null!; + public virtual DbSet Relays { get; init; } = null!; + public virtual DbSet RenoteMutings { get; init; } = null!; + public virtual DbSet Sessions { get; init; } = null!; + public virtual DbSet Signins { get; init; } = null!; + public virtual DbSet SwSubscriptions { get; init; } = null!; + public virtual DbSet UsedUsernames { get; init; } = null!; + public virtual DbSet Users { get; init; } = null!; + public virtual DbSet UserGroups { get; init; } = null!; + public virtual DbSet UserGroupInvitations { get; init; } = null!; + public virtual DbSet UserGroupInvites { get; init; } = null!; + public virtual DbSet UserGroupJoinings { get; init; } = null!; + public virtual DbSet UserIps { get; init; } = null!; + public virtual DbSet UserKeypairs { get; init; } = null!; + public virtual DbSet UserLists { get; init; } = null!; + public virtual DbSet UserListJoinings { get; init; } = null!; + public virtual DbSet UserNotePinings { get; init; } = null!; + public virtual DbSet UserPendings { get; init; } = null!; + public virtual DbSet UserProfiles { get; init; } = null!; + public virtual DbSet UserPublickeys { get; init; } = null!; + public virtual DbSet UserSecurityKeys { get; init; } = null!; + public virtual DbSet Webhooks { get; init; } = null!; protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { - //TODO: load from configuration var dataSourceBuilder = new NpgsqlDataSourceBuilder(); - - var config = _config.GetSection("Database"); - dataSourceBuilder.ConnectionStringBuilder.Host = config["Host"]; - dataSourceBuilder.ConnectionStringBuilder.Username = config["Username"]; - dataSourceBuilder.ConnectionStringBuilder.Password = config["Password"]; + + var config = _config?.GetSection("Database") ?? + throw new Exception("Configuration is missing the [Database] section"); + + dataSourceBuilder.ConnectionStringBuilder.Host = config["Host"]; + dataSourceBuilder.ConnectionStringBuilder.Username = config["Username"]; + dataSourceBuilder.ConnectionStringBuilder.Password = config["Password"]; dataSourceBuilder.ConnectionStringBuilder.Database = config["Database"]; dataSourceBuilder.MapEnum(); @@ -230,7 +136,7 @@ public partial class DatabaseContext : DbContext { dataSourceBuilder.MapEnum(); dataSourceBuilder.MapEnum(); //dataSourceBuilder.MapEnum(); // FIXME: WHY IS THIS ITS OWN ENUM - + optionsBuilder.UseNpgsql(dataSourceBuilder.Build()); } @@ -247,7 +153,7 @@ public partial class DatabaseContext : DbContext { .HasPostgresEnum("user_profile_mutingnotificationtypes_enum", [ "follow", "mention", "reply", "renote", "quote", "reaction", "pollVote", "pollEnded", - "receiveFollowRequest", "followRequestAccepted", "groupInvited", "app" + "receiveFollowRequest", "followRequestAccepted", "groupInvited", "app" ]) .HasPostgresExtension("pg_trgm"); @@ -1733,9 +1639,5 @@ public partial class DatabaseContext : DbContext { entity.HasOne(d => d.User).WithMany(p => p.Webhooks).HasConstraintName("FK_f272c8c8805969e6a6449c77b3c"); }); - - OnModelCreatingPartial(modelBuilder); } - - partial void OnModelCreatingPartial(ModelBuilder modelBuilder); } \ No newline at end of file