UNPKG

@zeushq/nextjs-zapi

Version:

Next.js SDK for creating a Zeus API

55 lines (45 loc) 1.7 kB
// import { IncomingMessage, ServerResponse } from 'http'; import { NextApiRequest, NextApiResponse } from 'next'; import { ZApiResource } from '../../handlers/resource'; // import { ListOptions } from '../config'; import createDebug from '../utils/debug'; const debug = createDebug('handlers'); export type HandleList = (req: NextApiRequest, res: NextApiResponse) => Promise<void>; export default function listHandlerFactory(): HandleList { return async (req, res) => { const zapi = (res as any).zapi as ZApiResource; debug('list', zapi); // Handle pagination let paginationOptions = {}; if (zapi.params.skip && zapi.params.take) { paginationOptions = { skip: parseInt(zapi.params.skip), take: parseInt(zapi.params.take) }; } else if (zapi.params.cursor && zapi.params.take) { paginationOptions = { cursor: zapi.params.cursor, take: parseInt(zapi.params.take) }; } // Handle sorting let orderBy = {} as any; if (zapi.params.orderBy && zapi.params.orderByDirection) { orderBy = {}; orderBy[zapi.params.orderBy] = zapi.params.orderByDirection; } else { orderBy.id = 'desc'; } // Remove pagination and sorting params delete zapi.params.skip; delete zapi.params.cursor; delete zapi.params.take; delete zapi.params.orderBy; delete zapi.params.orderByDirection; let where = { ...zapi.params } as any; if (zapi.scope?.on && zapi.scope?.with) { where[zapi.scope.on] = { some: await zapi?.scope.with(req, res) }; } const objects = await zapi.model.findMany({ where, orderBy, ...paginationOptions }); res.json({ objects }); res.end(); }; }