Refactored queries.

This commit is contained in:
Mike Cao 2024-01-30 00:10:25 -08:00
parent 18e36aa7b3
commit b16f5cc067
67 changed files with 523 additions and 576 deletions

View file

@ -1,12 +1,12 @@
import { User, Website } from '@prisma/client';
import redis from '@umami/redis-client';
import { getSession, getUserById, getWebsiteById } from '../queries';
import { getSession, getUser, getWebsite } from '../queries';
async function fetchWebsite(id): Promise<Website> {
return redis.client.getCache(`website:${id}`, () => getWebsiteById(id), 86400);
async function fetchWebsite(websiteId: string): Promise<Website> {
return redis.client.getCache(`website:${websiteId}`, () => getWebsite(websiteId), 86400);
}
async function storeWebsite(data) {
async function storeWebsite(data: { id: any }) {
const { id } = data;
const key = `website:${id}`;
@ -21,11 +21,7 @@ async function deleteWebsite(id) {
}
async function fetchUser(id): Promise<User> {
return redis.client.getCache(
`user:${id}`,
() => getUserById(id, { includePassword: true }),
86400,
);
return redis.client.getCache(`user:${id}`, () => getUser(id, { includePassword: true }), 86400);
}
async function storeUser(data) {

View file

@ -1,5 +1,5 @@
import cache from 'lib/cache';
import { getSession, getUserById, getWebsiteById } from 'queries';
import { getSession, getUser, getWebsite } from 'queries';
import { User, Website, Session } from '@prisma/client';
export async function loadWebsite(websiteId: string): Promise<Website> {
@ -8,7 +8,7 @@ export async function loadWebsite(websiteId: string): Promise<Website> {
if (cache.enabled) {
website = await cache.fetchWebsite(websiteId);
} else {
website = await getWebsiteById(websiteId);
website = await getWebsite(websiteId);
}
if (!website || website.deletedAt) {
@ -40,7 +40,7 @@ export async function loadUser(userId: string): Promise<User> {
if (cache.enabled) {
user = await cache.fetchUser(userId);
} else {
user = await getUserById(userId);
user = await getUser(userId);
}
if (!user || user.deletedAt) {

View file

@ -14,7 +14,7 @@ import {
unauthorized,
} from 'next-basics';
import { NextApiRequestCollect } from 'pages/api/send';
import { getUserById } from '../queries';
import { getUser } from '../queries';
const log = debug('umami:middleware');
@ -57,12 +57,12 @@ export const useAuth = createMiddleware(async (req, res, next) => {
const { userId, authKey, grant } = payload || {};
if (userId) {
user = await getUserById(userId);
user = await getUser(userId);
} else if (redis.enabled && authKey) {
const key = await redis.client.get(authKey);
if (key?.userId) {
user = await getUserById(key.userId);
user = await getUser(key.userId);
}
}

View file

@ -175,24 +175,12 @@ async function rawQuery(sql: string, data: object): Promise<any> {
return prisma.rawQuery(query, params);
}
function getPageFilters(filters: SearchFilter): [
{
orderBy: {
[x: string]: string;
}[];
take: number;
skip: number;
},
{
pageSize: number;
page: number;
orderBy: string;
},
] {
async function pagedQuery<T>(model: string, criteria: T, filters: SearchFilter) {
const { page = 1, pageSize = DEFAULT_PAGE_SIZE, orderBy, sortDescending = false } = filters || {};
return [
{
const data = await prisma.client[model].findMany({
...criteria,
...{
...(pageSize > 0 && { take: +pageSize, skip: +pageSize * (page - 1) }),
...(orderBy && {
orderBy: [
@ -202,8 +190,11 @@ function getPageFilters(filters: SearchFilter): [
],
}),
},
{ page: +page, pageSize, orderBy },
];
});
const count = await prisma.client[model].count({ where: (criteria as any).where });
return { data, count, page: +page, pageSize, orderBy };
}
function getQueryMode(): Prisma.QueryMode {
@ -225,7 +216,7 @@ export default {
getTimestampDiffQuery,
getFilterQuery,
parseFilters,
getPageFilters,
getQueryMode,
rawQuery,
pagedQuery,
};

View file

@ -38,6 +38,10 @@ export interface TeamSearchFilter extends SearchFilter {
userId?: string;
}
export interface TeamUserSearchFilter extends SearchFilter {
teamId?: string;
}
export interface ReportSearchFilter extends SearchFilter {
userId?: string;
websiteId?: string;