mirror of
https://github.com/umami-software/umami.git
synced 2026-02-08 22:57:12 +01:00
# Conflicts: # pnpm-lock.yaml
This commit is contained in:
commit
aefc36b476
64 changed files with 699 additions and 319 deletions
|
|
@ -132,42 +132,46 @@ export async function updateWebsite(
|
|||
}
|
||||
|
||||
export async function resetWebsite(websiteId: string) {
|
||||
const { client, transaction } = prisma;
|
||||
const { transaction } = prisma;
|
||||
const cloudMode = !!process.env.CLOUD_MODE;
|
||||
|
||||
return transaction(
|
||||
[
|
||||
client.revenue.deleteMany({
|
||||
async tx => {
|
||||
await tx.revenue.deleteMany({
|
||||
where: { websiteId },
|
||||
}),
|
||||
client.eventData.deleteMany({
|
||||
});
|
||||
|
||||
await tx.eventData.deleteMany({
|
||||
where: { websiteId },
|
||||
}),
|
||||
client.sessionData.deleteMany({
|
||||
});
|
||||
|
||||
await tx.sessionData.deleteMany({
|
||||
where: { websiteId },
|
||||
}),
|
||||
client.websiteEvent.deleteMany({
|
||||
});
|
||||
|
||||
await tx.websiteEvent.deleteMany({
|
||||
where: { websiteId },
|
||||
}),
|
||||
client.session.deleteMany({
|
||||
});
|
||||
|
||||
await tx.session.deleteMany({
|
||||
where: { websiteId },
|
||||
}),
|
||||
client.website.update({
|
||||
});
|
||||
|
||||
const website = await tx.website.update({
|
||||
where: { id: websiteId },
|
||||
data: {
|
||||
resetAt: new Date(),
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
return website;
|
||||
},
|
||||
{
|
||||
timeout: 30000,
|
||||
},
|
||||
).then(async data => {
|
||||
if (cloudMode) {
|
||||
await redis.client.set(
|
||||
`website:${websiteId}`,
|
||||
data.find(website => website.id),
|
||||
);
|
||||
await redis.client.set(`website:${websiteId}`, data);
|
||||
}
|
||||
|
||||
return data;
|
||||
|
|
@ -175,43 +179,52 @@ export async function resetWebsite(websiteId: string) {
|
|||
}
|
||||
|
||||
export async function deleteWebsite(websiteId: string) {
|
||||
const { client, transaction } = prisma;
|
||||
const { transaction } = prisma;
|
||||
const cloudMode = !!process.env.CLOUD_MODE;
|
||||
|
||||
return transaction(
|
||||
[
|
||||
client.revenue.deleteMany({
|
||||
async tx => {
|
||||
await tx.revenue.deleteMany({
|
||||
where: { websiteId },
|
||||
}),
|
||||
client.eventData.deleteMany({
|
||||
});
|
||||
|
||||
await tx.eventData.deleteMany({
|
||||
where: { websiteId },
|
||||
}),
|
||||
client.sessionData.deleteMany({
|
||||
});
|
||||
|
||||
await tx.sessionData.deleteMany({
|
||||
where: { websiteId },
|
||||
}),
|
||||
client.websiteEvent.deleteMany({
|
||||
});
|
||||
|
||||
await tx.websiteEvent.deleteMany({
|
||||
where: { websiteId },
|
||||
}),
|
||||
client.session.deleteMany({
|
||||
});
|
||||
|
||||
await tx.session.deleteMany({
|
||||
where: { websiteId },
|
||||
}),
|
||||
client.report.deleteMany({
|
||||
});
|
||||
|
||||
await tx.report.deleteMany({
|
||||
where: { websiteId },
|
||||
}),
|
||||
client.segment.deleteMany({
|
||||
});
|
||||
|
||||
await tx.segment.deleteMany({
|
||||
where: { websiteId },
|
||||
}),
|
||||
cloudMode
|
||||
? client.website.update({
|
||||
});
|
||||
|
||||
const website = cloudMode
|
||||
? await tx.website.update({
|
||||
data: {
|
||||
deletedAt: new Date(),
|
||||
},
|
||||
where: { id: websiteId },
|
||||
})
|
||||
: client.website.delete({
|
||||
: await tx.website.delete({
|
||||
where: { id: websiteId },
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
return website;
|
||||
},
|
||||
{
|
||||
timeout: 30000,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ async function relationalQuery(
|
|||
select distinct
|
||||
website_event.visit_id,
|
||||
website_event.referrer_path,
|
||||
coalesce(nullIf(website_event.event_name, ''), website_event.url_path) event,
|
||||
coalesce(nullIf(website_event.event_name, ''), website_event.url_path) "event",
|
||||
row_number() OVER (PARTITION BY visit_id ORDER BY website_event.created_at) AS event_number
|
||||
from website_event
|
||||
${cohortQuery}
|
||||
|
|
|
|||
|
|
@ -41,14 +41,15 @@ async function relationalQuery(
|
|||
currency,
|
||||
});
|
||||
|
||||
const joinQuery = filterQuery
|
||||
? `join website_event
|
||||
const joinQuery =
|
||||
filterQuery || cohortQuery
|
||||
? `join website_event
|
||||
on website_event.website_id = revenue.website_id
|
||||
and website_event.session_id = revenue.session_id
|
||||
and website_event.event_id = revenue.event_id
|
||||
and website_event.website_id = {{websiteId::uuid}}
|
||||
and website_event.created_at between {{startDate}} and {{endDate}}`
|
||||
: '';
|
||||
: '';
|
||||
|
||||
const chart = await rawQuery(
|
||||
`
|
||||
|
|
@ -62,7 +63,7 @@ async function relationalQuery(
|
|||
${joinSessionQuery}
|
||||
where revenue.website_id = {{websiteId::uuid}}
|
||||
and revenue.created_at between {{startDate}} and {{endDate}}
|
||||
and revenue.currency = upper({{currency}})
|
||||
and upper(revenue.currency) = {{currency}}
|
||||
${filterQuery}
|
||||
group by x, t
|
||||
order by t
|
||||
|
|
@ -83,7 +84,7 @@ async function relationalQuery(
|
|||
${cohortQuery}
|
||||
where revenue.website_id = {{websiteId::uuid}}
|
||||
and revenue.created_at between {{startDate}} and {{endDate}}
|
||||
and revenue.currency = upper({{currency}})
|
||||
and upper(revenue.currency) = {{currency}}
|
||||
${filterQuery}
|
||||
group by session.country
|
||||
`,
|
||||
|
|
@ -102,7 +103,7 @@ async function relationalQuery(
|
|||
${joinSessionQuery}
|
||||
where revenue.website_id = {{websiteId::uuid}}
|
||||
and revenue.created_at between {{startDate}} and {{endDate}}
|
||||
and revenue.currency = upper({{currency}})
|
||||
and upper(revenue.currency) = {{currency}}
|
||||
${filterQuery}
|
||||
`,
|
||||
queryParams,
|
||||
|
|
@ -154,7 +155,7 @@ async function clickhouseQuery(
|
|||
${cohortQuery}
|
||||
where website_revenue.website_id = {websiteId:UUID}
|
||||
and website_revenue.created_at between {startDate:DateTime64} and {endDate:DateTime64}
|
||||
and website_revenue.currency = upper({currency:String})
|
||||
and upper(website_revenue.currency) = {currency:String}
|
||||
${filterQuery}
|
||||
group by x, t
|
||||
order by t
|
||||
|
|
@ -182,7 +183,7 @@ async function clickhouseQuery(
|
|||
${cohortQuery}
|
||||
where website_revenue.website_id = {websiteId:UUID}
|
||||
and website_revenue.created_at between {startDate:DateTime64} and {endDate:DateTime64}
|
||||
and website_revenue.currency = upper({currency:String})
|
||||
and upper(website_revenue.currency) = {currency:String}
|
||||
${filterQuery}
|
||||
group by website_event.country
|
||||
order by value desc
|
||||
|
|
@ -205,7 +206,7 @@ async function clickhouseQuery(
|
|||
${cohortQuery}
|
||||
where website_revenue.website_id = {websiteId:UUID}
|
||||
and website_revenue.created_at between {startDate:DateTime64} and {endDate:DateTime64}
|
||||
and website_revenue.currency = upper({currency:String})
|
||||
and upper(website_revenue.currency) = {currency:String}
|
||||
${filterQuery}
|
||||
`,
|
||||
queryParams,
|
||||
|
|
|
|||
|
|
@ -46,31 +46,23 @@ export async function relationalQuery({
|
|||
createdAt,
|
||||
}));
|
||||
|
||||
const existing = await client.sessionData.findMany({
|
||||
where: {
|
||||
sessionId,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
sessionId: true,
|
||||
dataKey: true,
|
||||
},
|
||||
});
|
||||
|
||||
for (const data of flattenedData) {
|
||||
const { sessionId, dataKey, ...props } = data;
|
||||
const record = existing.find(e => e.sessionId === sessionId && e.dataKey === dataKey);
|
||||
|
||||
if (record) {
|
||||
await client.sessionData.update({
|
||||
where: {
|
||||
id: record.id,
|
||||
},
|
||||
data: {
|
||||
...props,
|
||||
},
|
||||
});
|
||||
} else {
|
||||
// Try to update existing record using compound where clause
|
||||
// This is safer than using id from a previous query due to race conditions
|
||||
const updateResult = await client.sessionData.updateMany({
|
||||
where: {
|
||||
sessionId,
|
||||
dataKey,
|
||||
},
|
||||
data: {
|
||||
...props,
|
||||
},
|
||||
});
|
||||
|
||||
// If no record was updated, create a new one
|
||||
if (updateResult.count === 0) {
|
||||
await client.sessionData.create({
|
||||
data,
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue