From 58430bc702b3b31b994433e6ebf00d6b21ed7dd6 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Wed, 27 Jul 2022 03:13:00 +0200 Subject: [PATCH] Create some users API routes --- pages/api/users/[id].ts | 63 +++++++++++++++++++++++++++++++++++++++++ pages/api/users/me.ts | 49 ++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 pages/api/users/[id].ts create mode 100644 pages/api/users/me.ts diff --git a/pages/api/users/[id].ts b/pages/api/users/[id].ts new file mode 100644 index 0000000..daa4740 --- /dev/null +++ b/pages/api/users/[id].ts @@ -0,0 +1,63 @@ +import { database } from "../../../utils/prismaClient"; +import { NextApiRequest, NextApiResponse } from "next"; +import { Event, Prisma, User } from "@prisma/client"; +import { festaAPI } from "../../../utils/api"; +import { festaNoConfig } from "../../../utils/api/configurator"; +import { festaBearerAuthOptional, festaNoAuth, FestaToken } from "../../../utils/api/authenticator"; +import { festaJsonSchemaBody, festaNoBody } from "../../../utils/api/bodyValidator"; +import { festaRESTSpecific } from "../../../utils/api/executor"; +import { festaJsonSchemaQuery } from "../../../utils/api/queryValidator"; +import { Response } from "../../../utils/api/throwables"; + + +type Config = {} + +type Auth = {} + +type Query = { + id: string +} + +type Body = {} + + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + await festaAPI(req, res, { + + configurator: festaNoConfig, + + authenticator: festaNoAuth, + + queryValidator: festaJsonSchemaQuery({ + type: "object", + properties: { + id: { type: "string" } + }, + required: [ + "id", + ] + }), + + bodyValidator: festaNoBody, + + executor: festaRESTSpecific, Prisma.UserFindUniqueArgs, Prisma.UserUpdateArgs>({ + delegate: database.user, + + getFindArgs: async ({ query }) => { + return { + where: { + id: query.id, + } + } + }, + + getUpdateArgs: async ({ body, query }) => { + throw Response.error({ status: 405, message: "This route cannot be used to edit users" }) + }, + + getDestroyArgs: async ({ query }) => { + throw Response.error({ status: 405, message: "This route cannot be used to destroy users" }) + } + }), + }) +} diff --git a/pages/api/users/me.ts b/pages/api/users/me.ts new file mode 100644 index 0000000..9f83070 --- /dev/null +++ b/pages/api/users/me.ts @@ -0,0 +1,49 @@ +import { database } from "../../../utils/prismaClient"; +import { NextApiRequest, NextApiResponse } from "next"; +import { Event, Prisma } from "@prisma/client"; +import { festaNoConfig } from "../../../utils/api/configurator"; +import { festaBearerAuthRequired, FestaToken } from "../../../utils/api/authenticator"; +import { festaAPI } from "../../../utils/api"; +import { festaNoQuery } from "../../../utils/api/queryValidator"; +import { festaNoBody } from "../../../utils/api/bodyValidator"; +import { festaRESTGeneric } from "../../../utils/api/executor"; +import { Response } from "../../../utils/api/throwables"; + + +type Config = {} + +type Auth = FestaToken + +type Query = {} + +type Body = {} + + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + await festaAPI(req, res, { + + configurator: festaNoConfig, + + authenticator: festaBearerAuthRequired, + + queryValidator: festaNoQuery, + + bodyValidator: festaNoBody, + + executor: festaRESTGeneric, Prisma.UserFindManyArgs, Prisma.UserCreateArgs>({ + delegate: database.user, + + getListArgs: async ({ auth }) => { + return { + where: { + id: auth.userId, + } + } + }, + + getCreateArgs: async ({ }) => { + throw Response.error({ status: 405, message: "This route cannot be used to create new users" }) + }, + }), + }) +}