113 lines
2.9 KiB
JavaScript
113 lines
2.9 KiB
JavaScript
"use strict";
|
|
|
|
// modules
|
|
const express = require('express');
|
|
const logger = require('debug')('cc:awardings');
|
|
|
|
// HTTP status codes by name
|
|
const codes = require('./http-codes');
|
|
|
|
const routerHandling = require('../middleware/router-handling');
|
|
|
|
// Mongoose Model using mongoDB
|
|
const UserModel = require('../models/user');
|
|
const AwardingModel = require('../models/awarding');
|
|
const PromotionModel = require('../models/promotion');
|
|
|
|
// result set for proposer(appUser) population
|
|
const resultSet = {
|
|
'__v': 0,
|
|
'updatedAt': 0,
|
|
'timestamp': 0,
|
|
'password': 0,
|
|
'permission': 0,
|
|
'secret': 0,
|
|
'activated': 0
|
|
};
|
|
|
|
const request = express.Router();
|
|
|
|
|
|
// routes **********************
|
|
request.route('/award')
|
|
|
|
.post((req, res, next) => {
|
|
const award = new AwardingModel(req.body);
|
|
award.confirmed = false;
|
|
award.proposer = req.user._id;
|
|
// timestamp and default are set automatically by Mongoose Schema Validation
|
|
award.save((err) => {
|
|
if (err) {
|
|
err.status = codes.wrongrequest;
|
|
err.message += ' in fields: ' + Object.getOwnPropertyNames(err.errors);
|
|
return next(err);
|
|
}
|
|
res.status(codes.created);
|
|
res.locals.items = award;
|
|
next();
|
|
});
|
|
})
|
|
|
|
.all(
|
|
routerHandling.httpMethodNotAllowed
|
|
);
|
|
|
|
request.route('/promotion')
|
|
|
|
.get((req, res, next) => {
|
|
const squadFilter = req.query.squadId;
|
|
let userIds = [];
|
|
UserModel.find({squadId: squadFilter}, (err, items) => {
|
|
if (err) {
|
|
err.status = codes.servererror;
|
|
return next(err);
|
|
}
|
|
for (let item of items) {
|
|
userIds.push(item._id);
|
|
}
|
|
PromotionModel.find({userId: {"$in": userIds}}, {}, {sort: {timestamp: 'desc'}}).populate('userId').populate('proposer', resultSet).exec((err, items) => {
|
|
if (err) {
|
|
err.status = codes.servererror;
|
|
return next(err);
|
|
}
|
|
|
|
if (items && items.length > 0) {
|
|
res.locals.items = items;
|
|
} else {
|
|
res.locals.items = [];
|
|
}
|
|
res.locals.processed = true;
|
|
next();
|
|
})
|
|
});
|
|
|
|
})
|
|
|
|
.post((req, res, next) => {
|
|
const promotion = new PromotionModel(req.body);
|
|
promotion.confirmed = 0;
|
|
promotion.proposer = req.user._id;
|
|
// timestamp and default are set automatically by Mongoose Schema Validation
|
|
promotion.save((err) => {
|
|
if (err) {
|
|
err.status = codes.wrongrequest;
|
|
err.message += ' in fields: ' + Object.getOwnPropertyNames(err.errors);
|
|
return next(err);
|
|
}
|
|
res.status(codes.created);
|
|
res.locals.items = promotion;
|
|
next();
|
|
});
|
|
})
|
|
|
|
.all(
|
|
routerHandling.httpMethodNotAllowed
|
|
);
|
|
|
|
// this middleware function can be used, if you like or remove it
|
|
// it looks for object(s) in res.locals.items and if they exist, they are send to the client as json
|
|
request.use(routerHandling.emptyResponse);
|
|
|
|
|
|
module.exports = request;
|