Created
June 7, 2021 13:13
-
-
Save teasmade/c5477faad3c534fcc4de4cdfa128a5f0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const connection = require('./db-config'); | |
| connection.connect(function (err) { | |
| if (err) { | |
| console.error('error connecting: ' + err.stack); | |
| return; | |
| } | |
| console.log('connected as id ' + connection.threadId); | |
| }); | |
| const express = require('express'); | |
| const app = express(); | |
| app.use(express.json()); | |
| // const movies = require('./movies'); | |
| const port = 3000; | |
| app.get('/', (request, response) => { | |
| response.send('Welcome to my favourite movie list'); | |
| }); | |
| // SEND DETAIL OF ERRORS | |
| app.get('/api/movies', (req, res) => { | |
| let sql = 'SELECT * FROM movies'; | |
| const sqlValues = []; | |
| if (req.query.max_duration && req.query.color) { | |
| sql += ' WHERE duration <= ? AND color = ?'; | |
| sqlValues.push(req.query.max_duration); | |
| sqlValues.push(req.query.color); | |
| } else if (req.query.color) { | |
| sql += ' WHERE color = ?'; | |
| sqlValues.push(req.query.color); | |
| } else if (req.query.max_duration) { | |
| sql += ' WHERE duration <= ?'; | |
| sqlValues.push(req.query.max_duration); | |
| } | |
| connection.query(sql, sqlValues, (err, results) => { | |
| if (err) { | |
| res.status(500).send('Error retrieving data'); | |
| } else { | |
| res.status(200).json(results); | |
| } | |
| }); | |
| }); | |
| app.get('/api/movies/:id', (req, res) => { | |
| connection.query('SELECT * from movies WHERE id=?', [req.params.id], (err, results) => { | |
| if (err) { | |
| console.log(err); | |
| res.status(500).send('Error retrieving data'); | |
| } else if (results.length === 0) { | |
| res.status(404).send('user not found'); | |
| } else { | |
| res.status(200).json(results); | |
| } | |
| }); | |
| }); | |
| app.get('/api/search', (request, response) => { | |
| const time = request.query.maxDuration; | |
| connection.query('SELECT * from movies WHERE duration<=?', [time], (err, results) => { | |
| if (err) { | |
| console.log(err); | |
| response.status(500).send('Error retrieving data'); | |
| } else { | |
| response.status(200).json(results); | |
| } | |
| }); | |
| }); | |
| app.get('/api/users', (req, res) => { | |
| let sql = 'SELECT * FROM users'; | |
| const sqlValues = []; | |
| if (req.query.language) { | |
| sql += ' WHERE language = ?'; | |
| sqlValues.push(req.query.language); | |
| } | |
| connection.query(sql, sqlValues, (err, results) => { | |
| if (err) { | |
| res.status(500).send(`An error occurred: ${err.message}`); | |
| } else { | |
| res.json(results); | |
| } | |
| }); | |
| }); | |
| app.get('/api/users/:id', (req, res) => { | |
| connection.query('SELECT * from users WHERE id=?', [req.params.id], (err, results) => { | |
| if (err) { | |
| console.log(err); | |
| res.status(500).send('Error retrieving data'); | |
| } else if (results.length === 0) { | |
| res.status(404).send('user not found'); | |
| } else { | |
| res.status(200).json(results[0]); | |
| } | |
| }); | |
| }); | |
| app.post('/api/movies', (req, res) => { | |
| const { title, director, year, color, duration } = req.body; | |
| connection.query( | |
| 'INSERT INTO movies(title, director, year, color, duration) VALUES (?, ?, ?, ?, ?)', | |
| [title, director, year, color, duration], | |
| (err, result) => { | |
| if (err) { | |
| res.status(500).send('Error saving the movie'); | |
| } else { | |
| const id = result.insertId; | |
| const createdMovie = { id, title, director, year, color, duration }; | |
| res.status(201).send(createdMovie); | |
| } | |
| } | |
| ); | |
| }); | |
| // use result.inserId to get ID from DB write, send it back to client to confirm added data details | |
| app.post('/api/users', (req, res) => { | |
| const { firstname, lastname, email } = req.body; | |
| connection.query( | |
| 'INSERT INTO users(firstname, lastname, email) VALUES (?, ?, ?)', | |
| [firstname, lastname, email], | |
| (err, result) => { | |
| if (err) { | |
| res.status(500).send('Error saving the user'); | |
| } else { | |
| const id = result.insertId; | |
| const createdUser = { id, firstname, lastname, email }; | |
| res.status(201).json(createdUser); | |
| } | |
| } | |
| ); | |
| }); | |
| // This route will update a user in the DB BUT with no full response of data written | |
| // app.put('/api/users/:id', (req, res) => { | |
| // // We get the ID from the url path : | |
| // const userId = req.params.id; | |
| // // We get the new attribute values for the user from req.body | |
| // const userPropsToUpdate = req.body; | |
| // // We send a UPDATE query to the DB | |
| // connection.query('UPDATE users SET ? WHERE id = ?', [userPropsToUpdate, userId], (err) => { | |
| // // Once the DB operation is over, we can respond to the HTTP request | |
| // if (err) { | |
| // console.log(err); | |
| // res.status(500).send('Error updating a user'); | |
| // } else { | |
| // res.status(200).send('User updated successfully π'); | |
| // } | |
| // }); | |
| // }); | |
| // RESTful update format using promises; check whether ID to be updated exists, if so proceed with the update | |
| app.put('/api/users/:id', (req, res) => { | |
| const userId = req.params.id; | |
| const db = connection.promise(); | |
| let existingUser = null; | |
| db.query('SELECT * FROM users WHERE id = ?', [userId]) | |
| .then(([results]) => { | |
| existingUser = results[0]; | |
| if (!existingUser) return Promise.reject('RECORD_NOT_FOUND'); | |
| return db.query('UPDATE users SET ? WHERE id = ?', [req.body, userId]); | |
| }) | |
| .then(() => { | |
| res.status(200).json({ ...existingUser, ...req.body }); | |
| }) | |
| .catch((err) => { | |
| console.error(err); | |
| if (err === 'RECORD_NOT_FOUND') res.status(404).send(`User with id ${userId} not found.`); | |
| else res.status(500).send('Error updating a user'); | |
| }); | |
| }); | |
| // This route will update a movie in the DB - again simple method with no response | |
| // app.put('/api/movies/:id', (req, res) => { | |
| // const movieId = req.params.id; | |
| // const moviePropsToUpdate = req.body; | |
| // connection.query('UPDATE movies SET ? WHERE id = ?', [moviePropsToUpdate, movieId], (err) => { | |
| // if (err) { | |
| // console.log(err); | |
| // res.status(500).send('Error updating a movie'); | |
| // } else { | |
| // res.status(200).send('Movie updated successfully π'); | |
| // } | |
| // }); | |
| // }); | |
| app.put('/api/movies/:id', (req, res) => { | |
| const movieId = req.params.id; | |
| const db = connection.promise(); | |
| let existingMovie = null; | |
| db.query('SELECT * FROM movies WHERE id = ?', [movieId]) | |
| .then(([results]) => { | |
| existingMovie = results[0]; | |
| if (!existingMovie) return Promise.reject('RECORD_NOT_FOUND'); | |
| return db.query('UPDATE movies SET ? WHERE id = ?', [req.body, movieId]); | |
| }) | |
| .then(() => { | |
| res.status(200).json({ ...existingMovie, ...req.body }); | |
| }) | |
| .catch((err) => { | |
| console.error(err); | |
| if (err === 'RECORD_NOT_FOUND') res.status(404).send(`Movie with id ${movieId} not found.`); | |
| else res.status(500).send('Error updating a movie'); | |
| }); | |
| }); | |
| // The ID is passed as a route parameter | |
| app.delete('/api/users/:id', (req, res) => { | |
| const userId = req.params.id; | |
| connection.query('DELETE FROM users WHERE id = ?', [userId], (err) => { | |
| if (err) { | |
| console.log(err); | |
| res.status(500).send('π± Error deleting an user'); | |
| } else { | |
| res.status(200).send('π User deleted!'); | |
| } | |
| }); | |
| }); | |
| // The ID is passed as a route parameter | |
| app.delete('/api/movies/:id', (req, res) => { | |
| const movieId = req.params.id; | |
| connection.query('DELETE FROM movies WHERE id = ?', [movieId], (err) => { | |
| if (err) { | |
| console.log(err); | |
| res.status(500).send('π± Error deleting an movie'); | |
| } else { | |
| res.status(200).send('π Movie deleted!'); | |
| } | |
| }); | |
| }); | |
| app.listen(port, () => { | |
| console.log(`Server is running on ${port}`); | |
| }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment