consolidate all repos to one for archive

This commit is contained in:
2025-01-28 13:46:42 +01:00
commit a6610fbc7a
5350 changed files with 2705721 additions and 0 deletions

View File

@@ -0,0 +1,209 @@
var PhotoModel = require('../models/photoModel.js');
/**
* photoController.js
*
* @description :: Server-side logic for managing photos.
*/
module.exports = {
/**
* photoController.list()
*/
list: function (req, res) {
PhotoModel.find()
.populate('postedBy')
.sort({createdAt: -1})
.exec(function (err, photos) {
if (err) {
return res.status(500).json({
message: 'Error when getting photo.',
error: err
});
}
var data = [];
data.photos = photos;
//return res.render('photo/list', data);
return res.json(photos);
});
},
/**
* photoController.show()
*/
show: function (req, res) {
var id = req.params.id;
PhotoModel.findOne({_id: id}).populate('postedBy').exec(function (err, photo) {
if (err) {
return res.status(500).json({
message: 'Error when getting photo.',
error: err
});
}
if (!photo) {
return res.status(404).json({
message: 'No such photo'
});
}
return res.json(photo);
});
},
/**
* photoController.create()
*/
create: function (req, res) {
var photo = new PhotoModel({
name : req.body.name,
path : "/images/"+req.file.filename,
postedBy : req.session.userId,
reports : 0,
likes : 0,
comments : []
});
photo.save(function (err, photo) {
if (err) {
return res.status(500).json({
message: 'Error when creating photo',
error: err
});
}
return res.status(201).json(photo);
//return res.redirect('/photos');
});
},
/**
* photoController.update()
*/
update: function (req, res) {
var id = req.params.id;
PhotoModel.findOne({_id: id}, function (err, photo) {
if (err) {
return res.status(500).json({
message: 'Error when getting photo',
error: err
});
}
if (!photo) {
return res.status(404).json({
message: 'No such photo'
});
}
photo.name = req.body.name ? req.body.name : photo.name;
photo.path = req.body.path ? req.body.path : photo.path;
photo.postedBy = req.body.postedBy ? req.body.postedBy : photo.postedBy;
photo.views = req.body.views ? req.body.views : photo.views;
photo.likes = req.body.likes ? req.body.likes : photo.likes;
photo.save(function (err, photo) {
if (err) {
return res.status(500).json({
message: 'Error when updating photo.',
error: err
});
}
return res.json(photo);
});
});
},
/**
* photoController.remove()
*/
remove: function (req, res) {
var id = req.params.id;
PhotoModel.findByIdAndRemove(id, function (err, photo) {
if (err) {
return res.status(500).json({
message: 'Error when deleting the photo.',
error: err
});
}
return res.status(204).json();
});
},
publish: function(req, res){
return res.render('photo/publish');
},
increaseValue: async function (req, res) {
const id = req.params.id;
const type = req.params.type;
try {
if(type == "like"){
const photo = await PhotoModel.findByIdAndUpdate(
{ _id: id },
{ $inc: { likes: 1 } },
{ new: true }
);
}else if(type == "report"){
const photo = await PhotoModel.findByIdAndUpdate(
{ _id: id },
{ $inc: { reports: 1 } },
{ new: true }
);
if(photo.reports >= 5){
await PhotoModel.findByIdAndRemove(id);
}
}else{
return res.status(500).json({
message: 'Error when updating photo increment.',
});
}
if (!photo) {
return res.status(404).json({
message: 'No such photo'
});
}
return res.status(200).json(photo);
} catch (err) {
return res.status(500).json({
message: 'Error when updating photo.',
error: err
});
}
},
addComment: async function (req, res) {
const id = req.params.id;
const comment = req.body.comment;
try {
const photo = await PhotoModel.findByIdAndUpdate(
{ _id: id },
{ $push: { comments: comment } },
{ new: true }
);
if (!photo) {
return res.status(404).json({
message: 'No such photo'
});
}
return res.json(photo);
} catch (err) {
return res.status(500).json({
message: 'Error when updating photo.',
error: err
});
}
}
};

