diff --git a/db/mysql/migrations/04_remove_cascade_delete/migration.sql b/db/mysql/migrations/04_remove_cascade_delete/migration.sql new file mode 100644 index 00000000..542784a9 --- /dev/null +++ b/db/mysql/migrations/04_remove_cascade_delete/migration.sql @@ -0,0 +1,35 @@ +-- DropForeignKey +ALTER TABLE `event` DROP FOREIGN KEY `event_ibfk_2`; + +-- DropForeignKey +ALTER TABLE `event` DROP FOREIGN KEY `event_ibfk_1`; + +-- DropForeignKey +ALTER TABLE `pageview` DROP FOREIGN KEY `pageview_ibfk_2`; + +-- DropForeignKey +ALTER TABLE `pageview` DROP FOREIGN KEY `pageview_ibfk_1`; + +-- DropForeignKey +ALTER TABLE `session` DROP FOREIGN KEY `session_ibfk_1`; + +-- DropForeignKey +ALTER TABLE `website` DROP FOREIGN KEY `website_ibfk_1`; + +-- AddForeignKey +ALTER TABLE `event` ADD CONSTRAINT `event_session_id_fkey` FOREIGN KEY (`session_id`) REFERENCES `session`(`session_id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `event` ADD CONSTRAINT `event_website_id_fkey` FOREIGN KEY (`website_id`) REFERENCES `website`(`website_id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `pageview` ADD CONSTRAINT `pageview_session_id_fkey` FOREIGN KEY (`session_id`) REFERENCES `session`(`session_id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `pageview` ADD CONSTRAINT `pageview_website_id_fkey` FOREIGN KEY (`website_id`) REFERENCES `website`(`website_id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `session` ADD CONSTRAINT `session_website_id_fkey` FOREIGN KEY (`website_id`) REFERENCES `website`(`website_id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `website` ADD CONSTRAINT `website_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `account`(`user_id`) ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/db/mysql/schema.prisma b/db/mysql/schema.prisma index 6ac27e04..3e0093ab 100644 --- a/db/mysql/schema.prisma +++ b/db/mysql/schema.prisma @@ -24,8 +24,8 @@ model event { created_at DateTime? @default(now()) @db.Timestamp(0) url String @db.VarChar(500) event_name String @db.VarChar(50) - session session @relation(fields: [session_id], references: [session_id], onDelete: Cascade, onUpdate: NoAction, map: "event_ibfk_2") - website website @relation(fields: [website_id], references: [website_id], onDelete: Cascade, onUpdate: NoAction, map: "event_ibfk_1") + session session @relation(fields: [session_id], references: [session_id]) + website website @relation(fields: [website_id], references: [website_id]) event_data event_data? @@index([created_at]) @@ -47,8 +47,8 @@ model pageview { created_at DateTime? @default(now()) @db.Timestamp(0) url String @db.VarChar(500) referrer String? @db.VarChar(500) - session session @relation(fields: [session_id], references: [session_id], onDelete: Cascade, onUpdate: NoAction, map: "pageview_ibfk_2") - website website @relation(fields: [website_id], references: [website_id], onDelete: Cascade, onUpdate: NoAction, map: "pageview_ibfk_1") + session session @relation(fields: [session_id], references: [session_id]) + website website @relation(fields: [website_id], references: [website_id]) @@index([created_at]) @@index([session_id]) @@ -69,7 +69,7 @@ model session { screen String? @db.VarChar(11) language String? @db.VarChar(35) country String? @db.Char(2) - website website @relation(fields: [website_id], references: [website_id], onDelete: Cascade, onUpdate: NoAction, map: "session_ibfk_1") + website website @relation(fields: [website_id], references: [website_id]) event event[] pageview pageview[] @@ -85,7 +85,7 @@ model website { domain String? @db.VarChar(500) share_id String? @unique() @db.VarChar(64) created_at DateTime? @default(now()) @db.Timestamp(0) - account account @relation(fields: [user_id], references: [user_id], onDelete: Cascade, onUpdate: NoAction, map: "website_ibfk_1") + account account @relation(fields: [user_id], references: [user_id]) event event[] pageview pageview[] session session[] diff --git a/db/postgresql/migrations/04_remove_casade_delete/migration.sql b/db/postgresql/migrations/04_remove_casade_delete/migration.sql new file mode 100644 index 00000000..d0995938 --- /dev/null +++ b/db/postgresql/migrations/04_remove_casade_delete/migration.sql @@ -0,0 +1,35 @@ +-- DropForeignKey +ALTER TABLE "event" DROP CONSTRAINT IF EXISTS "event_session_id_fkey"; + +-- DropForeignKey +ALTER TABLE "event" DROP CONSTRAINT IF EXISTS "event_website_id_fkey"; + +-- DropForeignKey +ALTER TABLE "pageview" DROP CONSTRAINT IF EXISTS "pageview_session_id_fkey"; + +-- DropForeignKey +ALTER TABLE "pageview" DROP CONSTRAINT IF EXISTS "pageview_website_id_fkey"; + +-- DropForeignKey +ALTER TABLE "session" DROP CONSTRAINT IF EXISTS "session_website_id_fkey"; + +-- DropForeignKey +ALTER TABLE "website" DROP CONSTRAINT IF EXISTS "website_user_id_fkey"; + +-- AddForeignKey +ALTER TABLE "event" ADD CONSTRAINT EXISTS "event_session_id_fkey" FOREIGN KEY ("session_id") REFERENCES "session"("session_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "event" ADD CONSTRAINT "event_website_id_fkey" FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "pageview" ADD CONSTRAINT "pageview_session_id_fkey" FOREIGN KEY ("session_id") REFERENCES "session"("session_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "pageview" ADD CONSTRAINT "pageview_website_id_fkey" FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "session" ADD CONSTRAINT "session_website_id_fkey" FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "website" ADD CONSTRAINT "website_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "account"("user_id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/db/postgresql/schema.prisma b/db/postgresql/schema.prisma index 19d206d8..1608d32c 100644 --- a/db/postgresql/schema.prisma +++ b/db/postgresql/schema.prisma @@ -24,8 +24,8 @@ model event { created_at DateTime? @default(now()) @db.Timestamptz(6) url String @db.VarChar(500) event_name String @db.VarChar(50) - session session @relation(fields: [session_id], references: [session_id], onDelete: Cascade) - website website @relation(fields: [website_id], references: [website_id], onDelete: Cascade) + session session @relation(fields: [session_id], references: [session_id]) + website website @relation(fields: [website_id], references: [website_id]) event_data event_data? @@index([created_at]) @@ -47,8 +47,8 @@ model pageview { created_at DateTime? @default(now()) @db.Timestamptz(6) url String @db.VarChar(500) referrer String? @db.VarChar(500) - session session @relation(fields: [session_id], references: [session_id], onDelete: Cascade) - website website @relation(fields: [website_id], references: [website_id], onDelete: Cascade) + session session @relation(fields: [session_id], references: [session_id]) + website website @relation(fields: [website_id], references: [website_id]) @@index([created_at]) @@index([session_id]) @@ -69,7 +69,7 @@ model session { screen String? @db.VarChar(11) language String? @db.VarChar(35) country String? @db.Char(2) - website website @relation(fields: [website_id], references: [website_id], onDelete: Cascade) + website website @relation(fields: [website_id], references: [website_id]) pageview pageview[] event event[] @@ -85,7 +85,7 @@ model website { domain String? @db.VarChar(500) share_id String? @unique @db.VarChar(64) created_at DateTime? @default(now()) @db.Timestamptz(6) - account account @relation(fields: [user_id], references: [user_id], onDelete: Cascade) + account account @relation(fields: [user_id], references: [user_id]) pageview pageview[] session session[] event event[] diff --git a/queries/admin/account/deleteAccount.js b/queries/admin/account/deleteAccount.js index 402b4111..8c4e2c0c 100644 --- a/queries/admin/account/deleteAccount.js +++ b/queries/admin/account/deleteAccount.js @@ -2,10 +2,27 @@ import { prisma, runQuery } from 'lib/db'; export async function deleteAccount(user_id) { return runQuery( - prisma.account.delete({ - where: { - user_id, - }, - }), + prisma.$transaction([ + prisma.pageview.deleteMany({ + where: { session: { website: { user_id } } }, + }), + prisma.event_data.deleteMany({ + where: { event: { session: { website: { user_id } } } }, + }), + prisma.event.deleteMany({ + where: { session: { website: { user_id } } }, + }), + prisma.session.deleteMany({ + where: { website: { user_id } }, + }), + prisma.website.deleteMany({ + where: { user_id }, + }), + prisma.account.delete({ + where: { + user_id, + }, + }), + ]), ); } diff --git a/queries/admin/website/deleteWebsite.js b/queries/admin/website/deleteWebsite.js index 81cef845..129351ea 100644 --- a/queries/admin/website/deleteWebsite.js +++ b/queries/admin/website/deleteWebsite.js @@ -2,10 +2,22 @@ import { prisma, runQuery } from 'lib/db'; export async function deleteWebsite(website_id) { return runQuery( - prisma.website.delete({ - where: { - website_id, - }, - }), + prisma.$transaction([ + prisma.pageview.deleteMany({ + where: { session: { website: { website_id } } }, + }), + prisma.event_data.deleteMany({ + where: { event: { session: { website: { website_id } } } }, + }), + prisma.event.deleteMany({ + where: { session: { website: { website_id } } }, + }), + prisma.session.deleteMany({ + where: { website: { website_id } }, + }), + prisma.website.delete({ + where: { website_id }, + }), + ]), ); }