umami/lib/db.js

98 lines
1.7 KiB
JavaScript
Raw Normal View History

2020-07-17 10:03:38 +02:00
import { PrismaClient } from '@prisma/client';
2020-07-21 04:24:33 +02:00
const prisma = new PrismaClient({
log: [process.env.NODE_ENV !== 'production' && 'query'],
});
2020-07-17 10:03:38 +02:00
export async function runQuery(query) {
return query
.catch(e => {
2020-07-19 11:23:15 +02:00
console.error(e);
2020-07-17 10:03:38 +02:00
throw e;
})
.finally(async () => {
await prisma.disconnect();
});
}
export async function getWebsite(website_uuid) {
2020-07-17 10:03:38 +02:00
return runQuery(
prisma.website.findOne({
where: {
website_uuid,
2020-07-17 10:03:38 +02:00
},
}),
);
}
export async function createSession(website_id, data) {
return runQuery(
2020-07-17 10:03:38 +02:00
prisma.session.create({
data: {
website: {
connect: {
website_id,
2020-07-17 10:03:38 +02:00
},
},
...data,
},
select: {
session_id: true,
},
2020-07-17 10:03:38 +02:00
}),
);
}
export async function getSession(session_uuid) {
2020-07-17 10:03:38 +02:00
return runQuery(
prisma.session.findOne({
where: {
session_uuid,
2020-07-17 10:03:38 +02:00
},
}),
);
}
2020-07-19 08:54:25 +02:00
export async function savePageView(website_id, session_id, url, referrer) {
2020-07-17 10:03:38 +02:00
return runQuery(
prisma.pageview.create({
data: {
2020-07-19 08:54:25 +02:00
website: {
connect: {
website_id,
2020-07-19 08:54:25 +02:00
},
},
2020-07-17 10:03:38 +02:00
session: {
connect: {
session_id,
2020-07-17 10:03:38 +02:00
},
},
url,
referrer,
},
}),
);
}
2020-07-19 10:57:01 +02:00
2020-07-19 11:23:15 +02:00
export async function saveEvent(website_id, session_id, url, event_type, event_value) {
2020-07-19 10:57:01 +02:00
return runQuery(
2020-07-19 11:23:15 +02:00
prisma.event.create({
2020-07-19 10:57:01 +02:00
data: {
website: {
connect: {
website_id,
2020-07-19 10:57:01 +02:00
},
},
session: {
connect: {
session_id,
2020-07-19 10:57:01 +02:00
},
},
url,
2020-07-19 11:23:15 +02:00
event_type,
event_value,
2020-07-19 10:57:01 +02:00
},
}),
);
}