Réorganisation des sources
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
var mongoose = require('mongoose');
|
||||
var uniqueValidator = require('mongoose-unique-validator');
|
||||
var slug = require('slug');
|
||||
|
||||
var JumpSchema = new mongoose.Schema({
|
||||
slug: { type: String, lowercase: true, unique: true },
|
||||
date: { type: Date, default: Date.now },
|
||||
numero: { type: Number, unique: true },
|
||||
lieu: String,
|
||||
oaci: String,
|
||||
aeronef: String,
|
||||
imat: String,
|
||||
hauteur: Number,
|
||||
deploiement: Number,
|
||||
voile: String,
|
||||
taille: Number,
|
||||
categorie: String,
|
||||
module: String,
|
||||
participants: Number,
|
||||
sautants: [String],
|
||||
programme: String,
|
||||
accessoires: String,
|
||||
zone: String,
|
||||
dossier: String,
|
||||
video: String,
|
||||
files: [{ type: mongoose.Schema.Types.ObjectId, ref: 'JumpFile' }],
|
||||
x2data: { type: mongoose.Schema.Types.ObjectId, ref: 'X2DataLog' },
|
||||
author: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
|
||||
}, {timestamps: true, toJSON: {virtuals: true}});
|
||||
|
||||
JumpSchema.plugin(uniqueValidator, { message: 'is already taken' });
|
||||
|
||||
JumpSchema.pre('validate', function (next) {
|
||||
if (!this.slug) {
|
||||
this.slugify();
|
||||
}
|
||||
next();
|
||||
});
|
||||
|
||||
JumpSchema.methods.slugify = function () {
|
||||
this.slug = slug(`${this.numero} ${this.lieu}`) + '-' + (Math.random() * Math.pow(36, 6) | 0).toString(36);
|
||||
};
|
||||
|
||||
JumpSchema.methods.addFile = function (id) {
|
||||
if (this.files.indexOf(id) === -1) {
|
||||
this.files.push(id);
|
||||
}
|
||||
return this.save();
|
||||
};
|
||||
|
||||
JumpSchema.methods.removeFile = function (id) {
|
||||
this.files.remove(id);
|
||||
return this.save();
|
||||
};
|
||||
|
||||
JumpSchema.methods.toJSONFor = function(user) {
|
||||
return {
|
||||
slug: this.slug,
|
||||
date: this.date,
|
||||
numero: this.numero,
|
||||
lieu: this.lieu,
|
||||
oaci: this.oaci,
|
||||
aeronef: this.aeronef,
|
||||
imat: this.imat,
|
||||
hauteur: this.hauteur,
|
||||
deploiement: this.deploiement,
|
||||
voile: this.voile,
|
||||
taille: this.taille,
|
||||
categorie: this.categorie,
|
||||
module: this.module,
|
||||
participants: this.participants,
|
||||
sautants: this.sautants,
|
||||
programme: this.programme,
|
||||
accessoires: this.accessoires,
|
||||
zone: this.zone,
|
||||
dossier: this.dossier,
|
||||
video: this.video,
|
||||
files: this.files.map(file => file ? file.toJSONForJump() : null),
|
||||
x2data: this.x2data ? this.x2data.toJSONFor() : null,
|
||||
createdAt: this.createdAt,
|
||||
updatedAt: this.updatedAt,
|
||||
author: this.author.toProfileJSONFor(user)
|
||||
};
|
||||
};
|
||||
|
||||
mongoose.model('Jump', JumpSchema);
|
||||
Reference in New Issue
Block a user