using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Nuuru.Server.Migrations.PostgreSQL
{
///
public partial class AddReactionScoreAndNotifyOnReaction : Migration
{
///
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn(
name: "NotifyOnReaction",
table: "UserSettings",
type: "boolean",
nullable: false,
defaultValue: true);
migrationBuilder.AddColumn(
name: "ReactionScore",
table: "AspNetUsers",
type: "integer",
nullable: false,
defaultValue: 0);
// Backfill ReactionScore from existing reactions (join-based, not correlated subquery)
migrationBuilder.Sql(@"
UPDATE ""AspNetUsers"" u
SET ""ReactionScore"" = sub.""total""
FROM (
SELECT owner_id, SUM(score) AS ""total""
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 owner_id IS NOT NULL AND reactor_id != owner_id
GROUP BY owner_id
) sub
WHERE u.""Id"" = sub.owner_id;
");
// Also backfill from existing post votes (join-based, not correlated subquery)
migrationBuilder.Sql(@"
UPDATE ""AspNetUsers"" u
SET ""ReactionScore"" = ""ReactionScore"" + sub.""total""
FROM (
SELECT bp.""UploaderId"" AS owner_id, SUM(v.""Value"") AS ""total""
FROM ""BooruPostVotes"" v
INNER JOIN ""BooruPosts"" bp ON v.""PostId"" = bp.""Id""
WHERE v.""UserId"" != bp.""UploaderId""
GROUP BY bp.""UploaderId""
) sub
WHERE u.""Id"" = sub.owner_id;
");
}
///
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "NotifyOnReaction",
table: "UserSettings");
migrationBuilder.DropColumn(
name: "ReactionScore",
table: "AspNetUsers");
}
}
}