mirror of
				https://github.com/DerTyp7/explainegy-nextjs.git
				synced 2025-10-31 05:37:12 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { Prisma, Article } from "@prisma/client";
 | |
| import { ResponseError } from "../../../types/responseErrors";
 | |
| import { formatTextToUrlName } from "../../../utils";
 | |
| import prisma, { ArticleWithIncludes } from "../../../lib/prisma";
 | |
| 
 | |
| import type { NextApiRequest, NextApiResponse } from 'next'
 | |
| import { UpdateArticle } from "../../../types/api";
 | |
| import { isValidText } from "../../../validators";
 | |
| import { getServerSession } from "next-auth/next";
 | |
| import { authOptions } from "../auth/[...nextauth]";
 | |
| 
 | |
| 
 | |
| export default async function handler(req: NextApiRequest, res: NextApiResponse) {
 | |
|   const session = await getServerSession(req, res, authOptions);
 | |
|   if (session) {
 | |
|     const articleId: string = formatTextToUrlName(req.query?.articleId?.toString() ?? "")
 | |
|     if (req.method == "PUT") {//* PUT
 | |
|       console.log("PUT")
 | |
| 
 | |
| 
 | |
|       console.log(`API articleId: ${articleId}`)
 | |
|       const articleData: UpdateArticle = req.body;
 | |
| 
 | |
|       if (articleData.title && !isValidText(articleData.title)) {
 | |
|         res.json({ target: "title", error: "Not a valid title" });
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       if (articleData.introduction && !isValidText(articleData.introduction)) {
 | |
|         res.json({ target: "introduction", error: "Not a valid introduction" });
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       const newArticle: Prisma.ArticleUncheckedUpdateInput = {
 | |
|         title: articleData.title ?? undefined,
 | |
|         name: articleData.title ? formatTextToUrlName(articleData.title) : undefined,
 | |
|         introduction: articleData.introduction ?? undefined,
 | |
| 
 | |
|         categoryId: articleData.categoryId ?? undefined,
 | |
|         contentTable: articleData.contentTable ?? undefined,
 | |
|         markdown: articleData.markdown ?? undefined,
 | |
|         imageUrl: articleData.imageUrl ?? undefined,
 | |
|       }
 | |
|       console.log(newArticle)
 | |
|       await prisma.article.update({ data: newArticle, where: { id: articleId }, include: { category: true } })
 | |
|         .then(
 | |
|           (data) => {
 | |
|             res.json({ success: true, data: data });
 | |
|           },
 | |
|           (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();
 | |
|         });
 | |
|     } else if (req.method == "DELETE") {
 | |
|       console.log("DELETE article")
 | |
|       prisma.article.delete({ where: { id: articleId }, include: { category: true } }).then((result: ArticleWithIncludes | null) => {
 | |
|         if (result) {
 | |
|           res.status(200).json(result)
 | |
|         } else {
 | |
|           res.status(500).json({ error: true, message: "No article found" })
 | |
|         }
 | |
|       }, (err) => {
 | |
|         console.log(err)
 | |
|         res.status(500).end(err)
 | |
|       })
 | |
|     }
 | |
|   } else {
 | |
|     res.status(403).json({ error: true, message: "Authorization Required" });
 | |
|   }
 | |
| }
 | 
