Added cruising api endpoint support
This commit is contained in:
303
models/cruise.js
Normal file
303
models/cruise.js
Normal file
@@ -0,0 +1,303 @@
|
||||
const Geos = require('../modules/geocoder');
|
||||
const Images = require('../modules/images');
|
||||
const Logger = require('../modules/logger');
|
||||
const Mongoose = require('mongoose');
|
||||
|
||||
const CruiseSchema = new Mongoose.Schema({
|
||||
order: { type: Number, default: 0 },
|
||||
location: {
|
||||
address: {
|
||||
street1: String,
|
||||
street2: String,
|
||||
locality: {
|
||||
type: String,
|
||||
index: true
|
||||
},
|
||||
region: {
|
||||
type: String,
|
||||
index: true
|
||||
},
|
||||
postal: {
|
||||
type: String,
|
||||
index: true
|
||||
},
|
||||
country: {
|
||||
type: String,
|
||||
index: true
|
||||
}
|
||||
},
|
||||
loc: {
|
||||
type: {
|
||||
type: String,
|
||||
default: 'Point'
|
||||
},
|
||||
coordinates: [{
|
||||
type: Number,
|
||||
default: [0, 0]
|
||||
}]
|
||||
}
|
||||
},
|
||||
name: String,
|
||||
pic: {
|
||||
detail: {
|
||||
type: String,
|
||||
default: 'cruise/default_detail.png'
|
||||
},
|
||||
thumb: {
|
||||
type: String,
|
||||
default: 'cruise/default_thumbnail.png'
|
||||
}
|
||||
},
|
||||
text: String
|
||||
});
|
||||
|
||||
CruiseSchema.index({ 'location.loc': '2dsphere' });
|
||||
|
||||
CruiseSchema.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.saveCruiseDetailImage(pic.detail, (err, filename) => {
|
||||
if (err) {
|
||||
Logger.error('[CruiseSchema.pre(save)] There was an error processing the cruise image. [' + err + ']', { error: err });
|
||||
}
|
||||
|
||||
if (filename) {
|
||||
pic.detail = filename;
|
||||
cnt -= 1;
|
||||
if (cnt === 0) next();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (typeof pic.thumb === 'object') {
|
||||
Images.saveCruiseThumbnailImage(pic.thumb, (err, filename) => {
|
||||
if (err) {
|
||||
Logger.error('[CruiseSchema.pre(save)] There was an error processing the cruise image. [' + err + ']', { error: err });
|
||||
}
|
||||
|
||||
if (filename) {
|
||||
pic.thumb = filename;
|
||||
cnt -= 1;
|
||||
if (cnt === 0) next();
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
});
|
||||
|
||||
CruiseSchema.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.saveCruiseDetailImage(pic.detail, (err, filename) => {
|
||||
if (err) {
|
||||
Logger.error('[CruiseSchema.pre(save)] There was an error processing the cruise image. [' + err + ']', { error: err });
|
||||
}
|
||||
|
||||
if (filename) {
|
||||
pic.detail = filename;
|
||||
cnt -= 1;
|
||||
if (cnt === 0) next();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (typeof pic.thumb === 'object') {
|
||||
Images.saveCruiseThumbnailImage(pic.thumb, (err, filename) => {
|
||||
if (err) {
|
||||
Logger.error('[CruiseSchema.pre(save)] There was an error processing the cruise image. [' + err + ']', { error: err });
|
||||
}
|
||||
|
||||
if (filename) {
|
||||
pic.thumb = filename;
|
||||
cnt -= 1;
|
||||
if (cnt === 0) next();
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
});
|
||||
|
||||
const CruiseModel = Mongoose.model('cruises', CruiseSchema);
|
||||
|
||||
module.exports = {
|
||||
|
||||
all: (e) => {
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
CruiseModel
|
||||
.find({})
|
||||
.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);
|
||||
});
|
||||
},
|
||||
|
||||
create: (e, cruises) => {
|
||||
var count = cruises.length;
|
||||
var errors = [];
|
||||
var results = [];
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
for (let i = 0; i < cruises.length; i++) {
|
||||
var cruise = cruises[i];
|
||||
var cruiseInstance = new CruiseModel(cruise);
|
||||
|
||||
cruiseInstance.save((err, result) => {
|
||||
if (err) {
|
||||
count -= 1;
|
||||
errors.push({
|
||||
cruise: cruise,
|
||||
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) => {
|
||||
CruiseModel.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);
|
||||
});
|
||||
},
|
||||
|
||||
find: (e, find) => {
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
var query = CruiseModel
|
||||
.find(find.find)
|
||||
.skip(find.options.skip)
|
||||
.limit(find.options.limit)
|
||||
.sort(find.options.sort)
|
||||
.select(find.select || '')
|
||||
.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) => {
|
||||
CruiseModel.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);
|
||||
});
|
||||
},
|
||||
|
||||
update: (e, id, cruise) => {
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
CruiseModel.findOneAndUpdate(
|
||||
{ _id: id },
|
||||
{ $set: cruise },
|
||||
{ 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);
|
||||
});
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user