-- Deduplicate reports before adding the unique constraint:
-- keep the earliest report per (userId, date), move tasks from the
-- duplicates onto it, then delete the duplicates.

UPDATE "Task"
SET "reportId" = (
    SELECT keep."id"
    FROM "Report" keep
    JOIN "Report" cur ON cur."id" = "Task"."reportId"
    WHERE keep."userId" = cur."userId"
      AND keep."date" = cur."date"
    ORDER BY keep."createdAt" ASC, keep."id" ASC
    LIMIT 1
);

DELETE FROM "Report"
WHERE "id" IN (
    SELECT "id" FROM (
        SELECT "id",
               ROW_NUMBER() OVER (
                   PARTITION BY "userId", "date"
                   ORDER BY "createdAt" ASC, "id" ASC
               ) AS rn
        FROM "Report"
    )
    WHERE rn > 1
);

-- CreateIndex
CREATE UNIQUE INDEX "Report_userId_date_key" ON "Report"("userId", "date");
