Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ideaController.js 2.97 KiB
const Idea = require('../models/idea');
const mongoose = require('mongoose');
// Helper function for validating required fields
const validateFields = (fields, res) => {
for (const field of fields) {
if (!field.value) {
return res.status(400).json({ msg: `Please provide ${field.name}` });
}
}
};
// ✅ Submit a new idea
exports.submitIdea = async (req, res) => {
try {
const { name, title, description, domain, budget, projectStage, location } = req.body;
const email = req.user.email;
const userId = req.user.id;
const file = req.file ? req.file.filename : null;
// Validate input fields
const validationResponse = validateFields([
{ value: email, name: 'email' },
{ value: name, name: 'name' },
{ value: title, name: 'title' },
{ value: description, name: 'description' },
{ value: domain, name: 'domain' },
{ value: budget, name: 'budget' },
{ value: projectStage, name: 'projectStage' },
{ value: location, name: 'location' },
{ value: file, name: 'file' }
], res);
if (validationResponse) return validationResponse;
const idea = new Idea({
email,
name,
userId,
title,
description,
domain,
budget,
projectStage,
location,
file
});
await idea.save();
return res.status(201).json({
msg: 'Idea submitted successfully',
idea
});
} catch (error) {
console.error('Error submitting idea:', error.message);
return res.status(500).json({ msg: 'Server error' });
}
};
// ✅ Get all ideas (admin use or for listing)
exports.getIdeas = async (req, res) => {
try {
const filter = {};
if (req.query.email) {
// Security check - verify requesting user matches the email filter
if (req.user.email !== req.query.email) {
return res.status(403).json({ msg: 'Unauthorized access' });
}
filter.email = req.query.email;
}
const ideas = await Idea.find(filter).sort({ createdAt: -1 });
res.json(ideas);
} catch (error) {
console.error('Error getting ideas:', error.message);
return res.status(500).json({ msg: 'Server error' });
}
};
// ✅ Get posts by a specific user
exports.getUserPosts = async (req, res) => {
try {
const objectId = new mongoose.Types.ObjectId(req.params.userId);
const posts = await Idea.find({ userId: objectId }).sort({ createdAt: -1 });
res.json(posts);
} catch (err) {
console.error('Error fetching user posts:', err.message);
res.status(500).json({ msg: "Failed to fetch user's posts" });
}
};
// ✅ Get posts liked by a user
exports.getLikedPosts = async (req, res) => {
try {
const objectId = new mongoose.Types.ObjectId(req.params.userId);
const likedPosts = await Idea.find({ likedBy: objectId }).sort({ createdAt: -1 });
res.json(likedPosts);
} catch (err) {
console.error('Error fetching liked posts:', err.message);
res.status(500).json({ msg: 'Failed to fetch liked posts' });
}
};