48 lines
1008 B
TypeScript
48 lines
1008 B
TypeScript
'use server';
|
|
import { PrismaClient } from '@repo/db';
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
export async function getData(
|
|
model: keyof PrismaClient,
|
|
limit: number,
|
|
offset: number,
|
|
searchTerm: string,
|
|
searchFields: string[],
|
|
filter?: Record<string, any>,
|
|
include?: Record<string, boolean>[]
|
|
) {
|
|
if (!model || !prisma[model]) {
|
|
return { data: [], total: 0 };
|
|
}
|
|
|
|
const formattedId = searchTerm.match(/^VAR(\d+)$/)?.[1];
|
|
|
|
const where = searchTerm
|
|
? {
|
|
OR: [
|
|
formattedId ? { id: formattedId } : undefined,
|
|
...searchFields.map((field) => ({
|
|
[field]: { contains: searchTerm },
|
|
})),
|
|
].filter(Boolean),
|
|
...filter,
|
|
}
|
|
: { ...filter };
|
|
|
|
if (!prisma[model]) {
|
|
return { data: [], total: 0 };
|
|
}
|
|
|
|
const data = await (prisma[model] as any).findMany({
|
|
where,
|
|
take: limit,
|
|
skip: offset,
|
|
include,
|
|
});
|
|
|
|
const total = await (prisma[model] as any).count({ where });
|
|
|
|
return { data, total };
|
|
}
|