From c36391321cf33e04aff690064ca849a6c8b4782f Mon Sep 17 00:00:00 2001 From: ruihildt Date: Thu, 1 Aug 2019 20:43:43 +0200 Subject: [PATCH] Add dailyAverage when providing complete session --- README.md | 2 +- api/server.js | 2 + data/sleep-tracker.db3 | Bin 36864 -> 36864 bytes services/dailyAverages/dailyAveragesModel.js | 10 +++++ services/dailyAverages/dailyAveragesRouter.js | 18 +++++++++ services/sessions/sessionsModel.js | 35 ++++++++++++++++-- services/sessions/sessionsRouter.js | 5 ++- 7 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 services/dailyAverages/dailyAveragesModel.js create mode 100644 services/dailyAverages/dailyAveragesRouter.js diff --git a/README.md b/README.md index 578dfe1..d76598e 100644 --- a/README.md +++ b/README.md @@ -60,4 +60,4 @@ Sleep Tracker is intended for anyone interested in improving their sleep and hea - `PUT /api/users/sessions/:id` - update a session by id - `DELETE /api/users/sessions/:id` - delete a session by id -- `GET /api/users/:id/dailyaverages` - fetch a list of last 30 daily averages by user id \ No newline at end of file +- `GET /api/users/:id/averages` - fetch a list of last 30 daily averages by user id \ No newline at end of file diff --git a/api/server.js b/api/server.js index f8c1440..c65f1c9 100644 --- a/api/server.js +++ b/api/server.js @@ -5,6 +5,7 @@ const cors = require('cors'); const authRouter = require('../services/auth/authRouter'); const usersRouter = require('../services/users/usersRouter'); const sessionsRouter = require('../services/sessions/sessionsRouter'); +const dailyAveragesRouter = require('../services/dailyAverages/dailyAveragesRouter'); const server = express(); @@ -15,5 +16,6 @@ server.use(cors()); server.use('/api/auth', authRouter); server.use('/api/users', usersRouter); server.use('/api/users', sessionsRouter); +server.use('/api/users', dailyAveragesRouter); module.exports = server; diff --git a/data/sleep-tracker.db3 b/data/sleep-tracker.db3 index ab097d8a32cc15896bcc6684ebf26971657a3f38..ad22d6f9600e54a71bc1f6da6eab10e5c26de422 100644 GIT binary patch delta 616 zcmZY5OG^S#6u@!sjHAxXoqK$n?_60>i4oPJh0!NyFQk!}5d{qdZB*z3^qAcA02hI@ z3~AF+sNCqLFA#28M9ZMZCOy||F`GXJeq7GIw^|pfb>TQnk|&WBlDy4b$C(5T3%tTJ zwBa5aO_#F<36~@$$wt1keXzV=*vl6SI;B=IO7w!Rmv(pbShJm4%4A|n$^soYha$`Y zVO@5?HrYJ0YMmi}QP$WlNZjCOl0lbHBu9c3po zQWl4R!Xat`nM1?`4h~@x*g1rTQ2AeC;}SF-kvRBGVCCR5fylvY0)c~P1mk~CBwXAh G8Nx5B4X{@L delta 140 zcmZozz|^pSX@WE(+e8^>Mz)O!OXPW2_;)ezKj**9e}aG4W%SNszv2mk=3nk6Ry diff --git a/services/dailyAverages/dailyAveragesModel.js b/services/dailyAverages/dailyAveragesModel.js new file mode 100644 index 0000000..9059dd7 --- /dev/null +++ b/services/dailyAverages/dailyAveragesModel.js @@ -0,0 +1,10 @@ +const db = require('../../data/dbConfig'); + +module.exports = { + getDailyAverageBy +} + +function getDailyAverageBy(id) { +return db('dailyAverages') + .where({}); +} \ No newline at end of file diff --git a/services/dailyAverages/dailyAveragesRouter.js b/services/dailyAverages/dailyAveragesRouter.js new file mode 100644 index 0000000..1574647 --- /dev/null +++ b/services/dailyAverages/dailyAveragesRouter.js @@ -0,0 +1,18 @@ +require("dotenv").config(); +const router = require('express').Router(); + +const Averages = require('./dailyAveragesModel'); + +router.get('/:id/averages', (req, res) => { + + Averages.findUserBy(req.params.id) + .first() + .then(response => { + res.status(200).json(response); + }) + .catch(error => { + res.status(500).json(error); + }); +}); + +module.exports = router; diff --git a/services/sessions/sessionsModel.js b/services/sessions/sessionsModel.js index b32322a..eb272fd 100644 --- a/services/sessions/sessionsModel.js +++ b/services/sessions/sessionsModel.js @@ -5,12 +5,15 @@ module.exports = { findUserSessions, updateSession, removeSession -}; +} async function addSession(session) { const [id] = await db('sessions') .insert(session); - return findSessionById(id); + + const newSession = await findSessionById(id) + computeSession(newSession); + return newSession; } function findUserSessions(user_id) { @@ -29,11 +32,37 @@ async function updateSession(id, changes) { await db('sessions') .where({ id }) .update(changes, '*'); - return findSessionById(id); + const updatedSession = await findSessionById(id); + computeSession(updatedSession); + return updatedSession; } async function removeSession(id) { await db('sessions') .where({ id }) .del(); +} + +async function computeSession(session) { + if ( session.bed_tiredness && session.day_mood && session.wake_mood) { + // Calculate the sleep duration + let date1 = new Date(session.bed_time); + let date2 = new Date(session.wake_time); + let diffTime = Math.abs(date1.getTime() - date2.getTime()); + diffTime = diffTime/(1000*60*60); + let sleep_duration = Math.round( diffTime * 100) / 100; + + // Calculate the average mood + let average_mood = (session.bed_tiredness + session.wake_mood + session.day_mood) / 3; + let new_average_mood = Math.round( average_mood * 100) / 100; + + await db('dailyAverages') + .insert({ + session_id: session.id, + user_id: session.user_id, + sleep_duration: sleep_duration, + average_mood: new_average_mood, + }) + .catch(err => console.log(err)); + } } \ No newline at end of file diff --git a/services/sessions/sessionsRouter.js b/services/sessions/sessionsRouter.js index 73e9687..fd118fb 100644 --- a/services/sessions/sessionsRouter.js +++ b/services/sessions/sessionsRouter.js @@ -8,7 +8,10 @@ router.post('/sessions', authenticate, (req, res) => { .then(response => { res.status(200).json(response); }) - .catch(err => res.send(err)); + .catch(err => { + console.log(err); + res.send(err) + }); }); router.get('/:id/sessions', authenticate, (req, res) => {