From c3ecf2a877eff4e49a1febbf7cc4a7c5fbd8e594 Mon Sep 17 00:00:00 2001 From: Noi Date: Wed, 20 Jul 2022 20:37:31 -0700 Subject: [PATCH] Update initial database model and migration --- Data/CachedGuildMessage.cs | 15 +++++ Data/Migrations/.editorconfig | 1 + ...220721021550_InitialMigration.Designer.cs} | 60 ++++--------------- ....cs => 20220721021550_InitialMigration.cs} | 55 +++++------------ .../BotDatabaseContextModelSnapshot.cs | 58 ++++-------------- .../EntityCache/MessageCachingSubservice.cs | 2 +- 6 files changed, 53 insertions(+), 138 deletions(-) rename Data/Migrations/{20220610210059_InitialMigration.Designer.cs => 20220721021550_InitialMigration.Designer.cs} (72%) rename Data/Migrations/{20220610210059_InitialMigration.cs => 20220721021550_InitialMigration.cs} (62%) diff --git a/Data/CachedGuildMessage.cs b/Data/CachedGuildMessage.cs index 3dafdaf..6867bf9 100644 --- a/Data/CachedGuildMessage.cs +++ b/Data/CachedGuildMessage.cs @@ -59,4 +59,19 @@ public class CachedGuildMessage { [ForeignKey(nameof(AuthorId))] [InverseProperty(nameof(CachedUser.GuildMessages))] public CachedUser Author { get; set; } = null!; + + // Used by MessageCachingSubservice + internal static CachedGuildMessage? Clone(CachedGuildMessage? original) { + if (original == null) return null; + return new() { + MessageId = original.MessageId, + AuthorId = original.AuthorId, + GuildId = original.GuildId, + ChannelId = original.ChannelId, + CreatedAt = original.CreatedAt, + EditedAt = original.EditedAt, + AttachmentNames = new(original.AttachmentNames), + Content = original.Content + }; + } } diff --git a/Data/Migrations/.editorconfig b/Data/Migrations/.editorconfig index f7653e7..5def5b3 100644 --- a/Data/Migrations/.editorconfig +++ b/Data/Migrations/.editorconfig @@ -1,3 +1,4 @@ [*.cs] +generated_code = true dotnet_analyzer_diagnostic.category-CodeQuality.severity = none dotnet_diagnostic.CS1591.severity = none \ No newline at end of file diff --git a/Data/Migrations/20220610210059_InitialMigration.Designer.cs b/Data/Migrations/20220721021550_InitialMigration.Designer.cs similarity index 72% rename from Data/Migrations/20220610210059_InitialMigration.Designer.cs rename to Data/Migrations/20220721021550_InitialMigration.Designer.cs index b2552b0..c9966f1 100644 --- a/Data/Migrations/20220610210059_InitialMigration.Designer.cs +++ b/Data/Migrations/20220721021550_InitialMigration.Designer.cs @@ -13,14 +13,14 @@ using RegexBot.Data; namespace RegexBot.Data.Migrations { [DbContext(typeof(BotDatabaseContext))] - [Migration("20220610210059_InitialMigration")] + [Migration("20220721021550_InitialMigration")] partial class InitialMigration { protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "6.0.5") + .HasAnnotation("ProductVersion", "6.0.7") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); @@ -64,12 +64,12 @@ namespace RegexBot.Data.Migrations .HasColumnName("guild_id"); b.HasKey("MessageId") - .HasName("pk_cache_messages"); + .HasName("pk_cache_guildmessages"); b.HasIndex("AuthorId") - .HasDatabaseName("ix_cache_messages_author_id"); + .HasDatabaseName("ix_cache_guildmessages_author_id"); - b.ToTable("cache_messages", (string)null); + b.ToTable("cache_guildmessages", (string)null); }); modelBuilder.Entity("RegexBot.Data.CachedGuildUser", b => @@ -97,9 +97,9 @@ namespace RegexBot.Data.Migrations .HasColumnName("nickname"); b.HasKey("UserId", "GuildId") - .HasName("pk_cache_userguild"); + .HasName("pk_cache_usersinguild"); - b.ToTable("cache_userguild", (string)null); + b.ToTable("cache_usersinguild", (string)null); }); modelBuilder.Entity("RegexBot.Data.CachedUser", b => @@ -129,47 +129,9 @@ namespace RegexBot.Data.Migrations .HasColumnName("username"); b.HasKey("UserId") - .HasName("pk_cache_user"); + .HasName("pk_cache_users"); - b.ToTable("cache_user", (string)null); - }); - - modelBuilder.Entity("RegexBot.Data.GuildLogLine", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("GuildId") - .HasColumnType("bigint") - .HasColumnName("guild_id"); - - b.Property("Message") - .IsRequired() - .HasColumnType("text") - .HasColumnName("message"); - - b.Property("Source") - .IsRequired() - .HasColumnType("text") - .HasColumnName("source"); - - b.Property("Timestamp") - .ValueGeneratedOnAdd() - .HasColumnType("timestamp with time zone") - .HasColumnName("timestamp") - .HasDefaultValueSql("now()"); - - b.HasKey("Id") - .HasName("pk_guild_log"); - - b.HasIndex("GuildId") - .HasDatabaseName("ix_guild_log_guild_id"); - - b.ToTable("guild_log", (string)null); + b.ToTable("cache_users", (string)null); }); modelBuilder.Entity("RegexBot.Data.CachedGuildMessage", b => @@ -179,7 +141,7 @@ namespace RegexBot.Data.Migrations .HasForeignKey("AuthorId") .OnDelete(DeleteBehavior.Cascade) .IsRequired() - .HasConstraintName("fk_cache_messages_cache_user_author_id"); + .HasConstraintName("fk_cache_guildmessages_cache_users_author_id"); b.Navigation("Author"); }); @@ -191,7 +153,7 @@ namespace RegexBot.Data.Migrations .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired() - .HasConstraintName("fk_cache_userguild_cache_user_user_id"); + .HasConstraintName("fk_cache_usersinguild_cache_users_user_id"); b.Navigation("User"); }); diff --git a/Data/Migrations/20220610210059_InitialMigration.cs b/Data/Migrations/20220721021550_InitialMigration.cs similarity index 62% rename from Data/Migrations/20220610210059_InitialMigration.cs rename to Data/Migrations/20220721021550_InitialMigration.cs index 6614a6b..ccbfbc4 100644 --- a/Data/Migrations/20220610210059_InitialMigration.cs +++ b/Data/Migrations/20220721021550_InitialMigration.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using Microsoft.EntityFrameworkCore.Migrations; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; #nullable disable @@ -12,7 +11,7 @@ namespace RegexBot.Data.Migrations protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( - name: "cache_user", + name: "cache_users", columns: table => new { user_id = table.Column(type: "bigint", nullable: false), @@ -23,27 +22,11 @@ namespace RegexBot.Data.Migrations }, constraints: table => { - table.PrimaryKey("pk_cache_user", x => x.user_id); + table.PrimaryKey("pk_cache_users", x => x.user_id); }); migrationBuilder.CreateTable( - name: "guild_log", - columns: table => new - { - id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - guild_id = table.Column(type: "bigint", nullable: false), - timestamp = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), - source = table.Column(type: "text", nullable: false), - message = table.Column(type: "text", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("pk_guild_log", x => x.id); - }); - - migrationBuilder.CreateTable( - name: "cache_messages", + name: "cache_guildmessages", columns: table => new { message_id = table.Column(type: "bigint", nullable: false), @@ -57,17 +40,17 @@ namespace RegexBot.Data.Migrations }, constraints: table => { - table.PrimaryKey("pk_cache_messages", x => x.message_id); + table.PrimaryKey("pk_cache_guildmessages", x => x.message_id); table.ForeignKey( - name: "fk_cache_messages_cache_user_author_id", + name: "fk_cache_guildmessages_cache_users_author_id", column: x => x.author_id, - principalTable: "cache_user", + principalTable: "cache_users", principalColumn: "user_id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( - name: "cache_userguild", + name: "cache_usersinguild", columns: table => new { user_id = table.Column(type: "bigint", nullable: false), @@ -78,39 +61,31 @@ namespace RegexBot.Data.Migrations }, constraints: table => { - table.PrimaryKey("pk_cache_userguild", x => new { x.user_id, x.guild_id }); + table.PrimaryKey("pk_cache_usersinguild", x => new { x.user_id, x.guild_id }); table.ForeignKey( - name: "fk_cache_userguild_cache_user_user_id", + name: "fk_cache_usersinguild_cache_users_user_id", column: x => x.user_id, - principalTable: "cache_user", + principalTable: "cache_users", principalColumn: "user_id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateIndex( - name: "ix_cache_messages_author_id", - table: "cache_messages", + name: "ix_cache_guildmessages_author_id", + table: "cache_guildmessages", column: "author_id"); - - migrationBuilder.CreateIndex( - name: "ix_guild_log_guild_id", - table: "guild_log", - column: "guild_id"); } protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( - name: "cache_messages"); + name: "cache_guildmessages"); migrationBuilder.DropTable( - name: "cache_userguild"); + name: "cache_usersinguild"); migrationBuilder.DropTable( - name: "guild_log"); - - migrationBuilder.DropTable( - name: "cache_user"); + name: "cache_users"); } } } diff --git a/Data/Migrations/BotDatabaseContextModelSnapshot.cs b/Data/Migrations/BotDatabaseContextModelSnapshot.cs index 753f530..75e34f5 100644 --- a/Data/Migrations/BotDatabaseContextModelSnapshot.cs +++ b/Data/Migrations/BotDatabaseContextModelSnapshot.cs @@ -18,7 +18,7 @@ namespace RegexBot.Data.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "6.0.5") + .HasAnnotation("ProductVersion", "6.0.7") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); @@ -62,12 +62,12 @@ namespace RegexBot.Data.Migrations .HasColumnName("guild_id"); b.HasKey("MessageId") - .HasName("pk_cache_messages"); + .HasName("pk_cache_guildmessages"); b.HasIndex("AuthorId") - .HasDatabaseName("ix_cache_messages_author_id"); + .HasDatabaseName("ix_cache_guildmessages_author_id"); - b.ToTable("cache_messages", (string)null); + b.ToTable("cache_guildmessages", (string)null); }); modelBuilder.Entity("RegexBot.Data.CachedGuildUser", b => @@ -95,9 +95,9 @@ namespace RegexBot.Data.Migrations .HasColumnName("nickname"); b.HasKey("UserId", "GuildId") - .HasName("pk_cache_userguild"); + .HasName("pk_cache_usersinguild"); - b.ToTable("cache_userguild", (string)null); + b.ToTable("cache_usersinguild", (string)null); }); modelBuilder.Entity("RegexBot.Data.CachedUser", b => @@ -127,47 +127,9 @@ namespace RegexBot.Data.Migrations .HasColumnName("username"); b.HasKey("UserId") - .HasName("pk_cache_user"); + .HasName("pk_cache_users"); - b.ToTable("cache_user", (string)null); - }); - - modelBuilder.Entity("RegexBot.Data.GuildLogLine", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasColumnName("id"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("GuildId") - .HasColumnType("bigint") - .HasColumnName("guild_id"); - - b.Property("Message") - .IsRequired() - .HasColumnType("text") - .HasColumnName("message"); - - b.Property("Source") - .IsRequired() - .HasColumnType("text") - .HasColumnName("source"); - - b.Property("Timestamp") - .ValueGeneratedOnAdd() - .HasColumnType("timestamp with time zone") - .HasColumnName("timestamp") - .HasDefaultValueSql("now()"); - - b.HasKey("Id") - .HasName("pk_guild_log"); - - b.HasIndex("GuildId") - .HasDatabaseName("ix_guild_log_guild_id"); - - b.ToTable("guild_log", (string)null); + b.ToTable("cache_users", (string)null); }); modelBuilder.Entity("RegexBot.Data.CachedGuildMessage", b => @@ -177,7 +139,7 @@ namespace RegexBot.Data.Migrations .HasForeignKey("AuthorId") .OnDelete(DeleteBehavior.Cascade) .IsRequired() - .HasConstraintName("fk_cache_messages_cache_user_author_id"); + .HasConstraintName("fk_cache_guildmessages_cache_users_author_id"); b.Navigation("Author"); }); @@ -189,7 +151,7 @@ namespace RegexBot.Data.Migrations .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired() - .HasConstraintName("fk_cache_userguild_cache_user_user_id"); + .HasConstraintName("fk_cache_usersinguild_cache_users_user_id"); b.Navigation("User"); }); diff --git a/Services/EntityCache/MessageCachingSubservice.cs b/Services/EntityCache/MessageCachingSubservice.cs index 32c4ede..7ca6998 100644 --- a/Services/EntityCache/MessageCachingSubservice.cs +++ b/Services/EntityCache/MessageCachingSubservice.cs @@ -29,7 +29,7 @@ class MessageCachingSubservice { if (isUpdate) { // Alternative for Discord.Net's MessageUpdated handler: // Notify subscribers of message update using EC entry for the previous message state - var oldMsg = cachedMsg?.MemberwiseClone(); + var oldMsg = CachedGuildMessage.Clone(cachedMsg); await Task.Factory.StartNew(async () => await RunPreUpdateHandlersAsync(oldMsg, arg)); }