diff --git a/backend/.env b/backend/.env index 7653e6e..64c53a3 100644 --- a/backend/.env +++ b/backend/.env @@ -1,2 +1,2 @@ PORT=4000 -MONGO_URI=mongodb+srv://mario:test12345@mernapp.2susood.mongodb.net/merndb?retryWrites=true&w=majority \ No newline at end of file +MONGO_URI=mongodb+srv://Feelings:MN123456@mernapp.qv7xqpq.mongodb.net/?retryWrites=true&w=majority \ No newline at end of file diff --git a/backend/controllers/workoutController.js b/backend/controllers/workoutController.js index c1af009..9abd54b 100644 --- a/backend/controllers/workoutController.js +++ b/backend/controllers/workoutController.js @@ -3,7 +3,7 @@ const mongoose = require('mongoose') // get all workouts const getWorkouts = async (req, res) => { - const workouts = await Workout.find({}).sort({createdAt: -1}) + const workouts = await Workout.find({}).sort({ createdAt: -1 }) res.status(200).json(workouts) } @@ -13,13 +13,13 @@ const getWorkout = async (req, res) => { const { id } = req.params if (!mongoose.Types.ObjectId.isValid(id)) { - return res.status(404).json({error: 'No such workout'}) + return res.status(404).json({ error: 'No such workout' }) } const workout = await Workout.findById(id) if (!workout) { - return res.status(404).json({error: 'No such workout'}) + return res.status(404).json({ error: 'No such workout' }) } res.status(200).json(workout) @@ -27,7 +27,24 @@ const getWorkout = async (req, res) => { // create a new workout const createWorkout = async (req, res) => { - const {title, load, reps} = req.body + const { title, load, reps } = req.body + + let emptyFields = [] + + if (!title) { + emptyFields.push('title') + } + if (!load) { + emptyFields.push('load') + } + if (!reps) { + emptyFields.push('reps') + } + if (emptyFields.length > 0) { + return res + .status(400) + .json({ error: 'Please fill in missing fields', emptyFields }) + } // add to the database try { @@ -43,13 +60,13 @@ const deleteWorkout = async (req, res) => { const { id } = req.params if (!mongoose.Types.ObjectId.isValid(id)) { - return res.status(400).json({error: 'No such workout'}) + return res.status(400).json({ error: 'No such workout' }) } - const workout = await Workout.findOneAndDelete({_id: id}) + const workout = await Workout.findOneAndDelete({ _id: id }) - if(!workout) { - return res.status(400).json({error: 'No such workout'}) + if (!workout) { + return res.status(400).json({ error: 'No such workout' }) } res.status(200).json(workout) @@ -60,15 +77,18 @@ const updateWorkout = async (req, res) => { const { id } = req.params if (!mongoose.Types.ObjectId.isValid(id)) { - return res.status(400).json({error: 'No such workout'}) + return res.status(400).json({ error: 'No such workout' }) } - const workout = await Workout.findOneAndUpdate({_id: id}, { - ...req.body - }) + const workout = await Workout.findOneAndUpdate( + { _id: id }, + { + ...req.body, + }, + ) if (!workout) { - return res.status(400).json({error: 'No such workout'}) + return res.status(400).json({ error: 'No such workout' }) } res.status(200).json(workout) @@ -79,5 +99,5 @@ module.exports = { getWorkout, createWorkout, deleteWorkout, - updateWorkout -} \ No newline at end of file + updateWorkout, +} diff --git a/backend/package.json b/backend/package.json index 75eb2bb..c00e2bb 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,11 +1,11 @@ { "name": "backend", "version": "1.0.0", - "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "dev": "nodemon server.js" + "dev": "nodemon server.js", + "start": "node server.js" }, "keywords": [], "author": "", @@ -14,5 +14,6 @@ "dotenv": "^16.0.1", "express": "^4.18.1", "mongoose": "^6.3.5" - } + }, + "description": "" } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index e75661a..8148572 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -11,6 +11,7 @@ "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^13.3.0", "@testing-library/user-event": "^13.5.0", + "date-fns": "^2.29.1", "react": "^18.1.0", "react-dom": "^18.1.0", "react-router-dom": "^6.3.0", @@ -6036,6 +6037,18 @@ "node": ">=10" } }, + "node_modules/date-fns": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.1.tgz", + "integrity": "sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw==", + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -20654,6 +20667,11 @@ "whatwg-url": "^8.0.0" } }, + "date-fns": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.1.tgz", + "integrity": "sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw==" + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", diff --git a/frontend/package.json b/frontend/package.json index bda3474..8d5b4f0 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -7,6 +7,7 @@ "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^13.3.0", "@testing-library/user-event": "^13.5.0", + "date-fns": "^2.29.1", "react": "^18.1.0", "react-dom": "^18.1.0", "react-router-dom": "^6.3.0", diff --git a/frontend/public/index.html b/frontend/public/index.html index aa069f2..5851d01 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -24,6 +24,8 @@ work correctly both with client-side routing and a non-root public URL. Learn how to configure a non-root public URL by running `npm run build`. --> + +
Load (kg): {workout.load}
-Number of reps: {workout.reps}
-{workout.createdAt}
++ Load (kg): + {workout.load} +
++ Number of reps: + {workout.reps} +
++ {formatDistanceToNow(new Date(workout.createdAt), { addSuffix: true })} +
+ + delete +