feat: add news media api
This commit is contained in:
@@ -13,6 +13,7 @@ import appointmentRoutes from "./routes/appointment.routes.js";
|
||||
import inquiryRoutes from "./routes/inquiry.routes.js";
|
||||
import academicsResearchRoutes from "./routes/academicsResearch.routes.js";
|
||||
import emailConfigRoutes from "./routes/emailConfig.routes.js";
|
||||
import newsMediaRoutes from "./routes/newsMedia.routes.js";
|
||||
|
||||
dotenv.config();
|
||||
|
||||
@@ -49,6 +50,7 @@ app.use("/api/appointments", appointmentRoutes);
|
||||
app.use("/api/inquiry", inquiryRoutes);
|
||||
app.use("/api/academics", academicsResearchRoutes);
|
||||
app.use("/api/email", emailConfigRoutes);
|
||||
app.use("/api/newsMedia", newsMediaRoutes);
|
||||
|
||||
const PORT = process.env.PORT || 3000;
|
||||
app.listen(PORT, () => {
|
||||
|
||||
@@ -0,0 +1,161 @@
|
||||
import prisma from "../prisma/client.js";
|
||||
|
||||
// GET ALL NEWS
|
||||
|
||||
export const getAllNews = async (req, res) => {
|
||||
try {
|
||||
const news = await prisma.newsMedia.findMany({
|
||||
orderBy: { createdAt: "desc" },
|
||||
});
|
||||
|
||||
const response = news.map((n) => ({
|
||||
Id: n.id.toString(),
|
||||
Headline: n.headline,
|
||||
Content: n.content,
|
||||
FirstPara: n.firstPara,
|
||||
SecondPara: n.secondPara,
|
||||
Date: n.date,
|
||||
Author: n.author,
|
||||
}));
|
||||
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
data: response,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: "Failed to fetch news",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// GET NEWS BY ID
|
||||
|
||||
export const getNewsById = async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
const n = await prisma.newsMedia.findUnique({
|
||||
where: { id: Number(id) },
|
||||
});
|
||||
|
||||
if (!n) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
message: "News not found",
|
||||
});
|
||||
}
|
||||
|
||||
const response = {
|
||||
Id: n.id.toString(),
|
||||
Headline: n.headline,
|
||||
Content: n.content,
|
||||
FirstPara: n.firstPara,
|
||||
SecondPara: n.secondPara,
|
||||
Date: n.date,
|
||||
Author: n.author,
|
||||
};
|
||||
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
data: response,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: "Failed to fetch news",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// CREATE NEWS
|
||||
|
||||
export const createNews = async (req, res) => {
|
||||
try {
|
||||
const { headline, content, firstPara, secondPara, date, author } = req.body;
|
||||
|
||||
if (!headline) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: "Headline is required",
|
||||
});
|
||||
}
|
||||
|
||||
const news = await prisma.newsMedia.create({
|
||||
data: {
|
||||
headline,
|
||||
content,
|
||||
firstPara,
|
||||
secondPara,
|
||||
date: date ? new Date(date) : null,
|
||||
author,
|
||||
},
|
||||
});
|
||||
|
||||
return res.status(201).json({
|
||||
success: true,
|
||||
message: "News created successfully",
|
||||
data: news,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: "Failed to create news",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// UPDATE NEWS
|
||||
|
||||
export const updateNews = async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
const news = await prisma.newsMedia.update({
|
||||
where: { id: Number(id) },
|
||||
data: {
|
||||
...req.body,
|
||||
date: req.body.date ? new Date(req.body.date) : undefined,
|
||||
},
|
||||
});
|
||||
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
message: "News updated successfully",
|
||||
data: news,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: "Failed to update news",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// DELETE NEWS
|
||||
|
||||
export const deleteNews = async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
await prisma.newsMedia.delete({
|
||||
where: { id: Number(id) },
|
||||
});
|
||||
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
message: "News deleted successfully",
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: "Failed to delete news",
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,23 @@
|
||||
import express from "express";
|
||||
import {
|
||||
createNews,
|
||||
getAllNews,
|
||||
getNewsById,
|
||||
updateNews,
|
||||
deleteNews,
|
||||
} from "../controllers/newsMedia.controller.js";
|
||||
|
||||
import jwtAuthMiddleware from "../middleware/auth.js";
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
// PUBLIC ROUTES
|
||||
router.get("/getAll", getAllNews);
|
||||
router.get("/:id", getNewsById);
|
||||
|
||||
// PROTECTED ROUTES
|
||||
router.post("/", jwtAuthMiddleware, createNews);
|
||||
router.patch("/:id", jwtAuthMiddleware, updateNews);
|
||||
router.delete("/:id", jwtAuthMiddleware, deleteNews);
|
||||
|
||||
export default router;
|
||||
Reference in New Issue
Block a user