Use raw query with on conflict in createSession

This commit is contained in:
Maxime-J 2025-11-11 10:32:31 +01:00
parent 592f7c0ae7
commit 14f3db550b
2 changed files with 40 additions and 36 deletions

View file

@ -146,6 +146,7 @@ export async function POST(request: Request) {
region, region,
city, city,
distinctId: id, distinctId: id,
createdAt,
}); });
} }

View file

@ -1,26 +1,16 @@
import { Prisma } from '@/generated/prisma/client'; import { Prisma } from '@/generated/prisma/client';
import prisma from '@/lib/prisma'; import prisma from '@/lib/prisma';
export async function createSession(data: Prisma.SessionCreateInput) { const FUNCTION_NAME = 'createSession';
const {
id,
websiteId,
browser,
os,
device,
screen,
language,
country,
region,
city,
distinctId,
} = data;
try { export async function createSession(data: Prisma.SessionCreateInput) {
return await prisma.client.session.create({ const { rawQuery } = prisma;
data: {
id, await rawQuery(
websiteId, `
insert into session (
session_id,
website_id,
browser, browser,
os, os,
device, device,
@ -29,13 +19,26 @@ export async function createSession(data: Prisma.SessionCreateInput) {
country, country,
region, region,
city, city,
distinctId, distinct_id,
}, created_at
}); )
} catch (e: any) { values (
if (e.message.toLowerCase().includes('unique constraint')) { {{id}},
return null; {{websiteId}},
} {{browser}},
throw e; {{os}},
} {{device}},
{{screen}},
{{language}},
{{country}},
{{region}},
{{city}},
{{distinctId}},
{{createdAt}}
)
on conflict (session_id) do nothing
`,
data,
FUNCTION_NAME,
);
} }