mirror of
https://github.com/umami-software/umami.git
synced 2026-02-04 04:37:11 +01:00
Compare commits
2 commits
37b6194c5f
...
86d2672c47
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
86d2672c47 | ||
|
|
741c6039e6 |
29 changed files with 43 additions and 48 deletions
|
|
@ -17,8 +17,8 @@ export async function POST(request: Request) {
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const parameters = await setWebsiteDate(websiteId, body.parameters);
|
||||
const filters = await getQueryFilters(body.filters, websiteId);
|
||||
const parameters = await setWebsiteDate(websiteId, auth.user.id, body.parameters);
|
||||
const filters = await getQueryFilters(body.filters, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getAttribution(websiteId, parameters as AttributionParameters, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ export async function POST(request: Request) {
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const parameters = await setWebsiteDate(websiteId, body.parameters);
|
||||
const filters = await getQueryFilters(body.filters, websiteId);
|
||||
const parameters = await setWebsiteDate(websiteId, auth.user.id, body.parameters);
|
||||
const filters = await getQueryFilters(body.filters, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getBreakdown(websiteId, parameters as BreakdownParameters, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ export async function POST(request: Request) {
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const parameters = await setWebsiteDate(websiteId, body.parameters);
|
||||
const filters = await getQueryFilters(body.filters, websiteId);
|
||||
const parameters = await setWebsiteDate(websiteId, auth.user.id, body.parameters);
|
||||
const filters = await getQueryFilters(body.filters, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getFunnel(websiteId, parameters as FunnelParameters, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ export async function POST(request: Request) {
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const parameters = await setWebsiteDate(websiteId, body.parameters);
|
||||
const filters = await getQueryFilters(body.filters, websiteId);
|
||||
const parameters = await setWebsiteDate(websiteId, auth.user.id, body.parameters);
|
||||
const filters = await getQueryFilters(body.filters, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getGoal(websiteId, parameters as GoalParameters, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ export async function POST(request: Request) {
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(body.filters, websiteId);
|
||||
const parameters = await setWebsiteDate(websiteId, body.parameters);
|
||||
const filters = await getQueryFilters(body.filters, websiteId, auth.user?.id);
|
||||
const parameters = await setWebsiteDate(websiteId, auth.user.id, body.parameters);
|
||||
|
||||
const data = await getRetention(websiteId, parameters as RetentionParameters, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ export async function POST(request: Request) {
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const parameters = await setWebsiteDate(websiteId, body.parameters);
|
||||
const filters = await getQueryFilters(body.filters, websiteId);
|
||||
const parameters = await setWebsiteDate(websiteId, auth.user.id, body.parameters);
|
||||
const filters = await getQueryFilters(body.filters, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getRevenue(websiteId, parameters as RevenuParameters, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ export async function POST(request: Request) {
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(body.filters, websiteId);
|
||||
const parameters = await setWebsiteDate(websiteId, body.parameters);
|
||||
const filters = await getQueryFilters(body.filters, websiteId, auth.user?.id);
|
||||
const parameters = await setWebsiteDate(websiteId, auth.user.id, body.parameters);
|
||||
|
||||
const data = {
|
||||
utm_source: [],
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ export async function GET(
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getEventDataEvents(websiteId, {
|
||||
...filters,
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ export async function GET(
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getEventDataFields(websiteId, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ export async function GET(
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getEventDataProperties(websiteId, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ export async function GET(
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getEventDataStats(websiteId, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ export async function GET(
|
|||
}
|
||||
|
||||
const { propertyName } = query;
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getEventDataValues(websiteId, {
|
||||
...filters,
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ export async function GET(
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getWebsiteEvents(websiteId, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ export async function GET(
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getEventStats(websiteId, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ export async function GET(
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const [events, pages, referrers, browsers, os, devices, countries] = await Promise.all([
|
||||
getEventMetrics(websiteId, { type: 'event' }, filters),
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ export async function GET(
|
|||
}
|
||||
|
||||
const { type, limit, offset, search } = query;
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
if (search) {
|
||||
filters[type] = `c.${search}`;
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ export async function GET(
|
|||
}
|
||||
|
||||
const { type, limit, offset, search } = query;
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
if (search) {
|
||||
filters[type] = `c.${search}`;
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ export async function GET(
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const [pageviews, sessions] = await Promise.all([
|
||||
getPageviewStats(websiteId, filters),
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ export async function GET(
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getSessionDataProperties(websiteId, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ export async function GET(
|
|||
}
|
||||
|
||||
const { propertyName } = query;
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getSessionDataValues(websiteId, {
|
||||
...filters,
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ export async function GET(
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getSessionActivity(websiteId, sessionId, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ export async function GET(
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getWebsiteSessions(websiteId, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ export async function GET(
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const metrics = await getWebsiteSessionStats(websiteId, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ export async function GET(
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getWeeklyTraffic(websiteId, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ export async function GET(
|
|||
return unauthorized();
|
||||
}
|
||||
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
|
||||
const data = await getWebsiteStats(websiteId, filters);
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ export async function GET(
|
|||
value: segment.name,
|
||||
}));
|
||||
} else {
|
||||
const filters = await getQueryFilters(query, websiteId);
|
||||
const filters = await getQueryFilters(query, websiteId, auth.user?.id);
|
||||
values = await getValues(websiteId, FILTER_COLUMNS[type], filters);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { z } from 'zod';
|
||||
import { uuid } from '@/lib/crypto';
|
||||
import redis from '@/lib/redis';
|
||||
import { fetchAccount } from '@/lib/load';
|
||||
import { getQueryFilters, parseRequest } from '@/lib/request';
|
||||
import { json, unauthorized } from '@/lib/response';
|
||||
import { pagingParams, searchParams } from '@/lib/schema';
|
||||
|
|
@ -52,7 +52,7 @@ export async function POST(request: Request) {
|
|||
const { id, name, domain, shareId, teamId } = body;
|
||||
|
||||
if (process.env.CLOUD_MODE && !teamId) {
|
||||
const account = await redis.client.get(`account:${auth.user.id}`);
|
||||
const account = await fetchAccount(auth.user.id);
|
||||
|
||||
if (!account?.hasSubscription) {
|
||||
const count = await getWebsiteCount(auth.user.id);
|
||||
|
|
|
|||
|
|
@ -39,14 +39,8 @@ export async function fetchSession(websiteId: string, sessionId: string): Promis
|
|||
return session;
|
||||
}
|
||||
|
||||
export async function fetchAccount(websiteId: string) {
|
||||
let account = null;
|
||||
|
||||
const cache = await redis.client.get(`cache:website:${websiteId}`);
|
||||
|
||||
if (cache) {
|
||||
account = await redis.client.get(`account:${cache.account_id}`);
|
||||
}
|
||||
export async function fetchAccount(userId: string) {
|
||||
const account = await redis.client.get(`account:${userId}`);
|
||||
|
||||
return account;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ export async function parseRequest(
|
|||
const url = new URL(request.url);
|
||||
let query = Object.fromEntries(url.searchParams);
|
||||
let body = await getJsonBody(request);
|
||||
let error: () => undefined | undefined;
|
||||
let error: () => undefined | undefined | Response;
|
||||
let auth = null;
|
||||
|
||||
if (schema) {
|
||||
|
|
@ -81,12 +81,12 @@ export function getRequestFilters(query: Record<string, any>) {
|
|||
return result;
|
||||
}
|
||||
|
||||
export async function setWebsiteDate(websiteId: string, data: Record<string, any>) {
|
||||
export async function setWebsiteDate(websiteId: string, userId: string, data: Record<string, any>) {
|
||||
const website = await fetchWebsite(websiteId);
|
||||
const cloudMode = !!process.env.CLOUD_MODE;
|
||||
|
||||
if (cloudMode) {
|
||||
const account = await fetchAccount(websiteId);
|
||||
if (cloudMode && !website.teamId) {
|
||||
const account = await fetchAccount(userId);
|
||||
|
||||
if (!account?.hasSubscription) {
|
||||
data.startDate = maxDate(data.startDate, startOfMonth(subMonths(new Date(), 6)));
|
||||
|
|
@ -103,12 +103,13 @@ export async function setWebsiteDate(websiteId: string, data: Record<string, any
|
|||
export async function getQueryFilters(
|
||||
params: Record<string, any>,
|
||||
websiteId?: string,
|
||||
userId?: string,
|
||||
): Promise<QueryFilters> {
|
||||
const dateRange = getRequestDateRange(params);
|
||||
const filters = getRequestFilters(params);
|
||||
|
||||
if (websiteId) {
|
||||
await setWebsiteDate(websiteId, dateRange);
|
||||
await setWebsiteDate(websiteId, userId, dateRange);
|
||||
|
||||
if (params.segment) {
|
||||
const segmentParams = (await getWebsiteSegment(websiteId, params.segment))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue