1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
/**
* Module dependencies
*/
var mongoose = require('mongoose')
, Schema = mongoose.Schema;
var pPostSchema = new Schema({
user: { type: Schema.ObjectId, ref: 'User' },
for: { type: Schema.ObjectId, ref: 'User' },
project: { type: Schema.ObjectId, ref: 'Project' },
what: { type: String, default: '', trim: true },
comment: { type: String, default: '', trim: true },
participants: [],
value: { type: Number, defailt: 0 },
file: { type: String, default: '', trim: true },
currency: { type: String, default: 'kr', trim: true },
created: { type: Date, default: Date.now },
updated: { type: Date, default: Date.now },
when: { type: Date, default: Date.now }
});
pPostSchema.statics = {
/**
* Find post by id
*
* @param {ObjectId} id
* @param {Function} callback
* @api private
*/
load: function(id, callback) {
this.findOne({ _id: id })
.populate({ path: 'user', select: '_id, name'})
.exec(callback);
},
/**
* Find all posts that belong to a project, by project id
*
* @param {ObjectId} project
* @param {Function} callback
* @api private
*/
loadProject: function(project, callback) {
this.find({ project: project })
.populate('user')
.sort({ 'when': -1, 'created': -1 })
.exec(callback);
},
/**
* Find last ten posts belonging projects a user is part of, by project ids
*
* @param {Array[ObjectId]} projects
* @param {Function} callback
* @api private
*/
loadByProjects: function(projects, callback) {
this.find({ project: { $in: projects } })
.populate({ path: 'user', select: 'name email status' })
.populate({ path: 'project', select: 'name shortURL' })
.limit(10)
.sort({ 'when': -1, 'created': -1 })
.exec(callback);
}
}
mongoose.model('pPost', pPostSchema);
|