feat: home page banner crud
This commit is contained in:
@@ -16,6 +16,7 @@ import emailConfigRoutes from './routes/emailConfig.routes.js';
|
||||
import newsMediaRoutes from './routes/newsMedia.routes.js';
|
||||
import importRoutes from './routes/importRoutes.js';
|
||||
import healthCheckRoutes from './routes/healthCheck.route.js';
|
||||
import homepageBannerRoutes from './routes/homepageBanner.routes.js';
|
||||
|
||||
dotenv.config();
|
||||
|
||||
@@ -57,6 +58,7 @@ app.use('/api/email', emailConfigRoutes);
|
||||
app.use('/api/newsMedia', newsMediaRoutes);
|
||||
app.use('/api/import', importRoutes);
|
||||
app.use('/api/health-check', healthCheckRoutes);
|
||||
app.use('/api/homepage-banners', homepageBannerRoutes);
|
||||
|
||||
const PORT = process.env.PORT || 5008;
|
||||
app.listen(PORT, () => {
|
||||
|
||||
@@ -0,0 +1,203 @@
|
||||
import prisma from '../prisma/client.js';
|
||||
|
||||
export const createHomepageBanner = async (req, res) => {
|
||||
try {
|
||||
const {
|
||||
title,
|
||||
subtitle,
|
||||
mediaType,
|
||||
desktopMediaUrl,
|
||||
mobileMediaUrl,
|
||||
buttonText,
|
||||
buttonLink,
|
||||
openInNewTab,
|
||||
textAlignment,
|
||||
sortOrder,
|
||||
isActive,
|
||||
} = req.body;
|
||||
|
||||
if (!mediaType || !desktopMediaUrl) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: 'Media type and desktop media URL are required',
|
||||
});
|
||||
}
|
||||
|
||||
const banner = await prisma.homepageBanner.create({
|
||||
data: {
|
||||
title,
|
||||
subtitle,
|
||||
mediaType,
|
||||
desktopMediaUrl,
|
||||
mobileMediaUrl,
|
||||
buttonText,
|
||||
buttonLink,
|
||||
openInNewTab,
|
||||
textAlignment,
|
||||
sortOrder,
|
||||
isActive,
|
||||
},
|
||||
});
|
||||
|
||||
res.status(201).json({
|
||||
success: true,
|
||||
data: banner,
|
||||
message: 'Homepage banner created successfully',
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: 'Failed to create homepage banner',
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const getHomepageBanners = async (req, res) => {
|
||||
try {
|
||||
const banners = await prisma.homepageBanner.findMany({
|
||||
orderBy: {
|
||||
sortOrder: 'asc',
|
||||
},
|
||||
});
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
data: banners,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: 'Failed to fetch homepage banners',
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const getActiveHomepageBanners = async (req, res) => {
|
||||
try {
|
||||
const banners = await prisma.homepageBanner.findMany({
|
||||
where: {
|
||||
isActive: true,
|
||||
},
|
||||
orderBy: {
|
||||
sortOrder: 'asc',
|
||||
},
|
||||
});
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
data: banners,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: 'Failed to fetch active homepage banners',
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const getHomepageBanner = async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
const banner = await prisma.homepageBanner.findUnique({
|
||||
where: {
|
||||
id: Number(id),
|
||||
},
|
||||
});
|
||||
|
||||
if (!banner) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
message: 'Homepage banner not found',
|
||||
});
|
||||
}
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
data: banner,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: 'Failed to fetch homepage banner',
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const updateHomepageBanner = async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
const {
|
||||
title,
|
||||
subtitle,
|
||||
mediaType,
|
||||
desktopMediaUrl,
|
||||
mobileMediaUrl,
|
||||
buttonText,
|
||||
buttonLink,
|
||||
openInNewTab,
|
||||
textAlignment,
|
||||
sortOrder,
|
||||
isActive,
|
||||
} = req.body;
|
||||
|
||||
const banner = await prisma.homepageBanner.update({
|
||||
where: {
|
||||
id: Number(id),
|
||||
},
|
||||
data: {
|
||||
title,
|
||||
subtitle,
|
||||
mediaType,
|
||||
desktopMediaUrl,
|
||||
mobileMediaUrl,
|
||||
buttonText,
|
||||
buttonLink,
|
||||
openInNewTab,
|
||||
textAlignment,
|
||||
sortOrder,
|
||||
isActive,
|
||||
},
|
||||
});
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
data: banner,
|
||||
message: 'Homepage banner updated successfully',
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: 'Failed to update homepage banner',
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const deleteHomepageBanner = async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
await prisma.homepageBanner.delete({
|
||||
where: {
|
||||
id: Number(id),
|
||||
},
|
||||
});
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
message: 'Homepage banner deleted successfully',
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: 'Failed to delete homepage banner',
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,27 @@
|
||||
import express from 'express';
|
||||
|
||||
import {
|
||||
createHomepageBanner,
|
||||
getHomepageBanners,
|
||||
getActiveHomepageBanners,
|
||||
getHomepageBanner,
|
||||
updateHomepageBanner,
|
||||
deleteHomepageBanner,
|
||||
} from '../controllers/homepageBanner.controller.js';
|
||||
|
||||
import jwtAuthMiddleware from '../middleware/auth.js';
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
router.get('/active', getActiveHomepageBanners);
|
||||
|
||||
router.post('/', jwtAuthMiddleware, createHomepageBanner);
|
||||
|
||||
router.get('/getAll', jwtAuthMiddleware, getHomepageBanners);
|
||||
router.get('/:id', jwtAuthMiddleware, getHomepageBanner);
|
||||
|
||||
router.put('/:id', jwtAuthMiddleware, updateHomepageBanner);
|
||||
|
||||
router.delete('/:id', jwtAuthMiddleware, deleteHomepageBanner);
|
||||
|
||||
export default router;
|
||||
Reference in New Issue
Block a user