50 lines
890 B
TypeScript
50 lines
890 B
TypeScript
import { Prisma } from '@prisma/client';
|
|
import prisma from '@/lib/prisma';
|
|
|
|
export async function createSession(
|
|
data: Prisma.SessionCreateInput,
|
|
options = { skipDuplicates: false },
|
|
) {
|
|
const {
|
|
id,
|
|
websiteId,
|
|
browser,
|
|
os,
|
|
device,
|
|
screen,
|
|
language,
|
|
country,
|
|
region,
|
|
city,
|
|
distinctId,
|
|
} = data;
|
|
|
|
try {
|
|
return await prisma.client.session.create({
|
|
data: {
|
|
id,
|
|
websiteId,
|
|
browser,
|
|
os,
|
|
device,
|
|
screen,
|
|
language,
|
|
country,
|
|
region,
|
|
city,
|
|
distinctId,
|
|
},
|
|
});
|
|
} catch (e: any) {
|
|
// With skipDuplicates flag: ignore unique constraint error and return null
|
|
if (
|
|
options.skipDuplicates &&
|
|
e instanceof Prisma.PrismaClientKnownRequestError &&
|
|
e.code === 'P2002'
|
|
) {
|
|
return null;
|
|
}
|
|
throw e;
|
|
}
|
|
}
|