umami/queries/admin/website.ts

130 lines
2.9 KiB
TypeScript
Raw Normal View History

2022-11-18 07:27:33 +01:00
import { Prisma, Website } from '@prisma/client';
import cache from 'lib/cache';
import prisma from 'lib/prisma';
2022-11-18 21:08:13 +01:00
import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db';
2022-11-18 07:27:33 +01:00
2022-11-20 09:48:13 +01:00
export async function createWebsite(
data: Prisma.WebsiteCreateInput | Prisma.WebsiteUncheckedCreateInput,
2022-11-18 07:27:33 +01:00
): Promise<Website> {
return prisma.client.website
.create({
2022-11-20 09:48:13 +01:00
data,
2022-11-18 07:27:33 +01:00
})
.then(async data => {
if (cache.enabled) {
await cache.storeWebsite(data);
}
return data;
});
}
export async function updateWebsite(websiteId, data: Prisma.WebsiteUpdateInput): Promise<Website> {
return prisma.client.website.update({
where: {
id: websiteId,
},
data,
});
}
export async function resetWebsite(
websiteId,
): Promise<[Prisma.BatchPayload, Prisma.BatchPayload, Website]> {
const { client, transaction } = prisma;
const { revId } = await getWebsite({ id: websiteId });
return transaction([
client.websiteEvent.deleteMany({
where: { websiteId },
}),
client.session.deleteMany({
where: { websiteId },
}),
client.website.update({ where: { id: websiteId }, data: { revId: revId + 1 } }),
]).then(async data => {
if (cache.enabled) {
await cache.storeWebsite(data[2]);
}
return data;
});
}
export async function getWebsite(where: Prisma.WebsiteWhereUniqueInput): Promise<Website> {
return prisma.client.website.findUnique({
where,
});
}
export async function getWebsitesByUserId(userId): Promise<Website[]> {
return prisma.client.website.findMany({
where: {
2022-11-20 09:48:13 +01:00
userId,
2022-11-18 07:27:33 +01:00
},
orderBy: {
name: 'asc',
},
});
}
export async function getWebsitesByTeamId(teamId): Promise<Website[]> {
return prisma.client.website.findMany({
where: {
2022-11-20 09:48:13 +01:00
teamId,
2022-11-18 07:27:33 +01:00
},
orderBy: {
name: 'asc',
},
});
}
2022-11-20 09:48:13 +01:00
export async function getAllWebsites(): Promise<Website[]> {
return await prisma.client.website.findMany({
orderBy: [
{
name: 'asc',
2022-11-18 07:27:33 +01:00
},
2022-11-20 09:48:13 +01:00
],
});
2022-11-18 07:27:33 +01:00
}
2022-11-20 09:48:13 +01:00
export async function deleteWebsite(websiteId: string) {
2022-11-18 21:08:13 +01:00
return runQuery({
[PRISMA]: () => deleteWebsiteRelationalQuery(websiteId),
[CLICKHOUSE]: () => deleteWebsiteClickhouseQuery(websiteId),
});
}
2022-11-22 07:51:23 +01:00
async function deleteWebsiteRelationalQuery(websiteId,): Promise<[Prisma.BatchPayload, Prisma.BatchPayload, Website]> {
2022-11-18 07:27:33 +01:00
const { client, transaction } = prisma;
return transaction([
client.websiteEvent.deleteMany({
where: { websiteId },
}),
client.session.deleteMany({
where: { websiteId },
}),
2022-11-22 07:51:23 +01:00
client.website.delete({
2022-11-18 07:27:33 +01:00
where: { id: websiteId },
}),
]).then(async data => {
if (cache.enabled) {
await cache.deleteWebsite(websiteId);
}
return data;
});
}
2022-11-18 21:08:13 +01:00
async function deleteWebsiteClickhouseQuery(websiteId): Promise<Website> {
return prisma.client.website.update({
data: {
isDeleted: true,
},
where: { id: websiteId },
});
}