421 lines
8.8 KiB
JavaScript
421 lines
8.8 KiB
JavaScript
const Images = require('../modules/images');
|
|
const Logger = require('../modules/logger');
|
|
const Messages = require('../models/message');
|
|
const Mongoose = require('mongoose');
|
|
|
|
const ProfileSchema = new Mongoose.Schema({
|
|
"order" : { type: Number, default: 0 },
|
|
"details": {
|
|
"about": { type: String },
|
|
"age": { type: Number, index: true, defaulrt: 0 },
|
|
"body": { type: String },
|
|
"ethnicity": { type: String },
|
|
"gender": { type: String },
|
|
"height": { type: String },
|
|
"looking": { type: String },
|
|
"name": { type: String, index: true },
|
|
"pic": {
|
|
"detail": { type: String, default: "profile/default_detail.png" },
|
|
"thumb": { type: String, default: "profile/default_thumbnail.png" }
|
|
},
|
|
"position": { type: String },
|
|
"pronouns": { type: String },
|
|
"weight": { type: Number },
|
|
"status": { type: String },
|
|
"tested": { type: Date },
|
|
"tribe": { type: String }
|
|
},
|
|
"messages" : [ { type: Messages.schema } ]
|
|
});
|
|
|
|
ProfileSchema.pre('findOneAndUpdate', function (next) {
|
|
var cnt = 0
|
|
var pic;
|
|
|
|
if (this.details && this.details.pic) {
|
|
pic = this.details.pic;
|
|
cnt = cnt + (typeof pic.detail === 'object' ? 1 : 0) + (typeof pic.thumb === 'object' ? 1 : 0);
|
|
}
|
|
|
|
if (cnt > 0) {
|
|
if (typeof pic.detail === 'object') {
|
|
Images.saveProfileDetailImage(pic.detail, (err, filename) => {
|
|
if (err) {
|
|
Logger.error('[MessageSchema.pre(save)] There was an error processing the message image. [' + err + ']', { error: err });
|
|
}
|
|
|
|
if (filename) {
|
|
pic.detail = filename;
|
|
cnt -= 1;
|
|
if (cnt === 0) next();
|
|
}
|
|
});
|
|
}
|
|
|
|
if (typeof pic.thumb === 'object') {
|
|
Images.saveProfileThumbnailImage(pic.thumb, (err, filename) => {
|
|
if (err) {
|
|
Logger.error('[MessageSchema.pre(save)] There was an error processing the message image. [' + err + ']', { error: err });
|
|
}
|
|
|
|
if (filename) {
|
|
pic.thumb = filename;
|
|
cnt -= 1;
|
|
if (cnt === 0) next();
|
|
}
|
|
});
|
|
}
|
|
} else {
|
|
next();
|
|
}
|
|
});
|
|
|
|
ProfileSchema.pre('save', function (next) {
|
|
var cnt = 0;
|
|
var pic;
|
|
|
|
if (this.details && this.details.pic) {
|
|
pic = this.details.pic
|
|
cnt = cnt + (typeof pic.detail === 'object' ? 1 : 0) + (typeof pic.thumb === 'object' ? 1 : 0);
|
|
}
|
|
|
|
if (cnt > 0) {
|
|
if (typeof pic.detail === 'object') {
|
|
Images.saveProfileDetailImage(pic.detail, (err, filename) => {
|
|
if (err) {
|
|
Logger.error('[MessageSchema.pre(save)] There was an error processing the message image. [' + err + ']', { error: err });
|
|
}
|
|
|
|
if (filename) {
|
|
pic.detail = filename;
|
|
cnt -= 1;
|
|
if (cnt === 0) next();
|
|
}
|
|
});
|
|
}
|
|
|
|
if (typeof pic.thumb === 'object') {
|
|
Images.saveProfileThumbnailImage(pic.thumb, (err, filename) => {
|
|
if (err) {
|
|
Logger.error('[MessageSchema.pre(save)] There was an error processing the message image. [' + err + ']', { error: err });
|
|
}
|
|
|
|
if (filename) {
|
|
pic.thumb = filename;
|
|
cnt -= 1;
|
|
if (cnt === 0) next();
|
|
}
|
|
});
|
|
}
|
|
} else {
|
|
next();
|
|
}
|
|
});
|
|
|
|
const ProfileModel = Mongoose.model('profiles', ProfileSchema);
|
|
|
|
module.exports = {
|
|
|
|
all: (e) => {
|
|
const promise = new Promise((resolve, reject) => {
|
|
ProfileModel
|
|
.find({})
|
|
.sort({ order: 1 })
|
|
.populate({
|
|
path: 'messages',
|
|
select: 'order text image isUser',
|
|
options: { sort: { order: 1 } }
|
|
})
|
|
.exec((err, result) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
|
|
if (result) {
|
|
resolve(result);
|
|
}
|
|
});
|
|
});
|
|
|
|
promise.then((result) => {
|
|
e.emit('all', null, result);
|
|
})
|
|
.catch((err) => {
|
|
e.emit('all', err, null);
|
|
});
|
|
},
|
|
|
|
allMessages: (e, prodileId) => {
|
|
const promise = new Promise((resolve, reject) => {
|
|
ProfileModel.findById(prodileId, (err, result) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
|
|
if (result) {
|
|
resolve(result.messages || []);
|
|
}
|
|
});
|
|
});
|
|
|
|
promise.then((result) => {
|
|
e.emit('allMessages', null, result);
|
|
})
|
|
.catch((err) => {
|
|
e.emit('allMessages', err, null);
|
|
});
|
|
},
|
|
|
|
allMessageImages: (e, profileId) => {
|
|
const promise = new Promise((resolve, reject) => {
|
|
ProfileModel
|
|
.find({ _id: profileId, $or: [{ 'messages.image': { $exists: true } }, { 'messages.image': { $ne: null } }] })
|
|
.select('messages.image')
|
|
.exec((err, result) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
|
|
if (result) {
|
|
resolve(result);
|
|
}
|
|
});
|
|
});
|
|
|
|
promise.then((result) => {
|
|
e.emit('allMessageImages', null, result);
|
|
})
|
|
.catch((err) => {
|
|
e.emit('allMessageImages', err, null);
|
|
});
|
|
},
|
|
|
|
create: (e, profiles) => {
|
|
var count = profiles.length;
|
|
var errors = [];
|
|
var results = [];
|
|
const promise = new Promise((resolve, reject) => {
|
|
for (let i = 0; i < profiles.length; i++) {
|
|
var profile = profiles[i];
|
|
var profileInstance = new ProfileModel(profile);
|
|
|
|
profileInstance.save((err, result) => {
|
|
if (err) {
|
|
count -= 1;
|
|
errors.push({
|
|
profile: profile,
|
|
error: err
|
|
});
|
|
if (count === 0) {
|
|
reject({ results: results, errors: errors });
|
|
}
|
|
}
|
|
|
|
if (result) {
|
|
count -= 1;
|
|
results.push(result);
|
|
if (count === 0) {
|
|
resolve({ results: results, errors: errors });
|
|
}
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
promise.then((result) => {
|
|
e.emit('create', null, result);
|
|
})
|
|
.catch((err) => {
|
|
e.emit('create', err, null);
|
|
});
|
|
},
|
|
|
|
delete: (e, id) => {
|
|
const promise = new Promise((resolve, reject) => {
|
|
ProfileModel.remove({ _id: id }, (err, result) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
|
|
if (result) {
|
|
resolve(result);
|
|
}
|
|
});
|
|
});
|
|
|
|
promise.then((result) => {
|
|
e.emit('delete', null, result);
|
|
})
|
|
.catch((err) => {
|
|
e.emit('delete', err, null);
|
|
});
|
|
},
|
|
|
|
deleteMessage: (e, profileId, messageId) => {
|
|
const promise = new Promise((resolve, reject) => {
|
|
ProfileModel.findById(profileId, (err, profile) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
|
|
if (profile) {
|
|
let message = profile.messages.id(messageId);
|
|
|
|
if (message) {
|
|
message.remove();
|
|
profile.save((err, result) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
|
|
if (result) {
|
|
resolve(result);
|
|
}
|
|
});
|
|
} else {
|
|
reject('The specified message does not exist');
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
promise.then((result) => {
|
|
e.emit('deleteMessage', null, result);
|
|
})
|
|
.catch((err) => {
|
|
e.emit('deleteMessage', err, null);
|
|
});
|
|
},
|
|
|
|
find: (e, find) => {
|
|
const promise = new Promise((resolve, reject) => {
|
|
var query = ProfileModel
|
|
.find(find.find)
|
|
.skip(find.options.skip)
|
|
.limit(find.options.limit)
|
|
.sort(find.options.sort)
|
|
.select(find.select || '');
|
|
|
|
if (!find.select || (find.select.length && find.select.indexOf('messages'))) {
|
|
query.populate({
|
|
path: 'messages',
|
|
select: 'order text image isUser',
|
|
options: { sort: { order: 1 } }
|
|
});
|
|
}
|
|
|
|
query.exec((err, results) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
|
|
if (results) {
|
|
resolve(results);
|
|
}
|
|
});
|
|
});
|
|
|
|
promise.then((result) => {
|
|
e.emit('find', null, result);
|
|
})
|
|
.catch((err) => {
|
|
e.emit('find', err, null);
|
|
});
|
|
},
|
|
|
|
get: (e, id) => {
|
|
const promise = new Promise((resolve, reject) => {
|
|
ProfileModel.findById(id, (err, result) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
|
|
if (result) {
|
|
resolve(result);
|
|
}
|
|
});
|
|
});
|
|
|
|
promise.then((result) => {
|
|
e.emit('get', null, result);
|
|
})
|
|
.catch((err) => {
|
|
e.emit('get', err, null);
|
|
});
|
|
},
|
|
|
|
getMessage: (e, prodileId, messageId) => {
|
|
const promise = new Promise((resolve, reject) => {
|
|
ProfileModel.findById(prodileId, (err, result) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
|
|
if (result) {
|
|
let message = result.messages.id(messageId);
|
|
resolve(message ? message : {});
|
|
}
|
|
});
|
|
});
|
|
|
|
promise.then((result) => {
|
|
e.emit('getMessage', null, result);
|
|
})
|
|
.catch((err) => {
|
|
e.emit('getMessage', err, null);
|
|
});
|
|
},
|
|
|
|
update: (e, id, profile) => {
|
|
const promise = new Promise((resolve, reject) => {
|
|
ProfileModel.findOneAndUpdate(
|
|
{ _id: id },
|
|
{ $set: profile },
|
|
{ new: true },
|
|
(err, result) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
|
|
if (result) {
|
|
resolve(result);
|
|
}
|
|
});
|
|
});
|
|
|
|
promise.then((result) => {
|
|
e.emit('update', null, result);
|
|
})
|
|
.catch((err) => {
|
|
e.emit('update', err, null);
|
|
});
|
|
},
|
|
|
|
updateMessage: (e, profileId, messageId, data) => {
|
|
const promise = new Promise((resolve, reject) => {
|
|
ProfileModel.findOneAndUpdate(
|
|
{ _id: profileId, 'messages._id': messageId },
|
|
{ $set: { 'messages.$': data } },
|
|
{ new: true },
|
|
(err, result) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
|
|
if (result) {
|
|
resolve(result);
|
|
}
|
|
});
|
|
});
|
|
|
|
promise.then((result) => {
|
|
e.emit('updateMessage', null, result);
|
|
})
|
|
.catch((err) => {
|
|
e.emit('updateMessage', err, null);
|
|
});
|
|
}
|
|
};
|