mirror of
https://github.com/DerTyp7/explainegy-nextjs.git
synced 2025-10-29 12:52:13 +01:00
130 lines
3.8 KiB
TypeScript
130 lines
3.8 KiB
TypeScript
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");
|
|
|
|
if (req.method == "GET") {
|
|
await prisma.category
|
|
.findMany({ include: { svg: true } })
|
|
.then((result: Category[]) => {
|
|
if (result !== null) {
|
|
res.end(JSON.stringify(result));
|
|
} else {
|
|
console.log("No categories found");
|
|
res.end(JSON.stringify([]));
|
|
}
|
|
})
|
|
.catch((err) => {
|
|
console.log(err);
|
|
res.end(JSON.stringify([]));
|
|
});
|
|
} 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" }));
|
|
return;
|
|
}
|
|
|
|
data.name = formatTextToUrlName(data.title);
|
|
data.svg.viewbox = data.svg.viewbox.length > 1 ? data.svg.viewbox : null;
|
|
console.log(data);
|
|
|
|
await prisma.svg
|
|
.create({ data: data.svg })
|
|
.then(
|
|
async (svgData) => {
|
|
await prisma.category
|
|
.create({
|
|
data: { title: data.title, name: data.name, color: data.name, svgId: svgData.id },
|
|
include: { svg: 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();
|
|
});
|
|
},
|
|
(errorReason) => {
|
|
res.sendStatus(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();
|
|
});
|
|
}
|
|
}
|