From 9e5dc4a740fe7d5dee39b1aa1161395bf787cc6e Mon Sep 17 00:00:00 2001 From: Guillaume Dorce Date: Thu, 25 Aug 2022 15:59:40 +0200 Subject: [PATCH] add deletePost route --- src/api/posts/deletePost.ts | 16 ++++++++++++++++ src/api/posts/index.ts | 4 +++- src/controller/PostController.ts | 23 +++++++++++++++++++++-- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/api/posts/deletePost.ts b/src/api/posts/deletePost.ts index e69de29..0defa0d 100644 --- a/src/api/posts/deletePost.ts +++ b/src/api/posts/deletePost.ts @@ -0,0 +1,16 @@ +import { deletePost } from '@/controller/PostController'; +import { Request, Response } from 'express'; + +export default async (req: Request, res: Response) => { + try { + const id = parseInt(req.params.id); + const userId = 1; // hardcoded for now, use userId from token + const deletedPost = await deletePost(id, userId); + if (deletedPost instanceof Error) { + return res.status(403).send(deletedPost.message); + } + return res.status(200).send({ message: 'Post deleted' }); + } catch (error) { + return res.status(500).send(error); + } +}; diff --git a/src/api/posts/index.ts b/src/api/posts/index.ts index 954fa40..63eb08c 100644 --- a/src/api/posts/index.ts +++ b/src/api/posts/index.ts @@ -1,12 +1,14 @@ +import { Router } from 'express'; import getPosts from './getPosts'; import postPost from './newPost'; import putPost from './editPost'; -import { Router } from 'express'; +import deletePost from './deletePost'; const posts = Router(); posts.get('/', getPosts); posts.post('/new', postPost); posts.put('/edit/:id', putPost); +posts.delete('/delete/:id', deletePost); export default posts; diff --git a/src/controller/PostController.ts b/src/controller/PostController.ts index 43e34ad..e8c70a9 100644 --- a/src/controller/PostController.ts +++ b/src/controller/PostController.ts @@ -1,4 +1,4 @@ -import { PrismaClient, Post as PrismaPost } from '@prisma/client'; +import { PrismaClient, Post as PrismaPost, User } from '@prisma/client'; import { Post } from '@/models/PostModel'; const prisma = new PrismaClient(); @@ -71,4 +71,23 @@ const editPost = async (post: Post): Promise => { return editedPost; }; -export { getAllPosts, createPost, editPost, getPostById }; +const deletePost = async (id: number, userId: number): Promise => { + const post = await prisma.post.findUnique({ + where: { + id, + }, + }); + if (post === null) { + return new Error('Post not found'); + } + if (post.authorId !== userId) { + return new Error('User is not the author of this post'); + } + return prisma.post.delete({ + where: { + id, + }, + }); +}; + +export { getAllPosts, createPost, editPost, getPostById, deletePost };