diff --git a/backend/Controllers/collection.controller.js b/backend/Controllers/collection.controller.js index 6f9bcfd8e..ebaa1f3ce 100644 --- a/backend/Controllers/collection.controller.js +++ b/backend/Controllers/collection.controller.js @@ -118,6 +118,11 @@ export const deleteCollection = async(req,res)=>{ try{ const userID =req.user; const {collection_name} = req.body; + + if (!collection_name) { + return res.status(400).json({ error: "Collection name is required" }); + } + const existingUser = await User.findById(userID); if(!existingUser) return res.status(404).json("User not found"); @@ -133,3 +138,51 @@ export const deleteCollection = async(req,res)=>{ } } +//sorting by date and likes +export const sortProject = async(req,res)=>{ + try { + const userID = req.user; + + if (!userID) return res.status(401).json({ message: "User not authenticated" }); + + const { sortBy } = req.query; //likes,newest,oldest + + //for likes sorting + const savedProjects = await Collection.find({ userID }); + const projectIds = savedProjects.map(p => p.project_id); + + let objectIds = []; + let stringIds = []; + + savedProjects.forEach(p => { + if (mongoose.Types.ObjectId.isValid(p.project_id)) objectIds.push(p.project_id); + else stringIds.push(p.project_id); + }); + + let query = Project.find({ + $or: [ + { _id: { $in: objectIds } }, + { project_id: { $in: stringIds } } + ] + }); + + + //sorting + if (sortBy === "likes") { + query = query.sort({ "activity.total_likes": -1 }); + } else if (sortBy === "newest") { + query = query.sort({ createdAt: -1 }); + } else if (sortBy === "oldest") { + query = query.sort({ createdAt: 1 }); + } + + const projects = await query.lean(); + + return res.status(200).json(projects); + } catch (err) { + console.error(err); + return res.status(400).json(err); + } +} + + diff --git a/backend/Routes/api/collections.routes.js b/backend/Routes/api/collections.routes.js index 8b48fc28d..4882a5fa8 100644 --- a/backend/Routes/api/collections.routes.js +++ b/backend/Routes/api/collections.routes.js @@ -1,9 +1,12 @@ import express from 'express'; -import { createNewCollection, deleteCollection, deleteProject, saveProject} from '../../Controllers/collection.controller.js'; +import { createNewCollection, deleteCollection, deleteProject, saveProject, sortProject} from '../../Controllers/collection.controller.js'; import { authenticateUser } from '../../Middlewares/auth.middleware.js'; const collectionRoutes = express.Router(); collectionRoutes.post("/create-collection", authenticateUser, createNewCollection); collectionRoutes.post("/:id", authenticateUser, saveProject); +collectionRoutes.get("/sorted-project", authenticateUser, sortProject); +collectionRoutes.delete("/saved-projects", authenticateUser, deleteProject); +collectionRoutes.delete("/", authenticateUser, deleteCollection); collectionRoutes.delete("/saved-projects", authenticateUser, deleteProject); collectionRoutes.delete("/", authenticateUser, deleteCollection); diff --git a/backend/package.json b/backend/package.json index 9d1f2e127..46361f9a0 100644 --- a/backend/package.json +++ b/backend/package.json @@ -43,6 +43,4 @@ }, "description": "" - } - }