using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Nuuru.Server.Migrations
{
///
public partial class AddReactionScoreAndNotifyOnReaction : Migration
{
///
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn(
name: "NotifyOnReaction",
table: "UserSettings",
type: "INTEGER",
nullable: false,
defaultValue: true);
migrationBuilder.AddColumn(
name: "ReactionScore",
table: "AspNetUsers",
type: "INTEGER",
nullable: false,
defaultValue: 0);
// Backfill ReactionScore from existing reactions (subquery-based for SQLite compatibility)
migrationBuilder.Sql(@"
UPDATE AspNetUsers
SET ReactionScore = COALESCE((
SELECT SUM(scored.score)
FROM (
SELECT
CASE r.EntityType
WHEN 1 THEN bp.UploaderId
WHEN 0 THEN bc.UserId
WHEN 2 THEN fp.AuthorId
END AS owner_id,
r.UserId AS reactor_id,
CASE r.EmoteName
WHEN 'thumbsup' THEN 1 WHEN 'gem' THEN 1 WHEN 'wholesome' THEN 1
WHEN 'fact' THEN 1 WHEN 'tsmt' THEN 1 WHEN 'keyed' THEN 1
WHEN 'hot' THEN 1 WHEN 'true' THEN 1 WHEN 'feelsgoodman' THEN 1
WHEN 'kek' THEN 1 WHEN 'dreamy' THEN 1 WHEN 'giga' THEN 1
WHEN 'hunk' THEN 1 WHEN 'jamming' THEN 1 WHEN 'calm' THEN 1
WHEN 'cat' THEN 1 WHEN 'dog' THEN 1
WHEN 'thumbsdown' THEN -1 WHEN 'coal' THEN -1 WHEN 'brainlet' THEN -1
WHEN 'disgusted' THEN -1 WHEN 'itsover' THEN -1 WHEN 'sick' THEN -1
WHEN 'false' THEN -1 WHEN 'ack' THEN -1 WHEN 'rage' THEN -1
WHEN 'fuming' THEN -1 WHEN 'skull' THEN -1
ELSE 0
END AS score
FROM Reactions r
LEFT JOIN BooruPosts bp ON r.EntityType = 1 AND r.EntityId = bp.Id
LEFT JOIN BooruComments bc ON r.EntityType = 0 AND r.EntityId = bc.Id
LEFT JOIN ForumPosts fp ON r.EntityType = 2 AND r.EntityId = fp.Id
) scored
WHERE scored.owner_id = AspNetUsers.Id
AND scored.reactor_id != AspNetUsers.Id
), 0);
");
// Also backfill from existing post votes
migrationBuilder.Sql(@"
UPDATE AspNetUsers
SET ReactionScore = ReactionScore + COALESCE((
SELECT SUM(v.Value)
FROM BooruPostVotes v
INNER JOIN BooruPosts bp ON v.PostId = bp.Id
WHERE bp.UploaderId = AspNetUsers.Id
AND v.UserId != AspNetUsers.Id
), 0);
");
}
///
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "NotifyOnReaction",
table: "UserSettings");
migrationBuilder.DropColumn(
name: "ReactionScore",
table: "AspNetUsers");
}
}
}