diff --git a/src/app.ts b/src/app.ts index 3bf5633..82ee662 100644 --- a/src/app.ts +++ b/src/app.ts @@ -6,6 +6,7 @@ import cors from 'cors' import cookieParser from 'cookie-parser' import { getJwtSecret } from './utils/jwt.js' import sessionRouter from './routers/session.js' +import categoryRouter from './routers/category.js' const authMiddleware: RequestHandler = (req, res, next) => { const token = req.cookies.jwt @@ -57,6 +58,7 @@ export function initServer(): express.Express { appRouter.use('/session/', sessionRouter) appRouter.use('/user/', authMiddleware, userRouter) + appRouter.use('/category/', authMiddleware, categoryRouter) app.use('/v1/', appRouter) diff --git a/src/routers/category.ts b/src/routers/category.ts new file mode 100644 index 0000000..28fc48b --- /dev/null +++ b/src/routers/category.ts @@ -0,0 +1,53 @@ +import { Category, PrismaClient } from "@prisma/client" +import express, { RequestHandler } from "express" +import { z } from "zod" +import { parseJwtUserId } from "./user.js" + +const categoryRouter = express.Router() +const prisma = new PrismaClient() + +const categoryData = z.object({ + name: z.string().max(50) +}).required() + +const categoryGet: RequestHandler = async (req, res) => { + let category: Category | null = null + + try { + const categoryGet = categoryData.parse(req.body) + category = await prisma.category.findFirst({ where: { name: categoryGet.name } }) + } catch (error: any) { + res.status(400).json({ message: (error.issues ?? error) }) + return; + } + + res.json({ category }) +} + +const categoryPost: RequestHandler = async (req, res) => { + const userId = parseJwtUserId(req.cookies.jwt) + if (userId === undefined) { + res.status(400).json({ message: 'Incorrect JWT payload.' }) + return; + } + + try { + const newCategory = categoryData.parse(req.body) + prisma.category.create({ + data: { + name: newCategory.name, + user_id: userId + } + }) + } catch (error: any) { + res.status(400).json({ message: (error.issues ?? error) }) + return; + } + + res.json({ message: 'Category successfully added.' }) +} + +categoryRouter.get('/', categoryGet) +categoryRouter.post('/', categoryPost) + +export default categoryRouter diff --git a/src/routers/language.ts b/src/routers/language.ts deleted file mode 100644 index 26cb7fc..0000000 --- a/src/routers/language.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Language, PrismaClient } from ".prisma/client" -import express, { RequestHandler } from "express" -import { z } from "zod" - -const langRouter = express.Router() -const prisma = new PrismaClient() - -const newLang = z.object({ - name: z.string() -}) - -const langRouterGet: RequestHandler = (res, req, next) => { - -} - -const langRouterPost: RequestHandler = (res, req, next) => { - -} - -langRouter.get('/', langRouterGet) -langRouter.post('/', langRouterPost) - -export default langRouter \ No newline at end of file diff --git a/src/routers/user.ts b/src/routers/user.ts index b80fb5c..980267c 100644 --- a/src/routers/user.ts +++ b/src/routers/user.ts @@ -11,7 +11,7 @@ const editableUserData = z.object({ picture_path: z.string().optional() }) -function parseJwtUserId(jwtoken: string): number | undefined { +export function parseJwtUserId(jwtoken: string): number | undefined { const payload = jwt.decode(jwtoken) if (payload == undefined) { return undefined