From de54290af66129d838a8636a1f9b275e149a7c7e Mon Sep 17 00:00:00 2001 From: Francis Cao Date: Tue, 29 Apr 2025 09:31:46 -0700 Subject: [PATCH] add distinct id to saves and fix schema mapping --- db/mysql/schema.prisma | 4 ++-- db/postgresql/schema.prisma | 4 ++-- src/app/api/send/route.ts | 3 +++ src/queries/sql/events/saveEvent.ts | 4 ++++ src/queries/sql/sessions/createSession.ts | 15 ++++++++++++++- src/queries/sql/sessions/saveSessionData.ts | 9 +++++++-- 6 files changed, 32 insertions(+), 7 deletions(-) diff --git a/db/mysql/schema.prisma b/db/mysql/schema.prisma index 89b455b2..f315de70 100644 --- a/db/mysql/schema.prisma +++ b/db/mysql/schema.prisma @@ -40,7 +40,7 @@ model Session { country String? @db.Char(2) region String? @db.Char(20) city String? @db.VarChar(50) - distinct_id String? @db.VarChar(50) + distinctId String? @map("distinct_id") @db.VarChar(50) createdAt DateTime? @default(now()) @map("created_at") @db.Timestamp(0) websiteEvent WebsiteEvent[] @@ -167,7 +167,7 @@ model SessionData { numberValue Decimal? @map("number_value") @db.Decimal(19, 4) dateValue DateTime? @map("date_value") @db.Timestamp(0) dataType Int @map("data_type") @db.UnsignedInt - distinct_id String? @db.VarChar(50) + distinctId String? @map("distinct_id") @db.VarChar(50) createdAt DateTime? @default(now()) @map("created_at") @db.Timestamp(0) website Website @relation(fields: [websiteId], references: [id]) diff --git a/db/postgresql/schema.prisma b/db/postgresql/schema.prisma index 0ea6d955..e037cc34 100644 --- a/db/postgresql/schema.prisma +++ b/db/postgresql/schema.prisma @@ -40,7 +40,7 @@ model Session { country String? @db.Char(2) region String? @db.VarChar(20) city String? @db.VarChar(50) - distinct_id String? @db.VarChar(50) + distinctId String? @map("distinct_id") @db.VarChar(50) createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6) websiteEvent WebsiteEvent[] @@ -167,7 +167,7 @@ model SessionData { numberValue Decimal? @map("number_value") @db.Decimal(19, 4) dateValue DateTime? @map("date_value") @db.Timestamptz(6) dataType Int @map("data_type") @db.Integer - distinct_id String? @db.VarChar(50) + distinctId String? @map("distinct_id") @db.VarChar(50) createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6) website Website @relation(fields: [websiteId], references: [id]) diff --git a/src/app/api/send/route.ts b/src/app/api/send/route.ts index 582b05ff..d04a07cb 100644 --- a/src/app/api/send/route.ts +++ b/src/app/api/send/route.ts @@ -121,6 +121,7 @@ export async function POST(request: Request) { country, region, city, + distinctId: id, }); } catch (e: any) { if (!e.message.toLowerCase().includes('unique constraint')) { @@ -215,6 +216,7 @@ export async function POST(request: Request) { region, city, tag, + distinctId: id, createdAt, }); } @@ -228,6 +230,7 @@ export async function POST(request: Request) { websiteId, sessionId, sessionData: data, + distinctId: id, createdAt, }); } diff --git a/src/queries/sql/events/saveEvent.ts b/src/queries/sql/events/saveEvent.ts index a61f665d..e9b73635 100644 --- a/src/queries/sql/events/saveEvent.ts +++ b/src/queries/sql/events/saveEvent.ts @@ -39,6 +39,7 @@ export async function saveEvent(args: { region?: string; city?: string; tag?: string; + distinctId?: string; createdAt?: Date; }) { return runQuery({ @@ -182,6 +183,7 @@ async function clickhouseQuery(data: { region?: string; city?: string; tag?: string; + distinctId?: string; createdAt?: Date; }) { const { @@ -211,6 +213,7 @@ async function clickhouseQuery(data: { region, city, tag, + distinctId, createdAt, ...args } = data; @@ -247,6 +250,7 @@ async function clickhouseQuery(data: { event_type: eventName ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView, event_name: eventName ? eventName?.substring(0, EVENT_NAME_LENGTH) : null, tag: tag, + distinct_id: distinctId, created_at: getUTCString(createdAt), }; diff --git a/src/queries/sql/sessions/createSession.ts b/src/queries/sql/sessions/createSession.ts index 745adcc4..9d1402b1 100644 --- a/src/queries/sql/sessions/createSession.ts +++ b/src/queries/sql/sessions/createSession.ts @@ -2,7 +2,19 @@ import { Prisma } from '@prisma/client'; import prisma from '@/lib/prisma'; export async function createSession(data: Prisma.SessionCreateInput) { - const { id, websiteId, browser, os, device, screen, language, country, region, city } = data; + const { + id, + websiteId, + browser, + os, + device, + screen, + language, + country, + region, + city, + distinctId, + } = data; return prisma.client.session.create({ data: { @@ -16,6 +28,7 @@ export async function createSession(data: Prisma.SessionCreateInput) { country, region, city, + distinctId, }, }); } diff --git a/src/queries/sql/sessions/saveSessionData.ts b/src/queries/sql/sessions/saveSessionData.ts index a060e9a8..46ad3cf6 100644 --- a/src/queries/sql/sessions/saveSessionData.ts +++ b/src/queries/sql/sessions/saveSessionData.ts @@ -11,6 +11,7 @@ export async function saveSessionData(data: { websiteId: string; sessionId: string; sessionData: DynamicData; + distinctId?: string; createdAt?: Date; }) { return runQuery({ @@ -23,10 +24,11 @@ export async function relationalQuery(data: { websiteId: string; sessionId: string; sessionData: DynamicData; + distinctId?: string; createdAt?: Date; }) { const { client } = prisma; - const { websiteId, sessionId, sessionData, createdAt } = data; + const { websiteId, sessionId, sessionData, distinctId, createdAt } = data; const jsonKeys = flattenJSON(sessionData); @@ -39,6 +41,7 @@ export async function relationalQuery(data: { numberValue: a.dataType === DATA_TYPE.number ? a.value : null, dateValue: a.dataType === DATA_TYPE.date ? new Date(a.value) : null, dataType: a.dataType, + distinctId, createdAt, })); @@ -80,9 +83,10 @@ async function clickhouseQuery(data: { websiteId: string; sessionId: string; sessionData: DynamicData; + distinctId?: string; createdAt?: Date; }) { - const { websiteId, sessionId, sessionData, createdAt } = data; + const { websiteId, sessionId, sessionData, distinctId, createdAt } = data; const { insert, getUTCString } = clickhouse; const { sendMessage } = kafka; @@ -98,6 +102,7 @@ async function clickhouseQuery(data: { string_value: getStringValue(value, dataType), number_value: dataType === DATA_TYPE.number ? value : null, date_value: dataType === DATA_TYPE.date ? getUTCString(value) : null, + distinct_id: distinctId, created_at: getUTCString(createdAt), }; });