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..7d5c39bf 100644 --- a/queries/admin/account/deleteAccount.js +++ b/queries/admin/account/deleteAccount.js @@ -2,10 +2,33 @@ 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.event.deleteMany({ + where: { 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..1cfc3895 100644 --- a/queries/admin/website/deleteWebsite.js +++ b/queries/admin/website/deleteWebsite.js @@ -2,10 +2,28 @@ 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.event.deleteMany({ + where: { 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 }, + }), + ]), ); }