From fbe52f72d66e08e642cfe20b85abba5433396a51 Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Thu, 5 Feb 2026 23:19:59 -0500 Subject: [PATCH] Refactor reactions to track per-user instead of aggregate count Replace Reaction.Count with UserId foreign key to User entity, add unique index on (MessageId, EmojiName, UserId) to prevent duplicates, and configure the User-Reactions relationship. Co-Authored-By: Claude Opus 4.6 --- src/DiscordArchiveManager/Data/DiscordArchiveContext.cs | 6 ++++++ src/DiscordArchiveManager/Models/Entities/Reaction.cs | 7 ++++++- src/DiscordArchiveManager/Models/Entities/User.cs | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/DiscordArchiveManager/Data/DiscordArchiveContext.cs b/src/DiscordArchiveManager/Data/DiscordArchiveContext.cs index aec49aa..5f717b8 100644 --- a/src/DiscordArchiveManager/Data/DiscordArchiveContext.cs +++ b/src/DiscordArchiveManager/Data/DiscordArchiveContext.cs @@ -111,7 +111,13 @@ public class DiscordArchiveContext : DbContext .WithMany(m => m.Reactions) .HasForeignKey(e => e.MessageId) .OnDelete(DeleteBehavior.Cascade); + entity.HasOne(e => e.User) + .WithMany(u => u.Reactions) + .HasForeignKey(e => e.UserId) + .OnDelete(DeleteBehavior.Restrict); entity.HasIndex(e => e.MessageId); + entity.HasIndex(e => e.UserId); + entity.HasIndex(e => new { e.MessageId, e.EmojiName, e.UserId }).IsUnique(); }); // Mention configuration diff --git a/src/DiscordArchiveManager/Models/Entities/Reaction.cs b/src/DiscordArchiveManager/Models/Entities/Reaction.cs index 9eaa126..7fc6de7 100644 --- a/src/DiscordArchiveManager/Models/Entities/Reaction.cs +++ b/src/DiscordArchiveManager/Models/Entities/Reaction.cs @@ -19,9 +19,14 @@ public class Reaction [MaxLength(256)] public string EmojiName { get; set; } = null!; - public int Count { get; set; } + [Required] + [MaxLength(32)] + public string UserId { get; set; } = null!; // Navigation properties [ForeignKey(nameof(MessageId))] public Message Message { get; set; } = null!; + + [ForeignKey(nameof(UserId))] + public User User { get; set; } = null!; } diff --git a/src/DiscordArchiveManager/Models/Entities/User.cs b/src/DiscordArchiveManager/Models/Entities/User.cs index 1ca4a48..9303b71 100644 --- a/src/DiscordArchiveManager/Models/Entities/User.cs +++ b/src/DiscordArchiveManager/Models/Entities/User.cs @@ -22,4 +22,5 @@ public class User public ICollection Snapshots { get; set; } = new List(); public ICollection Messages { get; set; } = new List(); public ICollection Mentions { get; set; } = new List(); + public ICollection Reactions { get; set; } = new List(); }