From ae3f47f6c22857eafb29245056ad5e6f454a79fa Mon Sep 17 00:00:00 2001 From: krishnam Date: Fri, 26 Jan 2024 20:26:13 +0530 Subject: [PATCH] ADD: gallery route --- app.js | 2 + controllers/galleryController.js | 67 ++++++++++++++++++++++++++++++++ models/gallery.js | 21 ++++++++++ routes/galleryRoute.js | 18 +++++++++ 4 files changed, 108 insertions(+) create mode 100644 controllers/galleryController.js create mode 100644 models/gallery.js create mode 100644 routes/galleryRoute.js diff --git a/app.js b/app.js index d01e510..f7606bc 100644 --- a/app.js +++ b/app.js @@ -61,10 +61,12 @@ app.use("/api/admin", admin); const userRoute = require("./routes/userRoutes.js"); const abacusRoute = require("./routes/abacusRoute.js"); const enigmaRoute = require("./routes/enigmaRoute"); +const galleryRoute = require("./routes/galleryRoute.js") app.use("/api/admin/user", userRoute); app.use("/api/admin/abacus", abacusRoute); app.use("/api/admin/enigma", enigmaRoute); +app.use("/api/admin/gallery", galleryRoute); app.all("*", (req, res, next) => { res.status(404).json({ diff --git a/controllers/galleryController.js b/controllers/galleryController.js new file mode 100644 index 0000000..29f571f --- /dev/null +++ b/controllers/galleryController.js @@ -0,0 +1,67 @@ +const Gallery = require("../models/gallery"); +const cloudinary = require("cloudinary"); +const { catchAsync, AppError } = require("../utils/errorHandler"); + +exports.getImages = catchAsync(async (req, res, next) => { + const images = await Gallery.find(); + return res.status(201).json({ + status: "success", + gallery: images, + }); +}); + +exports.uploadImage = catchAsync(async (req, res, next) => { + const { title, image } = req.body; + if (!(title && image)) { + return res.status(400).json({ + status: "fail", + message: "please provide all required fields", + }); + } + + let myCloud = { + public_id: null, + url: null, + }; + + myCloud = await cloudinary.v2.uploader.upload(image, { + folder: "gallery", + api_key: process.env.CLOUDINARY_API_KEY, + api_secret: process.env.CLOUDINARY_API_SECRET, + cloud_name: process.env.CLOUDINARY_NAME, + }); + + const Image = await Gallery({ + title, + image: { + public_id: myCloud.public_id, + url: myCloud.url, + }, + }).save(); + + return res.status(200).json({ + status: "success", + message: "Image succesfully uploaded", + image: Image, + }); +}); + +exports.deleteImage = catchAsync(async (req, res, next) => { + const { image } = req.body; + if (!image) { + return res.status(400).json({ + status: "fail", + message: "please provide all required fields", + }); + } + const imageId = image?.public_id; + if (imageId) { + await cloudinary.v2.uploader.destroy(imageId); + } + await Gallery.findOneAndDelete({ 'image.url': image.url }); + + return res.status(200).json({ + status: "success", + message: "successfully deleted", + }); +}); diff --git a/models/gallery.js b/models/gallery.js new file mode 100644 index 0000000..2189fee --- /dev/null +++ b/models/gallery.js @@ -0,0 +1,21 @@ +const mongoose = require("mongoose"); + +const gallerySchema = new mongoose.Schema({ + title: { + type: String, + required: true, + unique: true, + }, + image: { + public_id: { + type: String, + }, + url: { + type: String, + }, + }, +}); + +const Gallery = mongoose.model("Gallery", gallerySchema); + +module.exports = Gallery; diff --git a/routes/galleryRoute.js b/routes/galleryRoute.js new file mode 100644 index 0000000..09d9df1 --- /dev/null +++ b/routes/galleryRoute.js @@ -0,0 +1,18 @@ +const express = require("express"); +const router = express.Router(); + +const { + getImages, + uploadImage, + deleteImage, +} = require("../controllers/galleryController"); +// const { isAdmin } = require("../controllers/admin"); + +// open routes +router.get("/", getImages); + +// protected routes +router.post("/", uploadImage); +router.delete("/", deleteImage); + +module.exports = router; \ No newline at end of file