forked from freeCodeCamp/boilerplate-project-exercisetracker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
controllers.js
118 lines (93 loc) · 2.18 KB
/
controllers.js
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
const express = require('express')
const controllers = express.Router()
let UserModel = require('./database/userModel');
let ExerciseModel = require('./database/exerciseModel');
/* ------- USER CONTROLLERS -------- */
controllers.post('/', async (req, res) => {
try {
const user = new UserModel({ username: req.body.username })
await user.save()
res.json(user)
} catch (err) {
res.json(err)
}
})
controllers.get('/', async (req, res) => {
try {
const users = await UserModel.find({})
res.json(users)
} catch (err) {
res.json(err)
}
})
/* ------- EXERCISE CONTROLLERS -------- */
controllers.post('/:_id/exercises', async (req, res) => {
let { description, duration, date } = req.body
if(!date) {
date = Date.now()
}
date = new Date(date)
let dateStr = date.toDateString()
const newExc = { description, date, duration: parseInt(duration) }
try {
const user = await UserModel.findOne({_id: req.params._id})
newExc.username = user.username
let exc = new ExerciseModel(newExc)
exc = await exc.save()
let response = {
...newExc,
_id: user._id,
date: dateStr
}
res.json(response)
} catch (err) {
res.json(err)
}
})
controllers.get('/:_id/logs', async (req, res) => {
try {
let {from, to, limit} = req.query
if(from) {
from = new Date(from)
}
if(to) {
to = new Date(to)
}
const user = await UserModel.findOne({_id: req.params._id}).lean()
let excs;
if(from && !to){
excs = await ExerciseModel.find({username: user.username})
.gte("date", from)
.limit(limit)
.lean()
}
else if(!from && to){
excs = await ExerciseModel.find({username: user.username})
.lte("date", to)
.limit(limit)
.lean()
}
else if(from && to){
excs = await ExerciseModel.find({username: user.username})
.gte("date", from)
.lte("date", to)
.limit(limit)
.lean()
}
else {
excs = await ExerciseModel.find({username: user.username}).limit(limit).lean()
}
excs = excs.map(elm => {
delete elm._id;
delete elm.__v;
elm.date = elm.date.toDateString();
return elm
})
user.count = excs.length;
user.log = excs;
res.json(user)
} catch (err) {
res.json(err)
}
})
module.exports = controllers