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', }); } };