From c82df9b5da0679b8517b314a57ce553eb524fbdc Mon Sep 17 00:00:00 2001 From: OldHawk Date: Thu, 22 Mar 2018 17:12:40 +0800 Subject: [PATCH] feat(tickets): new model to save mail-tickets and message-tickets for service group --- config/lib/cron-job.js | 28 ++++++--- .../server/models/mail-ticket.server.model.js | 63 +++++++++++++++++++ .../models/message-ticket.server.model.js | 61 ++++++++++++++++++ package.json | 1 + 4 files changed, 144 insertions(+), 9 deletions(-) create mode 100644 modules/tickets/server/models/mail-ticket.server.model.js create mode 100644 modules/tickets/server/models/message-ticket.server.model.js diff --git a/config/lib/cron-job.js b/config/lib/cron-job.js index db83e212..88e29753 100644 --- a/config/lib/cron-job.js +++ b/config/lib/cron-job.js @@ -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); + }); + }); } } diff --git a/modules/tickets/server/models/mail-ticket.server.model.js b/modules/tickets/server/models/mail-ticket.server.model.js new file mode 100644 index 00000000..f7304880 --- /dev/null +++ b/modules/tickets/server/models/mail-ticket.server.model.js @@ -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); diff --git a/modules/tickets/server/models/message-ticket.server.model.js b/modules/tickets/server/models/message-ticket.server.model.js new file mode 100644 index 00000000..fc5bc2c2 --- /dev/null +++ b/modules/tickets/server/models/message-ticket.server.model.js @@ -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); diff --git a/package.json b/package.json index d4b90e2d..42b44336 100644 --- a/package.json +++ b/package.json @@ -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",