Convert event-data, events, session-data, sessions routes.

This commit is contained in:
Mike Cao 2025-01-21 20:57:47 -08:00
parent baa3851fb4
commit 7d5556a637
47 changed files with 692 additions and 136 deletions

View file

@ -0,0 +1,37 @@
import { z } from 'zod';
import { checkRequest } from 'lib/request';
import { badRequest, unauthorized, json } from 'lib/response';
import { canViewWebsite, checkAuth } from 'lib/auth';
import { getSessionActivity } from 'queries';
export async function GET(
request: Request,
{ params }: { params: Promise<{ websiteId: string; sessionId: string }> },
) {
const schema = z.object({
startAt: z.coerce.number().int(),
endAt: z.coerce.number().int(),
});
const { query, error } = await checkRequest(request, schema);
if (error) {
return badRequest(error);
}
const { websiteId, sessionId } = await params;
const { startAt, endAt } = query;
const auth = await checkAuth(request);
if (!auth || !(await canViewWebsite(auth, websiteId))) {
return unauthorized();
}
const startDate = new Date(+startAt);
const endDate = new Date(+endAt);
const data = await getSessionActivity(websiteId, sessionId, startDate, endDate);
return json(data);
}

View file

@ -0,0 +1,20 @@
import { unauthorized, json } from 'lib/response';
import { canViewWebsite, checkAuth } from 'lib/auth';
import { getSessionData } from 'queries';
export async function GET(
request: Request,
{ params }: { params: Promise<{ websiteId: string; sessionId: string }> },
) {
const { websiteId, sessionId } = await params;
const auth = await checkAuth(request);
if (!auth || !(await canViewWebsite(auth, websiteId))) {
return unauthorized();
}
const data = await getSessionData(websiteId, sessionId);
return json(data);
}

View file

@ -0,0 +1,20 @@
import { unauthorized, json } from 'lib/response';
import { canViewWebsite, checkAuth } from 'lib/auth';
import { getWebsiteSession } from 'queries';
export async function GET(
request: Request,
{ params }: { params: Promise<{ websiteId: string; sessionId: string }> },
) {
const { websiteId, sessionId } = await params;
const auth = await checkAuth(request);
if (!auth || !(await canViewWebsite(auth, websiteId))) {
return unauthorized();
}
const data = await getWebsiteSession(websiteId, sessionId);
return json(data);
}

View file

@ -0,0 +1,39 @@
import { z } from 'zod';
import { checkRequest } from 'lib/request';
import { badRequest, unauthorized, json } from 'lib/response';
import { canViewWebsite, checkAuth } from 'lib/auth';
import { pagingParams } from 'lib/schema';
import { getWebsiteSessions } from 'queries';
export async function GET(
request: Request,
{ params }: { params: Promise<{ websiteId: string }> },
) {
const schema = z.object({
startAt: z.coerce.number().int(),
endAt: z.coerce.number().int(),
...pagingParams,
});
const { query, error } = await checkRequest(request, schema);
if (error) {
return badRequest(error);
}
const { websiteId } = await params;
const { startAt, endAt } = query;
const auth = await checkAuth(request);
if (!auth || !(await canViewWebsite(auth, websiteId))) {
return unauthorized();
}
const startDate = new Date(+startAt);
const endDate = new Date(+endAt);
const data = await getWebsiteSessions(websiteId, { startDate, endDate }, query);
return json(data);
}

View file

@ -0,0 +1,50 @@
import { z } from 'zod';
import { checkRequest, getRequestDateRange, getRequestFilters } from 'lib/request';
import { badRequest, unauthorized, json } from 'lib/response';
import { canViewWebsite, checkAuth } from 'lib/auth';
import { filterParams } from 'lib/schema';
import { getWebsiteSessionStats } from 'queries';
export async function GET(
request: Request,
{ params }: { params: Promise<{ websiteId: string }> },
) {
const schema = z.object({
startAt: z.coerce.number().int(),
endAt: z.coerce.number().int(),
...filterParams,
});
const { error } = await checkRequest(request, schema);
if (error) {
return badRequest(error);
}
const { websiteId } = await params;
const auth = await checkAuth(request);
if (!auth || !(await canViewWebsite(auth, websiteId))) {
return unauthorized();
}
const { startDate, endDate } = await getRequestDateRange(request);
const filters = getRequestFilters(request);
const metrics = await getWebsiteSessionStats(websiteId, {
...filters,
startDate,
endDate,
});
const data = Object.keys(metrics[0]).reduce((obj, key) => {
obj[key] = {
value: Number(metrics[0][key]) || 0,
};
return obj;
}, {});
return json(data);
}

View file

@ -0,0 +1,40 @@
import { z } from 'zod';
import { checkRequest } from 'lib/request';
import { badRequest, unauthorized, json } from 'lib/response';
import { canViewWebsite, checkAuth } from 'lib/auth';
import { pagingParams, timezoneParam } from 'lib/schema';
import { getWebsiteSessionsWeekly } from 'queries';
export async function GET(
request: Request,
{ params }: { params: Promise<{ websiteId: string }> },
) {
const schema = z.object({
startAt: z.coerce.number().int(),
endAt: z.coerce.number().int(),
timezone: timezoneParam,
...pagingParams,
});
const { query, error } = await checkRequest(request, schema);
if (error) {
return badRequest(error);
}
const { websiteId } = await params;
const { startAt, endAt, timezone } = query;
const auth = await checkAuth(request);
if (!auth || !(await canViewWebsite(auth, websiteId))) {
return unauthorized();
}
const startDate = new Date(+startAt);
const endDate = new Date(+endAt);
const data = await getWebsiteSessionsWeekly(websiteId, { startDate, endDate, timezone });
return json(data);
}