feat(tickets): new model to save mail-tickets and message-tickets for service group

This commit is contained in:
OldHawk
2018-03-22 17:12:40 +08:00
parent 02c6464af6
commit c82df9b5da
4 changed files with 144 additions and 9 deletions

View File

@@ -10,13 +10,16 @@ var path = require('path'),
User = mongoose.model('User'),
Peer = mongoose.model('Peer'),
Complete = mongoose.model('Complete'),
MailTicket = mongoose.model('MailTicket'),
backup = require('mongodb-backup');
var mtDebug = require(path.resolve('./config/lib/debug'));
var commonEnvConfig = require(path.resolve('./config/env/comm-variable'));
var appConfig = config.meanTorrentConfig.app;
var backupConfig = config.meanTorrentConfig.backup;
var announceConfig = config.meanTorrentConfig.announce;
var inbox = require('inbox');
var simpleParser = require('mailparser').simpleParser;
const PEERSTATE_SEEDER = 'seeder';
const PEERSTATE_LEECHER = 'leecher';
@@ -64,7 +67,7 @@ module.exports = function (app) {
cronJobs.push(removeGhostPeers());
cronJobs.push(countUsersHnrWarning());
// cronJobs.push(listenServiceEmail());
cronJobs.push(listenServiceEmail());
return cronJobs;
};
@@ -213,8 +216,8 @@ function countUsersHnrWarning() {
function listenServiceEmail() {
var listenServiceEmailJob = new CronJob({
//cronTime: '00 00 1 * * *',
cronTime: '*/10 * * * * *',
//cronTime: '00 00 * * * *',
// cronTime: '*/10 * * * * *',
cronTime: '00 00 * * * *',
onTick: function () {
// console.log(chalk.green('listenServiceEmail: process!'));
// console.log(chalk.green(listenServiceEmailJob.running));
@@ -234,13 +237,13 @@ function listenServiceEmail() {
client.on('connect', function () {
console.log(chalk.green('CONNECT to ' + commonEnvConfig.variable.mailer.options.auth.user + ' successfully!'));
listenServiceEmailJob.listeningServiceEmail = true;
client.openMailbox('INBOX', function (error, info) {
client.openMailbox('INBOX', false, function (error, info) {
if (error) throw error;
client.listMessages(-20, function (err, messages) {
messages.forEach(function (message) {
if (message.flags.indexOf('\\Seen') < 0) {
addNewMessageToTicket(client, message);
addNewMessageToTicket(client, message, false);
}
});
});
@@ -270,13 +273,20 @@ function listenServiceEmail() {
});
listenServiceEmailJob.listeningServiceEmail = false;
listenServiceEmailJob.fireOnTick();
listenServiceEmailJob.start();
return listenServiceEmailJob;
function addNewMessageToTicket(client, message) {
console.log(message);
var messageStream = client.createMessageStream(message.UID);
messageStream.pipe(process.stdout, {end: false});
function addNewMessageToTicket(client, message, isNew = true) {
simpleParser(client.createMessageStream(message.UID), function (err, mail_object) {
client.addFlags(message.UID, ['\\Seen'], function (err, flags) {
console.log(chalk.blue('Check-out ' + (isNew ? 'new' : 'unseen') + ' email from ' + commonEnvConfig.variable.mailer.options.auth.user));
console.log('From: ', mail_object.from.text);
console.log('Subject: ', mail_object.subject);
// console.log('Text body:', mail_object.text);
console.log('Add flag: ', flags);
});
});
}
}

View File

@@ -0,0 +1,63 @@
'use strict';
/**
* Module dependencies
*/
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
/**
* Ticket Schema
*/
var MailTicketSchema = new Schema({
from: {
type: String,
default: '',
trim: true
},
to: {
type: String,
default: '',
trim: true
},
title: {
type: String,
default: '',
trim: true
},
content: {
type: String,
default: '',
trim: true
},
attach: [{
type: String,
default: '',
trim: true
}],
handler: {
type: Schema.Types.ObjectId,
ref: 'User'
},
_replies: [this],
status: {
type: Number,
default: 0 //0 new, 1 handling, 2 solved
},
createdAt: {
type: Date,
default: Date.now
},
handlerAt: {
type: Date
},
updatedAt: {
type: Date
}
}, {usePushEach: true});
MailTicketSchema.index({updatedAt: -1, createdAt: -1});
MailTicketSchema.index({status: -1, updatedAt: -1});
mongoose.model('MailTicket', MailTicketSchema);

View File

@@ -0,0 +1,61 @@
'use strict';
/**
* Module dependencies
*/
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
/**
* Ticket Schema
*/
var MessageTicketSchema = new Schema({
from: {
type: Schema.Types.ObjectId,
ref: 'User'
},
to: {
type: Schema.Types.ObjectId,
ref: 'User'
},
title: {
type: String,
default: '',
trim: true
},
content: {
type: String,
default: '',
trim: true
},
attach: [{
type: String,
default: '',
trim: true
}],
handler: {
type: Schema.Types.ObjectId,
ref: 'User'
},
_replies: [this],
status: {
type: Number,
default: 0 //0 new, 1 handling, 2 solved
},
createdAt: {
type: Date,
default: Date.now
},
handlerAt: {
type: Date
},
updatedAt: {
type: Date
}
}, {usePushEach: true});
MessageTicketSchema.index({updatedAt: -1, createdAt: -1});
MessageTicketSchema.index({status: -1, updatedAt: -1});
mongoose.model('MessageTicket', MessageTicketSchema);

View File

@@ -85,6 +85,7 @@
"jasmine-core": "~2.7.0",
"lodash": "~4.17.4",
"lusca": "~1.5.1",
"mailparser": "^2.2.0",
"method-override": "~2.3.8",
"mocha": "~3.4.2",
"moment": "^2.18.1",