add distinct id to saves and fix schema mapping

This commit is contained in:
Francis Cao 2025-04-29 09:31:46 -07:00
parent c5efc27c07
commit de54290af6
6 changed files with 32 additions and 7 deletions

View file

@ -40,7 +40,7 @@ model Session {
country String? @db.Char(2) country String? @db.Char(2)
region String? @db.Char(20) region String? @db.Char(20)
city String? @db.VarChar(50) 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) createdAt DateTime? @default(now()) @map("created_at") @db.Timestamp(0)
websiteEvent WebsiteEvent[] websiteEvent WebsiteEvent[]
@ -167,7 +167,7 @@ model SessionData {
numberValue Decimal? @map("number_value") @db.Decimal(19, 4) numberValue Decimal? @map("number_value") @db.Decimal(19, 4)
dateValue DateTime? @map("date_value") @db.Timestamp(0) dateValue DateTime? @map("date_value") @db.Timestamp(0)
dataType Int @map("data_type") @db.UnsignedInt 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) createdAt DateTime? @default(now()) @map("created_at") @db.Timestamp(0)
website Website @relation(fields: [websiteId], references: [id]) website Website @relation(fields: [websiteId], references: [id])

View file

@ -40,7 +40,7 @@ model Session {
country String? @db.Char(2) country String? @db.Char(2)
region String? @db.VarChar(20) region String? @db.VarChar(20)
city String? @db.VarChar(50) 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) createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
websiteEvent WebsiteEvent[] websiteEvent WebsiteEvent[]
@ -167,7 +167,7 @@ model SessionData {
numberValue Decimal? @map("number_value") @db.Decimal(19, 4) numberValue Decimal? @map("number_value") @db.Decimal(19, 4)
dateValue DateTime? @map("date_value") @db.Timestamptz(6) dateValue DateTime? @map("date_value") @db.Timestamptz(6)
dataType Int @map("data_type") @db.Integer 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) createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
website Website @relation(fields: [websiteId], references: [id]) website Website @relation(fields: [websiteId], references: [id])

View file

@ -121,6 +121,7 @@ export async function POST(request: Request) {
country, country,
region, region,
city, city,
distinctId: id,
}); });
} catch (e: any) { } catch (e: any) {
if (!e.message.toLowerCase().includes('unique constraint')) { if (!e.message.toLowerCase().includes('unique constraint')) {
@ -215,6 +216,7 @@ export async function POST(request: Request) {
region, region,
city, city,
tag, tag,
distinctId: id,
createdAt, createdAt,
}); });
} }
@ -228,6 +230,7 @@ export async function POST(request: Request) {
websiteId, websiteId,
sessionId, sessionId,
sessionData: data, sessionData: data,
distinctId: id,
createdAt, createdAt,
}); });
} }

View file

@ -39,6 +39,7 @@ export async function saveEvent(args: {
region?: string; region?: string;
city?: string; city?: string;
tag?: string; tag?: string;
distinctId?: string;
createdAt?: Date; createdAt?: Date;
}) { }) {
return runQuery({ return runQuery({
@ -182,6 +183,7 @@ async function clickhouseQuery(data: {
region?: string; region?: string;
city?: string; city?: string;
tag?: string; tag?: string;
distinctId?: string;
createdAt?: Date; createdAt?: Date;
}) { }) {
const { const {
@ -211,6 +213,7 @@ async function clickhouseQuery(data: {
region, region,
city, city,
tag, tag,
distinctId,
createdAt, createdAt,
...args ...args
} = data; } = data;
@ -247,6 +250,7 @@ async function clickhouseQuery(data: {
event_type: eventName ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView, event_type: eventName ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView,
event_name: eventName ? eventName?.substring(0, EVENT_NAME_LENGTH) : null, event_name: eventName ? eventName?.substring(0, EVENT_NAME_LENGTH) : null,
tag: tag, tag: tag,
distinct_id: distinctId,
created_at: getUTCString(createdAt), created_at: getUTCString(createdAt),
}; };

View file

@ -2,7 +2,19 @@ import { Prisma } from '@prisma/client';
import prisma from '@/lib/prisma'; import prisma from '@/lib/prisma';
export async function createSession(data: Prisma.SessionCreateInput) { 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({ return prisma.client.session.create({
data: { data: {
@ -16,6 +28,7 @@ export async function createSession(data: Prisma.SessionCreateInput) {
country, country,
region, region,
city, city,
distinctId,
}, },
}); });
} }

View file

@ -11,6 +11,7 @@ export async function saveSessionData(data: {
websiteId: string; websiteId: string;
sessionId: string; sessionId: string;
sessionData: DynamicData; sessionData: DynamicData;
distinctId?: string;
createdAt?: Date; createdAt?: Date;
}) { }) {
return runQuery({ return runQuery({
@ -23,10 +24,11 @@ export async function relationalQuery(data: {
websiteId: string; websiteId: string;
sessionId: string; sessionId: string;
sessionData: DynamicData; sessionData: DynamicData;
distinctId?: string;
createdAt?: Date; createdAt?: Date;
}) { }) {
const { client } = prisma; const { client } = prisma;
const { websiteId, sessionId, sessionData, createdAt } = data; const { websiteId, sessionId, sessionData, distinctId, createdAt } = data;
const jsonKeys = flattenJSON(sessionData); const jsonKeys = flattenJSON(sessionData);
@ -39,6 +41,7 @@ export async function relationalQuery(data: {
numberValue: a.dataType === DATA_TYPE.number ? a.value : null, numberValue: a.dataType === DATA_TYPE.number ? a.value : null,
dateValue: a.dataType === DATA_TYPE.date ? new Date(a.value) : null, dateValue: a.dataType === DATA_TYPE.date ? new Date(a.value) : null,
dataType: a.dataType, dataType: a.dataType,
distinctId,
createdAt, createdAt,
})); }));
@ -80,9 +83,10 @@ async function clickhouseQuery(data: {
websiteId: string; websiteId: string;
sessionId: string; sessionId: string;
sessionData: DynamicData; sessionData: DynamicData;
distinctId?: string;
createdAt?: Date; createdAt?: Date;
}) { }) {
const { websiteId, sessionId, sessionData, createdAt } = data; const { websiteId, sessionId, sessionData, distinctId, createdAt } = data;
const { insert, getUTCString } = clickhouse; const { insert, getUTCString } = clickhouse;
const { sendMessage } = kafka; const { sendMessage } = kafka;
@ -98,6 +102,7 @@ async function clickhouseQuery(data: {
string_value: getStringValue(value, dataType), string_value: getStringValue(value, dataType),
number_value: dataType === DATA_TYPE.number ? value : null, number_value: dataType === DATA_TYPE.number ? value : null,
date_value: dataType === DATA_TYPE.date ? getUTCString(value) : null, date_value: dataType === DATA_TYPE.date ? getUTCString(value) : null,
distinct_id: distinctId,
created_at: getUTCString(createdAt), created_at: getUTCString(createdAt),
}; };
}); });