change reset/delete website to interactive transaction with timeout
Some checks failed
Node.js CI / build (push) Has been cancelled

Closes #3905
This commit is contained in:
Francis Cao 2025-12-22 10:59:33 -08:00
parent 4c0c9e6aa0
commit b0ed4bddb6

View file

@ -132,42 +132,46 @@ export async function updateWebsite(
} }
export async function resetWebsite(websiteId: string) { export async function resetWebsite(websiteId: string) {
const { client, transaction } = prisma; const { transaction } = prisma;
const cloudMode = !!process.env.CLOUD_MODE; const cloudMode = !!process.env.CLOUD_MODE;
return transaction( return transaction(
[ async tx => {
client.revenue.deleteMany({ await tx.revenue.deleteMany({
where: { websiteId }, where: { websiteId },
}), });
client.eventData.deleteMany({
await tx.eventData.deleteMany({
where: { websiteId }, where: { websiteId },
}), });
client.sessionData.deleteMany({
await tx.sessionData.deleteMany({
where: { websiteId }, where: { websiteId },
}), });
client.websiteEvent.deleteMany({
await tx.websiteEvent.deleteMany({
where: { websiteId }, where: { websiteId },
}), });
client.session.deleteMany({
await tx.session.deleteMany({
where: { websiteId }, where: { websiteId },
}), });
client.website.update({
const website = await tx.website.update({
where: { id: websiteId }, where: { id: websiteId },
data: { data: {
resetAt: new Date(), resetAt: new Date(),
}, },
}), });
],
return website;
},
{ {
timeout: 30000, timeout: 30000,
}, },
).then(async data => { ).then(async data => {
if (cloudMode) { if (cloudMode) {
await redis.client.set( await redis.client.set(`website:${websiteId}`, data);
`website:${websiteId}`,
data.find(website => website.id),
);
} }
return data; return data;
@ -175,43 +179,52 @@ export async function resetWebsite(websiteId: string) {
} }
export async function deleteWebsite(websiteId: string) { export async function deleteWebsite(websiteId: string) {
const { client, transaction } = prisma; const { transaction } = prisma;
const cloudMode = !!process.env.CLOUD_MODE; const cloudMode = !!process.env.CLOUD_MODE;
return transaction( return transaction(
[ async tx => {
client.revenue.deleteMany({ await tx.revenue.deleteMany({
where: { websiteId }, where: { websiteId },
}), });
client.eventData.deleteMany({
await tx.eventData.deleteMany({
where: { websiteId }, where: { websiteId },
}), });
client.sessionData.deleteMany({
await tx.sessionData.deleteMany({
where: { websiteId }, where: { websiteId },
}), });
client.websiteEvent.deleteMany({
await tx.websiteEvent.deleteMany({
where: { websiteId }, where: { websiteId },
}), });
client.session.deleteMany({
await tx.session.deleteMany({
where: { websiteId }, where: { websiteId },
}), });
client.report.deleteMany({
await tx.report.deleteMany({
where: { websiteId }, where: { websiteId },
}), });
client.segment.deleteMany({
await tx.segment.deleteMany({
where: { websiteId }, where: { websiteId },
}), });
cloudMode
? client.website.update({ const website = cloudMode
? await tx.website.update({
data: { data: {
deletedAt: new Date(), deletedAt: new Date(),
}, },
where: { id: websiteId }, where: { id: websiteId },
}) })
: client.website.delete({ : await tx.website.delete({
where: { id: websiteId }, where: { id: websiteId },
}), });
],
return website;
},
{ {
timeout: 30000, timeout: 30000,
}, },