From cf4193d5f273cfa76d7cf7210ff6c458cbc6b43e Mon Sep 17 00:00:00 2001 From: Janis Date: Wed, 1 Feb 2023 12:05:19 +0100 Subject: [PATCH] clean up --- pages/api/articles/[articleId].ts | 97 +++++++++++++----- pages/api/articles/index.ts | 82 ++++------------ pages/api/articles/name/[articleName].ts | 7 +- pages/api/categories/[categoryId].ts | 103 ++++++++++++++++---- pages/api/categories/index.ts | 84 +++------------- pages/api/categories/name/[categoryName].ts | 14 +-- types/api.ts | 4 +- 7 files changed, 195 insertions(+), 196 deletions(-) diff --git a/pages/api/articles/[articleId].ts b/pages/api/articles/[articleId].ts index ecead2c..fb6833b 100644 --- a/pages/api/articles/[articleId].ts +++ b/pages/api/articles/[articleId].ts @@ -1,38 +1,83 @@ import { Prisma, Article } from "@prisma/client"; -import { Request, Response } from "express"; import { ResponseError } from "../../../types/responseErrors"; import { formatTextToUrlName } from "../../../utils"; import prisma from "../../../lib/prisma"; +import type { NextApiRequest, NextApiResponse } from 'next' +import { UpdateArticle } from "../../../types/api"; +import { isValidText } from "../../../validators"; type ArticleWithIncludes = Prisma.ArticleGetPayload<{ include: { contentTableEntries: true, category: true, image: true } }> - - -export default async function handler(req: Request, res: Response) { - res.setHeader("Content-Type", "application/json"); - +export default async function handler(req: NextApiRequest, res: NextApiResponse) { const articleId: string = formatTextToUrlName(req.query.articleId.toString()) - await prisma.article - .findUnique({ where: { id: articleId }, include: { category: true, image: true } }) - .then((result: ArticleWithIncludes) => { - if (result !== null) { - res.end(JSON.stringify(result)); - } else { - const error: ResponseError = { - code: "404", - message: "No article with this name found!", - }; - res.status(404).send(JSON.stringify(error)); - } - }) - .catch((err) => { + if (req.method == "GET") { //* GET + await prisma.article + .findUnique({ where: { id: articleId }, include: { category: true, image: true } }) + .then((result: ArticleWithIncludes) => { + if (result !== null) { + res.json(result); + } else { + const error: ResponseError = { + code: "404", + message: "No article with this name found!", + }; + res.status(404).json(error); + } + }) + .catch((err) => { + + const error: ResponseError = { + code: "500", + message: err, + }; + res.status(500).json(error); + }); + } else if (req.method == "PUT") {//* PUT + const data: UpdateArticle = req.body; + + if (!isValidText(data.title)) { + res.json({ target: "title", error: "Not a valid title" }); + return; + } + + if (!isValidText(data.introduction)) { + res.json({ target: "introduction", error: "Not a valid introduction" }); + return; + } + + if (!data.categoryId) { + res.json({ target: "category", error: "Category is required" }); + return; + } + + const newArticle: Prisma.ArticleUncheckedUpdateInput = { + title: data.title, + name: formatTextToUrlName(data.title), + introduction: data.introduction, + + categoryId: data.categoryId.toString(), + contentTable: data.contentTable, + markdown: data.markdown, + imageId: data.imageId.toString(), + } + + await prisma.article.update({ data: newArticle, where: { id: articleId }, include: { category: true } }) + .then( + (data) => { + res.json({ success: true, data: data }); + }, + (errorReason) => { + if (errorReason.code === "P2002") { + res.json({ target: errorReason.meta.target[0], error: "Already exists" }); + } + } + ) + .catch((err) => { + console.error(err); + res.status(500).end(); + }); + } - const error: ResponseError = { - code: "500", - message: err, - }; - res.status(500).send(JSON.stringify(error)); - }); } diff --git a/pages/api/articles/index.ts b/pages/api/articles/index.ts index 12f0f8e..0088085 100644 --- a/pages/api/articles/index.ts +++ b/pages/api/articles/index.ts @@ -1,8 +1,5 @@ -import { Request, Response } from "express"; import prisma from "../../../lib/prisma"; -//@ts-ignore import { Prisma } from "@prisma/client"; -//@ts-ignore import { Article, Category } from "@prisma/client"; import { ResponseError } from "../../../types/responseErrors"; import { formatTextToUrlName } from "../../../utils"; @@ -10,14 +7,13 @@ import { isValidText } from "../../../validators"; import { title } from 'process'; import { UpdateArticle } from "../../../types/api"; -export default async function handler(req: Request, res: Response) { - res.setHeader("Content-Type", "application/json"); +import type { NextApiRequest, NextApiResponse } from 'next' - if (req.method == "GET") { +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (req.method == "GET") { //* GET const categoryName: string = req.query.categoryName?.toString() ?? ""; const limit: number = req.query.limit ? Number(req.query.limit) : undefined; const orderBy: string = req.query.orderBy?.toString() ?? ""; - const category = await prisma.category.findUnique({ where: { name: categoryName } }); let orderByObj: Prisma.Enumerable; @@ -27,10 +23,9 @@ export default async function handler(req: Request, res: Response) { dateCreated: "desc" } } else if (orderBy === "popularity") { - + // TODO filter with views } - await prisma.article .findMany({ where: { category: categoryName.length > 0 ? category : undefined }, @@ -46,7 +41,7 @@ export default async function handler(req: Request, res: Response) { code: "404", message: "No articles found!", }; - res.status(404).send(JSON.stringify(error)); + res.status(404).json(error); } }) .catch((err) => { @@ -54,23 +49,25 @@ export default async function handler(req: Request, res: Response) { code: "500", message: err, }; - res.status(500).send(JSON.stringify(error)); + res.status(500).json(JSON.stringify(error)); }); - } else if (req.method == "POST") { - const data: any = req.body; + + } else if (req.method == "POST") { //* POST + const data: any = req.body; + console.log(data) if (!isValidText(data.title)) { - res.send(JSON.stringify({ target: "title", error: "Not a valid title" })); + res.json({ target: "title", error: "Not a valid title" }); return; } if (!isValidText(data.introduction)) { - res.send(JSON.stringify({ target: "introduction", error: "Not a valid introduction" })); + res.json({ target: "introduction", error: "Not a valid introduction" }); return; } if (!data.categoryId) { - res.send(JSON.stringify({ target: "category", error: "Category is required" })); + res.json({ target: "category", error: "Category is required" }); return; } @@ -79,62 +76,19 @@ export default async function handler(req: Request, res: Response) { .create({ data: data, include: { category: true } }) .then( (data) => { - res.send(JSON.stringify({ success: true, data: data })); + console.log("success") + res.json({ success: true, data: data }); }, (errorReason) => { + console.log(errorReason) if (errorReason.code === "P2002") { - res.send(JSON.stringify({ target: errorReason.meta.target[0], error: "Already exists" })); + res.json({ target: errorReason.meta.target[0], error: "Already exists" }); } } ) .catch((err) => { console.error(err); - res.sendStatus(500).end(); - }); - } else if (req.method == "PUT") { - const data: UpdateArticle = req.body; - - if (!isValidText(data.title)) { - res.send(JSON.stringify({ target: "title", error: "Not a valid title" })); - return; - } - - if (!isValidText(data.introduction)) { - res.send(JSON.stringify({ target: "introduction", error: "Not a valid introduction" })); - return; - } - - if (!data.categoryId) { - res.send(JSON.stringify({ target: "category", error: "Category is required" })); - return; - } - - const newArticle: Prisma.ArticleUncheckedUpdateInput = { - title: data.title, - name: formatTextToUrlName(data.title), - introduction: data.introduction, - //@ts-ignore - categoryId: data.categoryId, - contentTable: data.contentTable, - markdown: data.markdown, - //@ts-ignore - imageId: data.imageId, - } - - await prisma.article.update({ data: newArticle, where: { id: data.id }, include: { category: true } }) - .then( - (data) => { - res.send(JSON.stringify({ success: true, data: data })); - }, - (errorReason) => { - if (errorReason.code === "P2002") { - res.send(JSON.stringify({ target: errorReason.meta.target[0], error: "Already exists" })); - } - } - ) - .catch((err) => { - console.error(err); - res.sendStatus(500).end(); + res.status(500).end(); }); } diff --git a/pages/api/articles/name/[articleName].ts b/pages/api/articles/name/[articleName].ts index 739af61..e1836c5 100644 --- a/pages/api/articles/name/[articleName].ts +++ b/pages/api/articles/name/[articleName].ts @@ -1,18 +1,17 @@ -import { Request, Response } from "express"; import prisma from "../../../../lib/prisma"; import { Prisma } from '@prisma/client'; import { ResponseError } from "../../../../types/responseErrors"; import { formatTextToUrlName } from "../../../../utils"; +import type { NextApiRequest, NextApiResponse } from 'next' type ArticleWithIncludes = Prisma.ArticleGetPayload<{ include: { contentTableEntries: true, category: true, image: true } }> -export default async function handler(req: Request, res: Response) { - res.setHeader("Content-Type", "application/json"); +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const articleName: string = formatTextToUrlName(req.query.articleName.toString()) - await prisma.article .findUnique({ where: { name: articleName }, include: { category: true, image: true } }) .then((result: ArticleWithIncludes) => { diff --git a/pages/api/categories/[categoryId].ts b/pages/api/categories/[categoryId].ts index 40f2c96..7d15b77 100644 --- a/pages/api/categories/[categoryId].ts +++ b/pages/api/categories/[categoryId].ts @@ -2,30 +2,93 @@ import { Request, Response } from "express"; import prisma from "../../../lib/prisma"; import { Category } from "@prisma/client"; import { ResponseError } from "../../../types/responseErrors"; +import { Prisma } from "@prisma/client"; -export default async function handler(req: Request, res: Response) { - res.setHeader("Content-Type", "application/json"); +import type { NextApiRequest, NextApiResponse } from 'next' +import { formatTextToUrlName } from "../../../utils"; +import { isValidText } from "../../../validators"; +export default async function handler(req: NextApiRequest, res: NextApiResponse) { const categoryId: string = req.query.categoryId.toString() ?? undefined; - await prisma.category - .findUnique({ where: { id: categoryId }, include: { svg: true } }) - .then((result: Category) => { - if (result !== null) { - res.end(JSON.stringify(result)); - } else { + if (req.method == "GET") { + await prisma.category + .findUnique({ where: { id: categoryId }, include: { svg: true } }) + .then((result: Category) => { + if (result !== null) { + res.json(result); + } else { + const error: ResponseError = { + code: "404", + message: "No category with this id found!", + }; + res.status(404).json(error); + } + }) + .catch((err) => { const error: ResponseError = { - code: "404", - message: "No category with this id found!", + code: "500", + message: err, }; - res.status(404).send(JSON.stringify(error)); - } - }) - .catch((err) => { - const error: ResponseError = { - code: "500", - message: err, - }; - res.status(500).send(JSON.stringify(error)); - }); + res.status(500).json(error); + }); + + } else if (req.method == "PUT") { + const data: any = req.body; + if (!isValidText(data.title)) { + res.json({ target: "title", error: "Not a valid title" }); + return; + } + + data.name = formatTextToUrlName(data.title); + + console.log(data); + const newSvg: Prisma.SvgUncheckedUpdateInput = { + viewbox: data.svg.viewbox, + path: data.svg.path, + }; + + const newCategory: Prisma.CategoryUncheckedUpdateInput = { + title: data.title, + name: data.name, + color: data.color, + }; + + await prisma.category + .update({ + data: newCategory, + where: { id: categoryId }, + include: { svg: true }, + }) + .then( + async (categoryData) => { + console.log("2"); + await prisma.svg + .update({ data: newSvg, where: { id: categoryData.svg.id } }) + .then( + (svgData) => { + console.log("3"); + res.json({ success: true, data: categoryData }); + }, + (errorReason) => { + res.status(500).end(errorReason); + } + ) + .catch((err) => { + console.error(err); + res.status(500).end(); + }); + }, + (errorReason) => { + console.log(errorReason); + if (errorReason.code === "P2002") { + res.json({ target: errorReason.meta.target[0], error: "Already exists" }); + } + } + ) + .catch((err) => { + console.error(err); + res.status(500).end(); + }); + } } diff --git a/pages/api/categories/index.ts b/pages/api/categories/index.ts index ecdba2f..6f4c486 100644 --- a/pages/api/categories/index.ts +++ b/pages/api/categories/index.ts @@ -1,34 +1,33 @@ -import { Request, Response } from "express"; + import prisma from "../../../lib/prisma"; import { Prisma } from "@prisma/client"; import { Category, Svg } from "@prisma/client"; import { ResponseError } from "../../../types/responseErrors"; import { formatTextToUrlName } from "../../../utils"; import { isValidText } from "../../../validators"; -import { title } from "process"; -export default async function handler(req: Request, res: Response) { - res.setHeader("Content-Type", "application/json"); +import type { NextApiRequest, NextApiResponse } from 'next' - if (req.method == "GET") { +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (req.method == "GET") { //* GET await prisma.category .findMany({ include: { svg: true } }) .then((result: Category[]) => { if (result !== null) { - res.end(JSON.stringify(result)); + res.json(result); } else { console.log("No categories found"); - res.end(JSON.stringify([])); + res.json([]); } }) .catch((err) => { console.log(err); - res.end(JSON.stringify([])); + res.json([]); }); } else if (req.method == "POST") { const data: any = req.body; if (!isValidText(data.title)) { - res.send(JSON.stringify({ target: "title", error: "Not a valid title" })); + res.json({ target: "title", error: "Not a valid title" }); return; } @@ -47,83 +46,26 @@ export default async function handler(req: Request, res: Response) { }) .then( (data) => { - res.send(JSON.stringify({ success: true, data: data })); + res.json({ success: true, data: data }); }, (errorReason) => { if (errorReason.code === "P2002") { - res.send(JSON.stringify({ target: errorReason.meta.target[0], error: "Already exists" })); + res.json({ target: errorReason.meta.target[0], error: "Already exists" }); } } ) .catch((err) => { console.error(err); - res.sendStatus(500).end(); + res.status(500).end(); }); }, (errorReason) => { - res.sendStatus(500).end(errorReason); + res.status(500).end(errorReason); } ) .catch((err) => { console.error(err); - res.sendStatus(500).end(); - }); - } else if (req.method == "PUT") { - const data: any = req.body; - if (!isValidText(data.title)) { - res.send(JSON.stringify({ target: "title", error: "Not a valid title" })); - return; - } - - data.name = formatTextToUrlName(data.title); - - console.log(data); - const newSvg: Prisma.SvgUncheckedUpdateInput = { - viewbox: data.svg.viewbox, - path: data.svg.path, - }; - - const newCategory: Prisma.CategoryUncheckedUpdateInput = { - title: data.title, - name: data.name, - color: data.color, - }; - - await prisma.category - .update({ - data: newCategory, - where: { id: data.id }, - include: { svg: true }, - }) - .then( - async (categoryData) => { - console.log("2"); - await prisma.svg - .update({ data: newSvg, where: { id: categoryData.svg.id } }) - .then( - (svgData) => { - console.log("3"); - res.send(JSON.stringify({ success: true, data: categoryData })); - }, - (errorReason) => { - res.sendStatus(500).end(errorReason); - } - ) - .catch((err) => { - console.error(err); - res.sendStatus(500).end(); - }); - }, - (errorReason) => { - console.log(errorReason); - if (errorReason.code === "P2002") { - res.send(JSON.stringify({ target: errorReason.meta.target[0], error: "Already exists" })); - } - } - ) - .catch((err) => { - console.error(err); - res.sendStatus(500).end(); + res.status(500).end(); }); } } diff --git a/pages/api/categories/name/[categoryName].ts b/pages/api/categories/name/[categoryName].ts index 0e5d431..515aeb9 100644 --- a/pages/api/categories/name/[categoryName].ts +++ b/pages/api/categories/name/[categoryName].ts @@ -1,26 +1,22 @@ -import { Request, Response } from "express"; - import { Category } from "@prisma/client"; import prisma from "../../../../lib/prisma"; import { ResponseError } from "../../../../types/responseErrors"; +import type { NextApiRequest, NextApiResponse } from 'next' - -export default async function handler(req: Request, res: Response) { - res.setHeader("Content-Type", "application/json"); - +export default async function handler(req: NextApiRequest, res: NextApiResponse) { const categoryName: string = req.query.categoryName.toString() ?? undefined; await prisma.category .findUnique({ where: { name: categoryName }, include: { svg: true } }) .then((result: Category) => { if (result !== null) { - res.end(JSON.stringify(result)); + res.json(result); } else { const error: ResponseError = { code: "404", message: "No category with this name found!", }; - res.status(404).send(JSON.stringify(error)); + res.status(404).json(error); } }) .catch((err) => { @@ -28,6 +24,6 @@ export default async function handler(req: Request, res: Response) { code: "500", message: err, }; - res.status(500).send(JSON.stringify(error)); + res.status(500).json(error); }); } diff --git a/types/api.ts b/types/api.ts index efaf2d7..d0fc32d 100644 --- a/types/api.ts +++ b/types/api.ts @@ -11,7 +11,7 @@ export interface CreateArticle { } export interface UpdateArticle { - id: string; + title?: string; markdown?: string; introduction?: string; @@ -30,7 +30,7 @@ export interface CreateCategory { color: string; } export interface UpdateCategory { - id: string; + title?: string; svg?: { path?: string;