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 <noreply@anthropic.com>
This commit is contained in:
2026-02-05 23:19:59 -05:00
parent 7896f9ef9a
commit fbe52f72d6
3 changed files with 13 additions and 1 deletions

View File

@@ -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

View File

@@ -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!;
}

View File

@@ -22,4 +22,5 @@ public class User
public ICollection<UserSnapshot> Snapshots { get; set; } = new List<UserSnapshot>();
public ICollection<Message> Messages { get; set; } = new List<Message>();
public ICollection<Mention> Mentions { get; set; } = new List<Mention>();
public ICollection<Reaction> Reactions { get; set; } = new List<Reaction>();
}