- Implemented Async Select - Changed Stats Page User fetching to use Async Select and only fetch the User data when it needs - Changed Record Filter to use Async Select - Changed useTicketListener to only fetch needed data - Added Sort/Projection to remove unnecessary data processing. - Removed some unnecessary data processing.
39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
import type { NextApiRequest, NextApiResponse } from "next";
|
|
import { withIronSessionApiRoute } from "iron-session/next";
|
|
import { sessionOptions } from "@/lib/session";
|
|
import { searchUsers } from "@/utils/users.be";
|
|
import { Type } from "@/interfaces/user";
|
|
|
|
export default withIronSessionApiRoute(handler, sessionOptions);
|
|
|
|
async function handler(req: NextApiRequest, res: NextApiResponse) {
|
|
if (!req.session.user && !req.headers["page"] && req.headers["page"] !== "register") {
|
|
res.status(401).json({ ok: false });
|
|
return;
|
|
}
|
|
|
|
const {
|
|
value,
|
|
size,
|
|
page,
|
|
orderBy = "name",
|
|
direction = "asc",
|
|
type,
|
|
entities
|
|
} = req.query as { value?: string, size?: string; type?: Type; page?: string; orderBy?: string; direction?: "asc" | "desc", entities?: string };
|
|
|
|
const { users, total } = await searchUsers(
|
|
value,
|
|
size !== undefined ? parseInt(size) : undefined,
|
|
page !== undefined ? parseInt(page) : undefined,
|
|
{
|
|
[orderBy]: direction === "asc" ? 1 : -1,
|
|
},
|
|
{},
|
|
{
|
|
...(type ? { "type": type } : {}),
|
|
...(entities ? { "entities.id": entities.split(',') } : {})
|
|
}
|
|
);
|
|
res.status(200).json({ users, total });
|
|
} |