diff --git a/src/controllers/customer.js b/src/controllers/customer.js index 775cfb42..80d4fb75 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({customer : 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 new file mode 100644 index 00000000..987e6806 --- /dev/null +++ b/src/controllers/movie.js @@ -0,0 +1,57 @@ +const { getAllMoviesDb, createdMovieDb, getMovieDb, updateMovieDb } = require('../domains/movie.js') + +const getAllMovies = async (req, res) => { + try { + const movies = await getAllMoviesDb() + res.status(200).json({movies : movies}) + } catch (e) { + res.status(500).json({error : 'something went Wrong!'}) + } +} + +const createdMovie = async (req, res) => { + const { title , runtimeMins } = req.body + try { + const newMovie = await createdMovieDb(title, runtimeMins) + res.status(201).json({movie : newMovie}) + } catch (error) { + 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!'}) + } +} + +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).json({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, + updateMovie +} \ No newline at end of file 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/customer.js b/src/domains/customer.js index c7f315fd..4a9b364c 100644 --- a/src/domains/customer.js +++ b/src/domains/customer.js @@ -21,6 +21,23 @@ 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 + }, + include : { + contact : true + } + }) + return updatedCustomer + } catch (error) { + throw new Error ('Failed to update customer at DB!') + } +} + module.exports = { - createCustomerDb + createCustomerDb, updateCustomerDb } diff --git a/src/domains/movie.js b/src/domains/movie.js new file mode 100644 index 00000000..307816f6 --- /dev/null +++ b/src/domains/movie.js @@ -0,0 +1,70 @@ +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.') + } +} + +const createdMovieDb = async (title, runtimeMins) => { + try { + const newMovie = await prisma.movie.create({ + data: { + title, + runtimeMins + }, + include : { + screenings : true + } + }) + return newMovie + } catch (error) { + throw new Error('Failed to create a new movie.') + } +} + +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.') + } +} + +const updateMovieDb = async (id, title, runtimeMins) => { + + try { + const updatedMovie = await prisma.movie.update({ + where: { id : id }, + data : { + title, + runtimeMins + }, + include : { + screenings : true + } + }) + return updatedMovie + } catch (error) { + throw new Error ('Failed to update movie at DB!') + } +} + +module.exports = { + getAllMoviesDb, + createdMovieDb, + getMovieDb, + updateMovieDb +} \ 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/customer.js b/src/routers/customer.js index f14a87fc..4db8faa3 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, updateCustomer } = require('../controllers/customer'); const router = express.Router(); @@ -9,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; diff --git a/src/routers/movie.js b/src/routers/movie.js new file mode 100644 index 00000000..618d2d60 --- /dev/null +++ b/src/routers/movie.js @@ -0,0 +1,10 @@ +const express = require('express') +const router = express.Router() + +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 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 93d47a16..4121cee9 100644 --- a/src/server.js +++ b/src/server.js @@ -17,5 +17,9 @@ app.use(express.urlencoded({ extended: true })); const customerRouter = require('./routers/customer'); app.use('/customers', customerRouter); +const movieRouter = require('./routers/movie.js') +app.use('/movies', movieRouter) +const screenRouter = require('./routers/screen.js') +app.use('/screens', screenRouter) module.exports = app