-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.js
More file actions
72 lines (58 loc) · 1.82 KB
/
models.js
File metadata and controls
72 lines (58 loc) · 1.82 KB
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
var mongoose = require('mongoose'),
models = {};
mongoose.connect('mongodb://localhost/time_tracking');
models.ProjectWork = mongoose.model('ProjectWork', new mongoose.Schema({
username: String,
name: String,
start: Date,
end: Date
}));
/**
@param username - Find projects belonging to this user.
@param filters - Additional filters to apply to the query
{ start, end }
@param callback
*/
models.ProjectWork.getProjectsForUser = function (username, filters, callback) {
var query = this.find().where('username', username).desc('end');
if(filters) {
var timeSpan = {};
if(filters.start) timeSpan['$gte'] = filters.start;
if(filters.end) timeSpan['$lte'] = filters.end;
query.or([{start: timeSpan}, {end: timeSpan}]);
}
query.run(function (err, projects) {
if(err) throw err;
callback(projects);
});
};
var updateAndSaveProject = function (project, data, callback) {
project.name = data.name;
project.start = new Date(data.start);
project.end = new Date(data.end);
project.save(function (err) {
if(err) throw err;
callback(project);
});
};
models.ProjectWork.modifyProject = function (projectId, data, callback) {
models.ProjectWork.findById(projectId, function (err, project) {
if(err) throw err;
updateAndSaveProject(project, data, callback);
});
};
models.ProjectWork.createNewProject = function (data, callback) {
var newProject = new models.ProjectWork();
newProject.username = data.username;
updateAndSaveProject(newProject, data, callback);
};
models.User = mongoose.model('User', new mongoose.Schema({
username: { type: String, unique: true },
_currentProject: { type: mongoose.Schema.ObjectId, ref: 'ProjectWork'}
}));
models.User.getUser = function (username, callback) {
this.findOne({username: username})
.populate('_currentProject')
.run(callback);
};
module.exports = models;