diff --git a/db/mysql/migrations/02_add_event_data/migration.sql b/db/mysql/migrations/02_add_event_data/migration.sql index d8bfa0b0..83392fb4 100644 --- a/db/mysql/migrations/02_add_event_data/migration.sql +++ b/db/mysql/migrations/02_add_event_data/migration.sql @@ -1,5 +1,46 @@ --- AlterTable -ALTER TABLE `event` ADD COLUMN `event_name` VARCHAR(50) NULL; +-- DropForeignKey +alter table `event` drop foreign key `event_ibfk_1`; +alter table `event` drop foreign key `event_ibfk_2`; + +drop index `event_created_at_idx` on `event`; +drop index `event_session_id_idx` on `event`; +drop index `event_website_id_idx` on `event`; + +create index `event_old_created_at_idx` on `event` (created_at); +create index `event_old_session_id_idx` on `event` (session_id); +create index `event_old_website_id_idx` on `event` (website_id); + +-- RenameTable +rename table `event` to `_event_old`; + +-- CreateTable +create table `event` +( + event_id int unsigned auto_increment + primary key, + website_id int unsigned not null, + session_id int unsigned not null, + created_at timestamp default CURRENT_TIMESTAMP null, + url varchar(500) not null, + event_name varchar(50) NOT NULL, + constraint event_ibfk_1 + foreign key (website_id) references `website` (website_id) + on delete cascade, + constraint event_ibfk_2 + foreign key (session_id) references `session` (session_id) + on delete cascade +) + collate = utf8mb4_unicode_ci; + +create index `event_created_at_idx` + on `event` (created_at); + +create index `event_session_id_idx` + on `event` (session_id); + +create index `event_website_id_idx` + on `event` (website_id); + -- CreateTable CREATE TABLE `event_data` ( @@ -24,25 +65,4 @@ ALTER TABLE `session` RENAME INDEX `session_uuid` TO `session_session_uuid_key`; ALTER TABLE `website` RENAME INDEX `share_id` TO `website_share_id_key`; -- RenameIndex -ALTER TABLE `website` RENAME INDEX `website_uuid` TO `website_website_uuid_key`; - - -/* - Warnings: - - - You are about to drop the column `event_type` on the `event` table. All the data in the column will be lost. - - You are about to drop the column `event_value` on the `event` table. All the data in the column will be lost. - -*/ --- Populate event_name -update `event` -set event_name = event_value; - --- Set event_name not null -ALTER TABLE `event` -MODIFY `event_name` VARCHAR(50) NOT NULL; - --- Drop old columns -ALTER TABLE `event` -DROP COLUMN `event_type`, -DROP COLUMN `event_value`; \ No newline at end of file +ALTER TABLE `website` RENAME INDEX `website_uuid` TO `website_website_uuid_key`; \ No newline at end of file diff --git a/db/mysql/schema.prisma b/db/mysql/schema.prisma index 3d920c53..7b7036a7 100644 --- a/db/mysql/schema.prisma +++ b/db/mysql/schema.prisma @@ -34,10 +34,10 @@ model event { } model event_data { - id Int @id @default(autoincrement()) @map("event_data_id") - eventId Int @unique @map("event_id") @db.UnsignedInt - eventData Json @map("event_data") - event event @relation(fields: [eventId], references: [event_id]) + event_data_id Int @id @default(autoincrement()) + event_id Int @unique @db.UnsignedInt + event_data Json + event event @relation(fields: [event_id], references: [event_id]) } model pageview { diff --git a/db/postgresql/migrations/02_add_event_data/migration.sql b/db/postgresql/migrations/02_add_event_data/migration.sql index 0574abbd..62587e29 100644 --- a/db/postgresql/migrations/02_add_event_data/migration.sql +++ b/db/postgresql/migrations/02_add_event_data/migration.sql @@ -1,5 +1,42 @@ --- AlterTable -ALTER TABLE event RENAME TO event_old; +-- DropForeignKey +ALTER TABLE "event" DROP CONSTRAINT "event_session_id_fkey"; +ALTER TABLE "event" DROP CONSTRAINT "event_website_id_fkey"; + +-- RenameIndex +ALTER INDEX "event_pkey" RENAME TO "event_old_pkey"; +ALTER INDEX "event_created_at_idx" RENAME TO "event_old_created_at_idx"; +ALTER INDEX "event_session_id_idx" RENAME TO "event_old_session_id_idx"; +ALTER INDEX "event_website_id_idx" RENAME TO "event_old_website_id_idx"; + +-- RenameTable +ALTER TABLE "event" RENAME TO "_event_old"; + +-- CreateTable +CREATE TABLE "event" ( + "event_id" SERIAL NOT NULL, + "website_id" INTEGER NOT NULL, + "session_id" INTEGER NOT NULL, + "created_at" TIMESTAMPTZ(6) DEFAULT CURRENT_TIMESTAMP, + "url" VARCHAR(500) NOT NULL, + "event_name" VARCHAR(50) NOT NULL, + + PRIMARY KEY ("event_id") +); + +-- CreateIndex +CREATE INDEX "event_created_at_idx" ON "event"("created_at"); + +-- CreateIndex +CREATE INDEX "event_session_id_idx" ON "event"("session_id"); + +-- CreateIndex +CREATE INDEX "event_website_id_idx" ON "event"("website_id"); + +-- AddForeignKey +ALTER TABLE "event" ADD CONSTRAINT "event_session_id_fkey" FOREIGN KEY ("session_id") REFERENCES "session"("session_id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "event" ADD CONSTRAINT "event_website_id_fkey" FOREIGN KEY ("website_id") REFERENCES "website"("website_id") ON DELETE CASCADE ON UPDATE CASCADE; -- CreateTable CREATE TABLE "event_data" ( @@ -26,22 +63,4 @@ ALTER INDEX "session.session_uuid_unique" RENAME TO "session_session_uuid_key"; ALTER INDEX "website.share_id_unique" RENAME TO "website_share_id_key"; -- RenameIndex -ALTER INDEX "website.website_uuid_unique" RENAME TO "website_website_uuid_key"; - -/* - Warnings: - - - You are about to drop the column `event_type` on the `event` table. All the data in the column will be lost. - - You are about to drop the column `event_value` on the `event` table. All the data in the column will be lost. - -*/ --- Populate event_name -update event -set "event_name" = event.event_value; - --- Set event_name not null -ALTER TABLE "event" ALTER COLUMN "event_name" SET NOT NULL; - --- Drop old columns -ALTER TABLE "event" DROP COLUMN "event_type", -DROP COLUMN "event_value"; +ALTER INDEX "website.website_uuid_unique" RENAME TO "website_website_uuid_key"; \ No newline at end of file diff --git a/db/postgresql/schema.prisma b/db/postgresql/schema.prisma index 2f2cc8de..f4106877 100644 --- a/db/postgresql/schema.prisma +++ b/db/postgresql/schema.prisma @@ -33,11 +33,25 @@ model event { @@index([website_id]) } +model event_old { + event_id Int @id @default(autoincrement()) + website_id Int + session_id Int + created_at DateTime? @default(now()) @db.Timestamptz(6) + url String @db.VarChar(500) + event_type String @db.VarChar(50) + event_value String @db.VarChar(50) + + @@index([created_at]) + @@index([session_id]) + @@index([website_id]) +} + model event_data { - id Int @id @default(autoincrement()) @map("event_data_id") - eventId Int @unique @map("event_id") - eventData Json @map("event_data") - event event @relation(fields: [eventId], references: [event_id]) + id Int @id @default(autoincrement()) + event_id Int @unique + event_data Json + event event @relation(fields: [event_id], references: [event_id]) } model pageview { @@ -70,8 +84,8 @@ model session { language String? @db.VarChar(35) country String? @db.Char(2) website website @relation(fields: [website_id], references: [website_id], onDelete: Cascade) - event event[] pageview pageview[] + event event[] @@index([created_at]) @@index([website_id]) @@ -86,9 +100,9 @@ model website { 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) - event event[] pageview pageview[] session session[] + event event[] @@index([user_id]) }