From ffc78c5744035a34a8afa3439abc4d0a5635622c Mon Sep 17 00:00:00 2001 From: ABCxFF <79597906+ABCxFF@users.noreply.github.com> Date: Wed, 14 Aug 2024 00:07:22 -0400 Subject: [PATCH 1/2] Setup analytics module and schema --- .../20240813023547_init/migration.sql | 16 +++++++++++++ .../db/migrations/migration_lock.toml | 3 +++ modules/analytics/db/schema.prisma | 17 ++++++++++++++ modules/analytics/module.json | 23 +++++++++++-------- 4 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 modules/analytics/db/migrations/20240813023547_init/migration.sql create mode 100644 modules/analytics/db/migrations/migration_lock.toml create mode 100644 modules/analytics/db/schema.prisma diff --git a/modules/analytics/db/migrations/20240813023547_init/migration.sql b/modules/analytics/db/migrations/20240813023547_init/migration.sql new file mode 100644 index 00000000..ead4ba38 --- /dev/null +++ b/modules/analytics/db/migrations/20240813023547_init/migration.sql @@ -0,0 +1,16 @@ +-- Add timescale +CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE; + +-- CreateTable +CREATE TABLE "event" ( + "id" UUID NOT NULL, + "timestamp" TIMESTAMPTZ NOT NULL, + "name" TEXT NOT NULL, + "metadata" JSONB +); + +-- CreateIndex +CREATE UNIQUE INDEX "event_id_key" ON "event"("id"); + +-- CreateIndex +CREATE INDEX "event_name_time_idx" ON "event"("name", "timestamp" DESC); \ No newline at end of file diff --git a/modules/analytics/db/migrations/migration_lock.toml b/modules/analytics/db/migrations/migration_lock.toml new file mode 100644 index 00000000..fbffa92c --- /dev/null +++ b/modules/analytics/db/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "postgresql" \ No newline at end of file diff --git a/modules/analytics/db/schema.prisma b/modules/analytics/db/schema.prisma new file mode 100644 index 00000000..989e1121 --- /dev/null +++ b/modules/analytics/db/schema.prisma @@ -0,0 +1,17 @@ +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + +} + +model Event { + id String @db.Uuid @default(uuid()) @unique + timestamp DateTime @db.Timestamptz + name String + metadata Json? + + // in the init migration, we add the timescale extension and call create_hypertable(). + + @@index(fields: [name, timestamp(sort: Desc)], map: "event_name_time_idx") + @@map("event") +} diff --git a/modules/analytics/module.json b/modules/analytics/module.json index b1e72a23..f157a402 100644 --- a/modules/analytics/module.json +++ b/modules/analytics/module.json @@ -1,12 +1,15 @@ { - "name": "Analytics", - "description": "Track and visualize user behavior data. (Coming mid-2024)", - "icon": "chart-line", - "tags": [ - "game" - ], - "authors": [], - "status": "coming_soon", - "scripts": {}, - "errors": {} + "status": "stable", + "name": "Analytics", + "description": "Track and visualize user behavior data", + "icon": "chart-line", + "tags": [], + "authors": [ + "rivet-gg", + "ABCxFF" + ], + "scripts": { + }, + "errors": {}, + "dependencies": {} } From 641611d38a834312e4216391c6ea7eecd4e5d18b Mon Sep 17 00:00:00 2001 From: ABCxFF <79597906+ABCxFF@users.noreply.github.com> Date: Sun, 25 Aug 2024 10:06:39 -0400 Subject: [PATCH 2/2] chore(analytics): migrate schema to drizzle --- .../migrations/20240813023547_init/migration.sql | 16 ---------------- .../analytics/db/migrations/migration_lock.toml | 3 --- modules/analytics/db/schema.ts | 11 +++++++++++ 3 files changed, 11 insertions(+), 19 deletions(-) delete mode 100644 modules/analytics/db/migrations/20240813023547_init/migration.sql delete mode 100644 modules/analytics/db/migrations/migration_lock.toml create mode 100644 modules/analytics/db/schema.ts diff --git a/modules/analytics/db/migrations/20240813023547_init/migration.sql b/modules/analytics/db/migrations/20240813023547_init/migration.sql deleted file mode 100644 index ead4ba38..00000000 --- a/modules/analytics/db/migrations/20240813023547_init/migration.sql +++ /dev/null @@ -1,16 +0,0 @@ --- Add timescale -CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE; - --- CreateTable -CREATE TABLE "event" ( - "id" UUID NOT NULL, - "timestamp" TIMESTAMPTZ NOT NULL, - "name" TEXT NOT NULL, - "metadata" JSONB -); - --- CreateIndex -CREATE UNIQUE INDEX "event_id_key" ON "event"("id"); - --- CreateIndex -CREATE INDEX "event_name_time_idx" ON "event"("name", "timestamp" DESC); \ No newline at end of file diff --git a/modules/analytics/db/migrations/migration_lock.toml b/modules/analytics/db/migrations/migration_lock.toml deleted file mode 100644 index fbffa92c..00000000 --- a/modules/analytics/db/migrations/migration_lock.toml +++ /dev/null @@ -1,3 +0,0 @@ -# Please do not edit this file manually -# It should be added in your version-control system (i.e. Git) -provider = "postgresql" \ No newline at end of file diff --git a/modules/analytics/db/schema.ts b/modules/analytics/db/schema.ts new file mode 100644 index 00000000..cfe125f0 --- /dev/null +++ b/modules/analytics/db/schema.ts @@ -0,0 +1,11 @@ +import { Query, schema, uniqueIndex, index } from "./schema.gen.ts"; + +export const events = schema.table("events", { + id: Query.uuid("id").primaryKey().defaultRandom(), + timestamp: Query.timestamp("timestamp"), + name: Query.text("name"), + metadata: Query.jsonb("metadata") +}, (table) => ({ + eventId: uniqueIndex("event_id").on(table.id), + eventNameTime: index("event_name_time").on(table.name, Query.desc(table.timestamp)) +}));