diff --git a/src/controllers/updateBlogController.ts b/src/controllers/updateBlogController.ts new file mode 100644 index 00000000..8c4a488a --- /dev/null +++ b/src/controllers/updateBlogController.ts @@ -0,0 +1,36 @@ +import { Request, Response } from "express"; +import { updateBlogPost } from "../services/updateBlog.services"; + +export const updateBlogController = async (req: Request, res: Response) => { + const { id } = req.params; + const { title, content, published_at, image_url } = req.body; + + console.log("Controller - updateBlogController called with id:", id); + console.log("Controller - Request body:", req.body); + + try { + const updatedBlog = await updateBlogPost( + id, + title, + content, + published_at, + image_url, + ); + console.log("Controller - Blog post updated successfully:", updatedBlog); + + return res.status(200).json({ + status: "success", + status_code: 200, + message: "Blog post updated successfully", + data: updatedBlog, + }); + } catch (error) { + console.error("Controller - Error updating blog post:", error); + + return res.status(500).json({ + status: "unsuccessful", + status_code: 500, + message: "Failed to update the blog post. Please try again later.", + }); + } +}; diff --git a/src/routes/blog.ts b/src/routes/blog.ts index e39abeca..55cb9d5c 100644 --- a/src/routes/blog.ts +++ b/src/routes/blog.ts @@ -2,12 +2,18 @@ import { Router } from "express"; import { authMiddleware } from "../middleware"; import { createBlogController } from "../controllers/createBlogController"; import { BlogController } from "../controllers/BlogController"; +import { updateBlogController } from "../controllers/updateBlogController"; const blogRouter = Router(); const blogController = new BlogController(); blogRouter.post("/create", authMiddleware, createBlogController); -blogRouter.get("/", authMiddleware, blogController.listBlogs.bind(blogController)); +blogRouter.get( + "/", + authMiddleware, + blogController.listBlogs.bind(blogController), +); +blogRouter.put("/:id", authMiddleware, updateBlogController); blogRouter.delete("/:id", blogController.deleteBlogPost.bind(blogController)); diff --git a/src/services/updateBlog.services.ts b/src/services/updateBlog.services.ts new file mode 100644 index 00000000..cc4f4ea1 --- /dev/null +++ b/src/services/updateBlog.services.ts @@ -0,0 +1,42 @@ +import { Blog } from "../models/blog"; +import AppDataSource from "../data-source"; + +export const updateBlogPost = async ( + id: string, + title: string, + content: string, + published_at?: Date, + image_url?: string, +) => { + const blogRepository = AppDataSource.getRepository(Blog); + + let blog; + try { + blog = await blogRepository.findOne({ where: { id } }); + } catch (error) { + throw new Error("Error finding blog post."); + } + + if (!blog) { + throw new Error("Blog post not found."); + } + + blog.title = title; + blog.content = content; + + if (published_at) { + blog.published_at = published_at; + } + + if (image_url) { + blog.image_url = image_url; + } + + try { + await blogRepository.save(blog); + } catch (error) { + console.error("Service - Error saving blog post:", error); + } + + return blog; +};