View File

@@ -0,0 +1,211 @@
var UserModel = require('../models/userModel.js');
var PhotoModel = require('../models/photoModel.js');
const { use } = require('../routes/userRoutes.js');
var mongoose = require('mongoose');
/**
* userController.js
*
* @description :: Server-side logic for managing users.
*/
module.exports = {
/**
* userController.list()
*/
list: function (req, res) {
UserModel.find(function (err, users) {
if (err) {
return res.status(500).json({
message: 'Error when getting user.',
error: err
});
}
return res.json(users);
});
},
/**
* userController.show()
*/
show: function (req, res) {
var id = req.params.id;
UserModel.findOne({_id: id}, function (err, user) {
if (err) {
return res.status(500).json({
message: 'Error when getting user.',
error: err
});
}
if (!user) {
return res.status(404).json({
message: 'No such user'
});
}
return res.json(user);
});
},
/**
* userController.create()
*/
create: function (req, res) {
var user = new UserModel({
username : req.body.username,
password : req.body.password,
email : req.body.email,
posts : 0,
totalLikes : 0
});
user.save(function (err, user) {
if (err) {
return res.status(500).json({
message: 'Error when creating user',
error: err
});
}
return res.status(201).json(user);
//return res.redirect('/users/login');
});
},
/**
* userController.update()
*/
update: function (req, res) {
var id = req.params.id;
UserModel.findOne({_id: id}, function (err, user) {
if (err) {
return res.status(500).json({
message: 'Error when getting user',
error: err
});
}
if (!user) {
return res.status(404).json({
message: 'No such user'
});
}
user.username = req.body.username ? req.body.username : user.username;
user.password = req.body.password ? req.body.password : user.password;
user.email = req.body.email ? req.body.email : user.email;
user.save(function (err, user) {
if (err) {
return res.status(500).json({
message: 'Error when updating user.',
error: err
});
}
return res.json(user);
});
});
},
/**
* userController.remove()
*/
remove: function (req, res) {
var id = req.params.id;
UserModel.findByIdAndRemove(id, function (err, user) {
if (err) {
return res.status(500).json({
message: 'Error when deleting the user.',
error: err
});
}
return res.status(204).json();
});
},
showRegister: function(req, res){
res.render('user/register');
},
showLogin: function(req, res){
res.render('user/login');
},
login: function(req, res, next){
UserModel.authenticate(req.body.username, req.body.password, function(err, user){
if(err || !user){
var err = new Error('Wrong username or paassword');
err.status = 402;
return next(err);
}
req.session.userId = user._id;
//res.redirect('/users/profile');
return res.json(user);
});
},
profile: async function(req, res,next){
const userId = req.session.userId;
UserModel.findById(req.session.userId)
.exec(function(error, user){
if(error){
return next(error);
} else{
if(user===null){
var err = new Error('Not authorized, go back!');
err.status = 400;
return next(err);
} else{
// Counting the number of posts based on the user id
PhotoModel.countDocuments({ postedBy: userId })
.then((count) => {
// Update the user's post count
user.posts = count;
return user.save();
}).catch((error) => {
console.error('Error counting likes:', error);
return next(error);
});
// const objectId = Types.objectId(userId);
var objectId = mongoose.Types.ObjectId(userId);
PhotoModel.aggregate([
{ $match: { postedBy: objectId } },
{ $group: { _id: null, totalLikes: { $sum: "$likes" } } }
]).then((result) => {
// Update the user's total likes
user.totalLikes = result[0].totalLikes;
return user.save();
}).catch((error) => {
console.error('Error counting likes:', error);
return next(error);
});
return res.json(user);
}
}
});
},
logout: function(req, res, next){
if(req.session){
req.session.destroy(function(err){
if(err){
return next(err);
} else{
//return res.redirect('/');
return res.status(201).json({});
}
});
}
}
};