Files
meanTorrent/modules/tickets/server/controllers/mailTickets.server.controller.js

250 lines
5.5 KiB
JavaScript

'use strict';
/**
* Module dependencies
*/
var path = require('path'),
config = require(path.resolve('./config/config')),
mongoose = require('mongoose'),
errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')),
User = mongoose.model('User'),
MailTicket = mongoose.model('MailTicket'),
MessageTicket = mongoose.model('MessageTicket'),
async = require('async');
/**
* read Messages
* @param req
* @param res
*/
exports.read = function (req, res) {
// convert mongoose document to JSON
var ticket = req.mailTicket ? req.mailTicket.toJSON() : {};
// Add a custom field to the Article, for determining if the current User is the "owner".
// NOTE: This field is NOT persisted to the database, since it doesn't exist in the Article model.
ticket.isCurrentUserOwner = !!(req.user && ticket.user && ticket.user._id.toString() === req.user._id.toString());
res.json(ticket);
};
/**
* list Messages
* @param req
* @param res
*/
exports.list = function (req, res) {
var skip = 0;
var limit = 0;
var condition = {};
var status = 'all';
if (req.query.skip !== undefined) {
skip = parseInt(req.query.skip, 10);
}
if (req.query.limit !== undefined) {
limit = parseInt(req.query.limit, 10);
}
if (req.query.status !== undefined) {
status = req.query.status;
}
if (status !== 'all') {
condition.status = status;
}
var countMessage = function (callback) {
MailTicket.count(condition, function (err, count) {
if (err) {
callback(err, null);
} else {
callback(null, count);
}
});
};
var findMessage = function (callback) {
MailTicket.find(condition)
.sort('-updatedAt -createdAt')
.populate('handler', 'displayName profileImageURL uploaded downloaded')
.skip(skip)
.limit(limit)
.exec(function (err, messages) {
if (err) {
callback(err, null);
} else {
callback(null, messages);
}
});
};
async.parallel([countMessage, findMessage], function (err, results) {
if (err) {
return res.status(422).send(err);
} else {
res.json({rows: results[1], total: results[0]});
}
});
};
/**
* delete Message
* @param req
* @param res
*/
exports.delete = function (req, res) {
if (req.user.isOper) {
if (req.params.messageId) {
var message = req.mailTicket;
message.remove(function (err) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(message);
}
});
} else {
if (req.query.ids) {
MailTicket.remove({
_id: {$in: req.query.ids}
}, function (err) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
} else {
return res.status(200).send({
message: 'delete successfully'
});
}
});
}
}
} else {
return res.status(403).json({
message: 'SERVER.USER_IS_NOT_AUTHORIZED'
});
}
};
/**
* Update
*/
exports.update = function (req, res) {
var message = req.mailTicket;
message.updatedAt = Date.now();
message.save(function (err) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(message);
}
});
};
/**
* createReply
* @param req
* @param res
*/
exports.createReply = function (req, res) {
var reply = new MailTicket(req.body);
var message = req.messageTicket;
message._replies.push(reply);
message.updatedAt = Date.now();
message.save(function (err) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(message);
}
});
};
/**
* openedCount
* @param req
* @param res
*/
exports.openedCount = function (req, res) {
MailTicket.count({status: 'open'}, function (err, count) {
if (err) {
return res.status(422).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json({opened: count});
}
});
};
/**
* openedAllCount
* @param req
* @param res
*/
exports.openedAllCount = function (req, res) {
var mailCount = function (callback) {
MailTicket.count({status: 'open'}, function (err, count) {
if (err) {
callback(err, null);
} else {
callback(null, count);
}
});
};
var messageCount = function (callback) {
MessageTicket.count({status: 'open'}, function (err, count) {
if (err) {
callback(err, null);
} else {
callback(null, count);
}
});
};
async.parallel([mailCount, messageCount], function (err, results) {
if (err) {
return res.status(422).send(err);
} else {
res.json({ticketsOpenedCount: results[1] + results[0]});
}
});
};
/**
* Invitation middleware
*/
exports.mailTicketById = function (req, res, next, id) {
if (!mongoose.Types.ObjectId.isValid(id)) {
return res.status(400).send({
message: 'SERVER.INVALID_OBJECTID'
});
}
MailTicket.findById(id)
.populate('handler', 'displayName profileImageURL uploaded downloaded')
.exec(function (err, mailTicket) {
if (err) {
return next(err);
} else if (!mailTicket) {
return res.status(404).send();
}
req.mailTicket = mailTicket;
next();
});
};