From 670d8a57e488ec8cb84e2da85e069f73c13e58a9 Mon Sep 17 00:00:00 2001 From: Samuel Gaus Date: Mon, 24 Jun 2024 09:58:19 +0100 Subject: [PATCH] Add data migration for Summon Mayfly Swarm (#95) --- packages/excavator-web/etl.ts | 2 +- packages/excavator-web/package.json | 3 +- .../data-migration.ts | 37 +++++++++++++++++++ .../migration.sql | 11 ++++++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 packages/excavator-web/prisma/migrations/20240624083527_fix_mayfly_zone/data-migration.ts create mode 100644 packages/excavator-web/prisma/migrations/20240624083527_fix_mayfly_zone/migration.sql diff --git a/packages/excavator-web/etl.ts b/packages/excavator-web/etl.ts index 29aaff7..cb59ca9 100644 --- a/packages/excavator-web/etl.ts +++ b/packages/excavator-web/etl.ts @@ -97,7 +97,7 @@ async function deleteKmails(ids: number[]) { return text.includes(`${ids.length} messages deleted.`); } -function hashData(data: Record) { +export function hashData(data: Record) { return crypto .createHash("md5") .update( diff --git a/packages/excavator-web/package.json b/packages/excavator-web/package.json index 7853edb..b6b6657 100644 --- a/packages/excavator-web/package.json +++ b/packages/excavator-web/package.json @@ -10,7 +10,8 @@ "start": "NODE_ENV=production node --import tsx ./server.ts", "etl": "node --import tsx ./etl.ts", "format": "prettier --write .", - "lint": "prettier --check ." + "lint": "prettier --check .", + "data-migration:fix-mayfly-zone": "node --import tsx ./prisma/migrations/20240624083527_fix_mayfly_zone/data-migration.ts" }, "dependencies": { "@chakra-ui/icons": "^2.1.1", diff --git a/packages/excavator-web/prisma/migrations/20240624083527_fix_mayfly_zone/data-migration.ts b/packages/excavator-web/prisma/migrations/20240624083527_fix_mayfly_zone/data-migration.ts new file mode 100644 index 0000000..2953d87 --- /dev/null +++ b/packages/excavator-web/prisma/migrations/20240624083527_fix_mayfly_zone/data-migration.ts @@ -0,0 +1,37 @@ +import { PrismaClient } from "@prisma/client"; + +import { hashData } from "../../../etl.js"; + +const prisma = new PrismaClient(); + +async function main() { + await prisma.$transaction(async (tx) => { + const data = await tx.spadingData.findMany({ + where: { + project: "Summon Mayfly Swarm", + data: { + path: ["area"], + equals: "Conspiracy Island", + }, + }, + }); + + for (const datum of data) { + await tx.spadingData.update({ + where: { id: datum.id }, + data: { + dataHash: hashData( + datum.data as unknown as Record, + ), + }, + }); + } + }); +} + +main() + .catch(async (e) => { + console.error(e); + process.exit(1); + }) + .finally(async () => await prisma.$disconnect()); diff --git a/packages/excavator-web/prisma/migrations/20240624083527_fix_mayfly_zone/migration.sql b/packages/excavator-web/prisma/migrations/20240624083527_fix_mayfly_zone/migration.sql new file mode 100644 index 0000000..49b4ac5 --- /dev/null +++ b/packages/excavator-web/prisma/migrations/20240624083527_fix_mayfly_zone/migration.sql @@ -0,0 +1,11 @@ +-- Update the area of Mayfly data to be the zone instead of the location. This was only done for Conspiracy Island locations. +UPDATE "SpadingData" +SET + "data" = jsonb_set (data, '{area}', '"Conspiracy Island"') +WHERE + "project" = 'Summon Mayfly Swarm' + AND "data"->>'area' IN ( + 'The Secret Government Laboratory', + 'The Mansion of Dr. Weirdeaux', + 'The Deep Dark Jungle' + ); \ No newline at end of file