From 95fb0f450877e987f53158a9c3ddcdb469e734dc Mon Sep 17 00:00:00 2001 From: Farshad Date: Mon, 1 Jul 2024 14:20:14 +0200 Subject: [PATCH 1/7] getMoive /endpoint Done --- src/controllers/movie.js | 15 +++++++++++++++ src/domains/movie.js | 18 ++++++++++++++++++ src/routers/customer.js | 4 +--- src/routers/movie.js | 9 +++++++++ src/server.js | 2 ++ 5 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 src/controllers/movie.js create mode 100644 src/domains/movie.js create mode 100644 src/routers/movie.js diff --git a/src/controllers/movie.js b/src/controllers/movie.js new file mode 100644 index 00000000..7dac0025 --- /dev/null +++ b/src/controllers/movie.js @@ -0,0 +1,15 @@ +const { getAllMoviesDb } = require('../domains/movie.js') + + +const getAllMovies = async (req, res) => { + try { + const movies = await getAllMoviesDb() + res.status(200).json(movies) + } catch (e) { + res.status(500).json({error : 'something went Wrong!'}) + } +} + +module.exports = { + getAllMovies +} \ No newline at end of file diff --git a/src/domains/movie.js b/src/domains/movie.js new file mode 100644 index 00000000..bd7ffe7a --- /dev/null +++ b/src/domains/movie.js @@ -0,0 +1,18 @@ +const prisma = require('../utils/prisma') + +const getAllMoviesDb = async () => { + try { + const movies = await prisma.movie.findMany({ + include: { + screenings:true + } + }) + return movies + } catch (error) { + throw new Error('Failed to fetch movies from database.') + } +} + +module.exports = { + getAllMoviesDb +} \ No newline at end of file diff --git a/src/routers/customer.js b/src/routers/customer.js index f14a87fc..b6690a28 100644 --- a/src/routers/customer.js +++ b/src/routers/customer.js @@ -1,7 +1,5 @@ const express = require("express"); -const { - createCustomer -} = require('../controllers/customer'); +const { createCustomer } = require('../controllers/customer'); const router = express.Router(); diff --git a/src/routers/movie.js b/src/routers/movie.js new file mode 100644 index 00000000..99824172 --- /dev/null +++ b/src/routers/movie.js @@ -0,0 +1,9 @@ +const express = require('express') + +const router = express.Router() + +const { getAllMovies } = require('../controllers/movie.js') + +router.get('/', getAllMovies) + +module.exports = router \ No newline at end of file diff --git a/src/server.js b/src/server.js index 93d47a16..0a839902 100644 --- a/src/server.js +++ b/src/server.js @@ -17,5 +17,7 @@ app.use(express.urlencoded({ extended: true })); const customerRouter = require('./routers/customer'); app.use('/customers', customerRouter); +const movieRouter = require('./routers/movie.js') +app.use('/movie', movieRouter) module.exports = app From a00fc5e6a1cd0724fd237d459e986515e04400e8 Mon Sep 17 00:00:00 2001 From: Farshad Date: Mon, 1 Jul 2024 14:44:17 +0200 Subject: [PATCH 2/7] create post /movies endpoint Done --- src/controllers/movie.js | 16 ++++++++++++++-- src/domains/movie.js | 17 ++++++++++++++++- src/routers/movie.js | 3 ++- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/controllers/movie.js b/src/controllers/movie.js index 7dac0025..cc726b9e 100644 --- a/src/controllers/movie.js +++ b/src/controllers/movie.js @@ -1,4 +1,4 @@ -const { getAllMoviesDb } = require('../domains/movie.js') +const { getAllMoviesDb, createdMovieDb } = require('../domains/movie.js') const getAllMovies = async (req, res) => { @@ -10,6 +10,18 @@ const getAllMovies = async (req, res) => { } } +const createdMovie = async (req, res) => { + const { title , runtimeMins } = req.body + try { + const newMovie = await createdMovieDb(title, runtimeMins) + res.status(201).json({newMove : newMovie}) + } catch (error) { + es.status(500).json({error : 'coulnt create new Movie at controller!'}) + } +} + + module.exports = { - getAllMovies + getAllMovies, + createdMovie } \ No newline at end of file diff --git a/src/domains/movie.js b/src/domains/movie.js index bd7ffe7a..92a434aa 100644 --- a/src/domains/movie.js +++ b/src/domains/movie.js @@ -13,6 +13,21 @@ const getAllMoviesDb = async () => { } } +const createdMovieDb = async (title, runtimeMins) => { + try { + const newMovie = await prisma.movie.create({ + data: { + title, + runtimeMins + } + }) + return newMovie + } catch (error) { + throw new Error('Failed to create a new movie.') + } +} + module.exports = { - getAllMoviesDb + getAllMoviesDb, + createdMovieDb } \ No newline at end of file diff --git a/src/routers/movie.js b/src/routers/movie.js index 99824172..415c621d 100644 --- a/src/routers/movie.js +++ b/src/routers/movie.js @@ -2,8 +2,9 @@ const express = require('express') const router = express.Router() -const { getAllMovies } = require('../controllers/movie.js') +const { getAllMovies, createdMovie } = require('../controllers/movie.js') router.get('/', getAllMovies) +router.post('/', createdMovie) module.exports = router \ No newline at end of file From c7a109a15e748e071406f0b813c6cf9b6797f24a Mon Sep 17 00:00:00 2001 From: Farshad Date: Mon, 1 Jul 2024 16:25:55 +0200 Subject: [PATCH 3/7] getMovie Get /mvoies endpoint Done --- src/controllers/movie.js | 18 +++++++++++++++--- src/domains/movie.js | 16 +++++++++++++++- src/routers/movie.js | 4 ++-- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/controllers/movie.js b/src/controllers/movie.js index cc726b9e..457833d2 100644 --- a/src/controllers/movie.js +++ b/src/controllers/movie.js @@ -1,4 +1,5 @@ -const { getAllMoviesDb, createdMovieDb } = require('../domains/movie.js') +const { getAllMoviesDb, createdMovieDb, getMovieDb } = require('../domains/movie.js') +const { movie } = require('../utils/prisma.js') const getAllMovies = async (req, res) => { @@ -16,12 +17,23 @@ const createdMovie = async (req, res) => { const newMovie = await createdMovieDb(title, runtimeMins) res.status(201).json({newMove : newMovie}) } catch (error) { - es.status(500).json({error : 'coulnt create new Movie at controller!'}) + res.status(500).json({error : 'coulnt create new Movie at controller!'}) + } +} + +const getMovieById = async (req, res) => { + const id = Number(req.params.id) + try { + const movie = await getMovieDb(id) + res.status(200).json({movie : movie}) + } catch (error) { + res.status(500).json({error: 'could not found the movie!'}) } } module.exports = { getAllMovies, - createdMovie + createdMovie, + getMovieById } \ No newline at end of file diff --git a/src/domains/movie.js b/src/domains/movie.js index 92a434aa..33e4cba1 100644 --- a/src/domains/movie.js +++ b/src/domains/movie.js @@ -27,7 +27,21 @@ const createdMovieDb = async (title, runtimeMins) => { } } +const getMovieDb = async (id) => { + try { + const movieFound = await prisma.movie.findFirst({ + include : { + screenings : true + } + }) + return movieFound + } catch (error) { + throw new Error ('Failed to fetch movie from database.') + } +} + module.exports = { getAllMoviesDb, - createdMovieDb + createdMovieDb, + getMovieDb } \ No newline at end of file diff --git a/src/routers/movie.js b/src/routers/movie.js index 415c621d..6be89f9b 100644 --- a/src/routers/movie.js +++ b/src/routers/movie.js @@ -2,9 +2,9 @@ const express = require('express') const router = express.Router() -const { getAllMovies, createdMovie } = require('../controllers/movie.js') +const { getAllMovies, createdMovie, getMovieById } = require('../controllers/movie.js') router.get('/', getAllMovies) router.post('/', createdMovie) - +router.get('/:id', getMovieById) module.exports = router \ No newline at end of file From 8aee5ebf3b37b237192856ddd32c4c44b6a07555 Mon Sep 17 00:00:00 2001 From: Farshad Date: Mon, 1 Jul 2024 17:14:59 +0200 Subject: [PATCH 4/7] update PUT / movies endpoint Done --- src/controllers/movie.js | 24 ++++++++++++++++++++++-- src/domains/movie.js | 19 ++++++++++++++++++- src/routers/movie.js | 3 ++- 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/controllers/movie.js b/src/controllers/movie.js index 457833d2..fe5d88eb 100644 --- a/src/controllers/movie.js +++ b/src/controllers/movie.js @@ -1,4 +1,4 @@ -const { getAllMoviesDb, createdMovieDb, getMovieDb } = require('../domains/movie.js') +const { getAllMoviesDb, createdMovieDb, getMovieDb, updateMovieDb } = require('../domains/movie.js') const { movie } = require('../utils/prisma.js') @@ -31,9 +31,29 @@ const getMovieById = async (req, res) => { } } +const updateMovie = async (req, res) => { + const id = Number(req.params.id) + const { title , runtimeMins } = req.body + + if (!id || !title || !runtimeMins) { + return res.status(400).json({error: 'Missing fields in request body!'}) + } + + try { + const updatedMovie = await updateMovieDb(id, title, runtimeMins) + if(!updatedMovie) { + res.status(404).jspn({error : 'Movie not found!'}) + } + res.status(201).json({ movie : updatedMovie}) + } catch (error) { + res.status(500).json({error : 'Could not update the movie!'}) + } +} + module.exports = { getAllMovies, createdMovie, - getMovieById + getMovieById, + updateMovie } \ No newline at end of file diff --git a/src/domains/movie.js b/src/domains/movie.js index 33e4cba1..51c8bfc9 100644 --- a/src/domains/movie.js +++ b/src/domains/movie.js @@ -40,8 +40,25 @@ const getMovieDb = async (id) => { } } +const updateMovieDb = async (id, title, runtimeMins) => { + + try { + const updatedMovie = await prisma.movie.update({ + where: { id : id }, + data : { + title, + runtimeMins + } + }) + return updatedMovie + } catch (error) { + throw new Error ('Failed to update movie at DB!') + } +} + module.exports = { getAllMoviesDb, createdMovieDb, - getMovieDb + getMovieDb, + updateMovieDb } \ No newline at end of file diff --git a/src/routers/movie.js b/src/routers/movie.js index 6be89f9b..12f963cd 100644 --- a/src/routers/movie.js +++ b/src/routers/movie.js @@ -2,9 +2,10 @@ const express = require('express') const router = express.Router() -const { getAllMovies, createdMovie, getMovieById } = require('../controllers/movie.js') +const { getAllMovies, createdMovie, getMovieById, updateMovie } = require('../controllers/movie.js') router.get('/', getAllMovies) router.post('/', createdMovie) router.get('/:id', getMovieById) +router.put('/:id', updateMovie) module.exports = router \ No newline at end of file From b98b7f476f2aaf809c178088a6a2e9046d127edc Mon Sep 17 00:00:00 2001 From: Farshad Date: Mon, 1 Jul 2024 17:52:10 +0200 Subject: [PATCH 5/7] update PUT / customer endpoint Done --- src/controllers/customer.js | 21 +++++++++++++++++++-- src/controllers/movie.js | 2 +- src/domains/customer.js | 16 +++++++++++++++- src/routers/customer.js | 3 ++- 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/controllers/customer.js b/src/controllers/customer.js index 775cfb42..c7f63885 100644 --- a/src/controllers/customer.js +++ b/src/controllers/customer.js @@ -1,5 +1,5 @@ const { PrismaClientKnownRequestError } = require("@prisma/client") -const { createCustomerDb } = require('../domains/customer.js') +const { createCustomerDb, updateCustomerDb } = require('../domains/customer.js') const createCustomer = async (req, res) => { const { @@ -43,6 +43,23 @@ const createCustomer = async (req, res) => { } } +const updateCustomer = async (req, res) => { + const id = Number(req.params.id) + const { name } = req.body + + if (!id || !name) { + return res.status(400).json({error : 'Fields are not correct!'}) + } + try { + const updatedCustomer = await updateCustomerDb(id, name) + if(!updatedCustomer) { + return res.status(404).json('Customer didnt Find!') + } + res.status(201).json({costumer : updatedCustomer}) + } catch (error) { + res.status(500).json({error : 'something Went Wrong!'}) + } +} module.exports = { - createCustomer + createCustomer, updateCustomer } diff --git a/src/controllers/movie.js b/src/controllers/movie.js index fe5d88eb..3a8be4c5 100644 --- a/src/controllers/movie.js +++ b/src/controllers/movie.js @@ -42,7 +42,7 @@ const updateMovie = async (req, res) => { try { const updatedMovie = await updateMovieDb(id, title, runtimeMins) if(!updatedMovie) { - res.status(404).jspn({error : 'Movie not found!'}) + res.status(404).json({error : 'Movie not found!'}) } res.status(201).json({ movie : updatedMovie}) } catch (error) { diff --git a/src/domains/customer.js b/src/domains/customer.js index c7f315fd..760f9e21 100644 --- a/src/domains/customer.js +++ b/src/domains/customer.js @@ -21,6 +21,20 @@ const createCustomerDb = async (name, phone, email) => await prisma.customer.cre } }) +const updateCustomerDb = async (id, name) => { + try { + const updatedCustomer = await prisma.customer.update({ + where : {id : id}, + data : { + name + } + }) + return updatedCustomer + } catch (error) { + throw new Error ('Failed to update customer at DB!') + } +} + module.exports = { - createCustomerDb + createCustomerDb, updateCustomerDb } diff --git a/src/routers/customer.js b/src/routers/customer.js index b6690a28..4db8faa3 100644 --- a/src/routers/customer.js +++ b/src/routers/customer.js @@ -1,5 +1,5 @@ const express = require("express"); -const { createCustomer } = require('../controllers/customer'); +const { createCustomer, updateCustomer } = require('../controllers/customer'); const router = express.Router(); @@ -7,5 +7,6 @@ const router = express.Router(); // The below /register route extends that, so the end result will be a URL // that looks like http://localhost:4040/customer/register router.post("/register", createCustomer); +router.put('/:id', updateCustomer) module.exports = router; From 5a07641ad0f3b6196670891b122f7418e3b1f3b3 Mon Sep 17 00:00:00 2001 From: Farshad Date: Mon, 1 Jul 2024 18:13:02 +0200 Subject: [PATCH 6/7] create POST / screens endpoint Done --- src/controllers/movie.js | 2 -- src/controllers/screen.js | 14 ++++++++++++++ src/domains/screen.js | 16 ++++++++++++++++ src/routers/screen.js | 8 ++++++++ src/server.js | 2 ++ 5 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 src/controllers/screen.js create mode 100644 src/domains/screen.js create mode 100644 src/routers/screen.js diff --git a/src/controllers/movie.js b/src/controllers/movie.js index 3a8be4c5..452b79ee 100644 --- a/src/controllers/movie.js +++ b/src/controllers/movie.js @@ -1,6 +1,4 @@ const { getAllMoviesDb, createdMovieDb, getMovieDb, updateMovieDb } = require('../domains/movie.js') -const { movie } = require('../utils/prisma.js') - const getAllMovies = async (req, res) => { try { diff --git a/src/controllers/screen.js b/src/controllers/screen.js new file mode 100644 index 00000000..968d99a7 --- /dev/null +++ b/src/controllers/screen.js @@ -0,0 +1,14 @@ +const { createScreenDb } = require('../domains/screen.js') + +const createScreen = async (req, res) => { + const {number} = req.body + + try { + const createdScreen = await createScreenDb(number) + res.status(201).json({screen : createdScreen}) + } catch (error) { + res.status(500).json({error : 'Something Went Wrong!'}) + } +} + +module.exports = {createScreen} \ No newline at end of file diff --git a/src/domains/screen.js b/src/domains/screen.js new file mode 100644 index 00000000..0510d0e2 --- /dev/null +++ b/src/domains/screen.js @@ -0,0 +1,16 @@ +const prisma = require('../utils/prisma') + +const createScreenDb = async (number) => { + try { + const screen = await prisma.screen.create({ + data : { + number + } + }) + return screen + } catch (error) { + throw new Error ({error : 'Something went wrong at db'}) + } +} + +module.exports = {createScreenDb} \ No newline at end of file diff --git a/src/routers/screen.js b/src/routers/screen.js new file mode 100644 index 00000000..48154a19 --- /dev/null +++ b/src/routers/screen.js @@ -0,0 +1,8 @@ +const express = require('express') +const router = express.Router() + +const { createScreen } = require('../controllers/screen.js') + +router.post('/', createScreen) + +module.exports = router \ No newline at end of file diff --git a/src/server.js b/src/server.js index 0a839902..dd13d3b9 100644 --- a/src/server.js +++ b/src/server.js @@ -20,4 +20,6 @@ app.use('/customers', customerRouter); const movieRouter = require('./routers/movie.js') app.use('/movie', movieRouter) +const screenRouter = require('./routers/screen.js') +app.use('/screens', screenRouter) module.exports = app From 6f995cb636d713256da9877013b3325976b2d290 Mon Sep 17 00:00:00 2001 From: Farshad Date: Tue, 2 Jul 2024 08:51:15 +0200 Subject: [PATCH 7/7] All core tests Done --- src/controllers/customer.js | 2 +- src/controllers/movie.js | 4 ++-- src/domains/customer.js | 3 +++ src/domains/movie.js | 6 ++++++ src/routers/movie.js | 1 - src/server.js | 2 +- 6 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/controllers/customer.js b/src/controllers/customer.js index c7f63885..80d4fb75 100644 --- a/src/controllers/customer.js +++ b/src/controllers/customer.js @@ -55,7 +55,7 @@ const updateCustomer = async (req, res) => { if(!updatedCustomer) { return res.status(404).json('Customer didnt Find!') } - res.status(201).json({costumer : updatedCustomer}) + res.status(201).json({customer : updatedCustomer}) } catch (error) { res.status(500).json({error : 'something Went Wrong!'}) } diff --git a/src/controllers/movie.js b/src/controllers/movie.js index 452b79ee..987e6806 100644 --- a/src/controllers/movie.js +++ b/src/controllers/movie.js @@ -3,7 +3,7 @@ const { getAllMoviesDb, createdMovieDb, getMovieDb, updateMovieDb } = require('. const getAllMovies = async (req, res) => { try { const movies = await getAllMoviesDb() - res.status(200).json(movies) + res.status(200).json({movies : movies}) } catch (e) { res.status(500).json({error : 'something went Wrong!'}) } @@ -13,7 +13,7 @@ const createdMovie = async (req, res) => { const { title , runtimeMins } = req.body try { const newMovie = await createdMovieDb(title, runtimeMins) - res.status(201).json({newMove : newMovie}) + res.status(201).json({movie : newMovie}) } catch (error) { res.status(500).json({error : 'coulnt create new Movie at controller!'}) } diff --git a/src/domains/customer.js b/src/domains/customer.js index 760f9e21..4a9b364c 100644 --- a/src/domains/customer.js +++ b/src/domains/customer.js @@ -27,6 +27,9 @@ const updateCustomerDb = async (id, name) => { where : {id : id}, data : { name + }, + include : { + contact : true } }) return updatedCustomer diff --git a/src/domains/movie.js b/src/domains/movie.js index 51c8bfc9..307816f6 100644 --- a/src/domains/movie.js +++ b/src/domains/movie.js @@ -19,6 +19,9 @@ const createdMovieDb = async (title, runtimeMins) => { data: { title, runtimeMins + }, + include : { + screenings : true } }) return newMovie @@ -48,6 +51,9 @@ const updateMovieDb = async (id, title, runtimeMins) => { data : { title, runtimeMins + }, + include : { + screenings : true } }) return updatedMovie diff --git a/src/routers/movie.js b/src/routers/movie.js index 12f963cd..618d2d60 100644 --- a/src/routers/movie.js +++ b/src/routers/movie.js @@ -1,5 +1,4 @@ const express = require('express') - const router = express.Router() const { getAllMovies, createdMovie, getMovieById, updateMovie } = require('../controllers/movie.js') diff --git a/src/server.js b/src/server.js index dd13d3b9..4121cee9 100644 --- a/src/server.js +++ b/src/server.js @@ -18,7 +18,7 @@ const customerRouter = require('./routers/customer'); app.use('/customers', customerRouter); const movieRouter = require('./routers/movie.js') -app.use('/movie', movieRouter) +app.use('/movies', movieRouter) const screenRouter = require('./routers/screen.js') app.use('/screens', screenRouter)