import prisma from "../prisma/client.js"; // GET ALL NEWS export const getAllNews = async (req, res) => { try { const page = req.query.page ? parseInt(req.query.page) : null; const limit = req.query.limit ? parseInt(req.query.limit) : null; const search = req.query.search?.trim() || ""; const includeImages = { images: true, }; const searchFilter = search ? { headline: { contains: search, mode: "insensitive", }, } : {}; const whereCondition = { ...searchFilter, }; const skip = page && limit ? (page - 1) * limit : undefined; const take = limit ? limit : undefined; const [news, total] = await Promise.all([ prisma.newsMedia.findMany({ where: whereCondition, include: includeImages, orderBy: { createdAt: "desc" }, skip, take, }), prisma.newsMedia.count({ where: whereCondition, }), ]); 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, Images: n.images.map((img) => ({ id: img.id, image: img.url, })), })); return res.status(200).json({ success: true, data: response, meta: { total, page: page || 1, limit: limit || total, totalPages: limit ? Math.ceil(total / limit) : 1, }, }); } 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) }, include: { images: true }, }); 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, Images: n.images.map((img) => ({ id: img.id, image: img.url, })), }; 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, imageUrls, } = 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, images: imageUrls ? { create: imageUrls.map((url) => ({ url })), } : undefined, }, include: { images: true }, }); 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 { imageUrls, ...otherData } = req.body; const news = await prisma.newsMedia.update({ where: { id: Number(id) }, data: { ...otherData, date: req.body.date ? new Date(req.body.date) : undefined, images: imageUrls ? { deleteMany: {}, create: imageUrls.map((url) => ({ url })), } : undefined, }, include: { images: true }, }); 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", }); } };