From 5b1ea36eefec69c01534f05d8190848053510e08 Mon Sep 17 00:00:00 2001 From: Akintayo Durotoye Date: Mon, 23 Sep 2024 09:17:30 +0100 Subject: [PATCH 1/2] updated --- .env.example | 6 ---- src/routers/customer.js | 19 +++++++++++ src/routers/movies.js | 76 +++++++++++++++++++++++++++++++++++++++++ src/routers/screens.js | 19 +++++++++++ src/server.js | 6 ++++ 5 files changed, 120 insertions(+), 6 deletions(-) delete mode 100644 .env.example create mode 100644 src/routers/movies.js create mode 100644 src/routers/screens.js diff --git a/.env.example b/.env.example deleted file mode 100644 index 60f3a816..00000000 --- a/.env.example +++ /dev/null @@ -1,6 +0,0 @@ -DATABASE_URL="YOUR_DB_URL" - -# We need the following URL environment variable for test purposes: -# - TEST_DATABASE_URL must be a **completely separate** database from any other used in this file - -TEST_DATABASE_URL="YOUR_TEST_DB_URL" diff --git a/src/routers/customer.js b/src/routers/customer.js index f14a87fc..da5f6e74 100644 --- a/src/routers/customer.js +++ b/src/routers/customer.js @@ -8,6 +8,25 @@ const router = express.Router(); // In index.js, we told express that the /customer route should use this router file // 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); +// Put Request + +router.put("/:id", async (req, res) => { + const customer = await prisma.customer.update({ + where: { + id: Number(req.params.id), + }, + data: { + name: req.body.name, + }, + include: { + contact: true, + }, + }); + + res.status(201).json({ customer }); +}); + module.exports = router; diff --git a/src/routers/movies.js b/src/routers/movies.js new file mode 100644 index 00000000..97378129 --- /dev/null +++ b/src/routers/movies.js @@ -0,0 +1,76 @@ +const express = require("express"); +const prisma = require("../utils/prisma.js"); +const { response } = require("../server.js"); + +const router = express.Router(); + +// GET REQUESTS + +router.get("/", async (req, res) => { + // GET ALL THE MOVIES AND THEIR SCREENINGS + + const response = await prisma.movie.findMany({ + include: { screenings: true }, + }); // GET ALL MOVIES + + res.json({ movies: response }); +}); + +router.get("/:id", async (req, res) => { + try { + // TRY TO RUN THE ASYNC AWAIT FUNCTION + const [movie] = await prisma.movie.findMany({ + // GET MOVIE WITH GIVEN ID + where: { + id: Number(req.params.id), + }, + include: { screenings: true }, + }); + + res.json({ movie }); + } catch (error) { + // IF THERE ARE NO MOVIES THE AWAIT WILL THROW AN ERROR. THIS WILL CATCH IT + res.status(404).json({ error: "MOVIE NOT FOUND" }); + } +}); + +// POST REQUESTS + +router.post("/", async (req, res) => { + const movie = await prisma.movie.create({ + // CREATES A NEW MOVIE WITH THE GIVEN TITLE AND RUNTIME IN THE REQUEST BODY + data: { + title: req.body.title, + runtimeMins: req.body.runtimeMins, + }, + include: { screenings: true }, + }); + + res.status(201).json({ movie: movie }); +}); + +// PUT REQUESTS + +router.put("/:id", async (req, res) => { + try { + // TRY TO RUN THE ASYNC AWAIT FUNCTION + const movie = await prisma.movie.update({ + // UPDATE MOVIE WITH GIVEN ID + where: { + id: Number(req.params.id), + }, + data: { + title: req.body.title, + runtimeMins: req.body.runtimeMins, + }, + include: { screenings: true }, + }); + + res.status(201).json({ movie }); + } catch (error) { + // IF THERE ARE NO MOVIES THE AWAIT WILL THROW AN ERROR. THIS WILL CATCH IT + res.status(404).json({ error: "MOVIE NOT FOUND" }); + } +}); + +module.exports = router; \ No newline at end of file diff --git a/src/routers/screens.js b/src/routers/screens.js new file mode 100644 index 00000000..43b730b7 --- /dev/null +++ b/src/routers/screens.js @@ -0,0 +1,19 @@ +const express = require("express"); +const prisma = require("../utils/prisma.js"); +const { response } = require("../server.js"); + +const router = express.Router(); + +// THE SOLE POST REQUEST + +router.post("/", async (req, res) => { + const screen = await prisma.screen.create({ + data: { + number: Number(req.body.number), + }, + }); + + res.status(201).json({ screen }); +}); + +module.exports = router; \ No newline at end of file diff --git a/src/server.js b/src/server.js index 93d47a16..35d75063 100644 --- a/src/server.js +++ b/src/server.js @@ -15,7 +15,13 @@ app.use(express.urlencoded({ extended: true })); // Tell express to use your routers here const customerRouter = require('./routers/customer'); +const moviesRouter = require("./routers/movies"); +const screensRouter = require("./routers/screens"); +const prisma = require("./utils/prisma"); + app.use('/customers', customerRouter); +app.use('/movies', moviesRouter); +app.use('/screens', screensRouter); module.exports = app From 93128a74c6dfee143ab331e9ae46fa2ee0aaa8fc Mon Sep 17 00:00:00 2001 From: Akintayo Durotoye Date: Wed, 23 Oct 2024 12:33:06 +0100 Subject: [PATCH 2/2] core completed --- .../20240923143258_movies/migration.sql | 1 + .../20240923143430_screens/migration.sql | 1 + src/routers/customer.js | 56 +++++++++++++------ src/routers/movies.js | 3 +- src/server.js | 2 +- test/setupTests.js | 2 +- 6 files changed, 45 insertions(+), 20 deletions(-) create mode 100644 prisma/migrations/20240923143258_movies/migration.sql create mode 100644 prisma/migrations/20240923143430_screens/migration.sql diff --git a/prisma/migrations/20240923143258_movies/migration.sql b/prisma/migrations/20240923143258_movies/migration.sql new file mode 100644 index 00000000..af5102c8 --- /dev/null +++ b/prisma/migrations/20240923143258_movies/migration.sql @@ -0,0 +1 @@ +-- This is an empty migration. \ No newline at end of file diff --git a/prisma/migrations/20240923143430_screens/migration.sql b/prisma/migrations/20240923143430_screens/migration.sql new file mode 100644 index 00000000..af5102c8 --- /dev/null +++ b/prisma/migrations/20240923143430_screens/migration.sql @@ -0,0 +1 @@ +-- This is an empty migration. \ No newline at end of file diff --git a/src/routers/customer.js b/src/routers/customer.js index da5f6e74..68e4a6b2 100644 --- a/src/routers/customer.js +++ b/src/routers/customer.js @@ -1,8 +1,6 @@ const express = require("express"); -const { - createCustomer -} = require('../controllers/customer'); - +const { createCustomer} = require('../controllers/customer'); +const prisma = require("../utils/prisma.js"); const router = express.Router(); // In index.js, we told express that the /customer route should use this router file @@ -14,19 +12,43 @@ router.post("/register", createCustomer); // Put Request router.put("/:id", async (req, res) => { - const customer = await prisma.customer.update({ - where: { - id: Number(req.params.id), - }, - data: { - name: req.body.name, - }, - include: { - contact: true, - }, - }); - - res.status(201).json({ customer }); + try { + const { id } = req.params; + const { name } = req.body; + + // Basic input validation + if (!name || typeof name !== "string") { + return res.status(400).json({ error: "Invalid input: name is required" }); + } + + // Check if the customer exists before trying to update + const existingCustomer = await prisma.customer.findUnique({ + where: { id: Number(id) }, + }); + + if (!existingCustomer) { + return res.status(404).json({ error: "Customer not found" }); + } + + // Perform the update + const customer = await prisma.customer.update({ + where: { + id: Number(id), + }, + data: { + name, + }, + include: { + contact: true, + }, + }); + + res.status(201).json({ customer }); + } catch (error) { + console.error("Error updating customer:", error); + res.status(500).json({ error: "An error occurred while updating the customer" }); + } }); + module.exports = router; diff --git a/src/routers/movies.js b/src/routers/movies.js index 97378129..b364a7d0 100644 --- a/src/routers/movies.js +++ b/src/routers/movies.js @@ -73,4 +73,5 @@ router.put("/:id", async (req, res) => { } }); -module.exports = router; \ No newline at end of file +module.exports = router; + diff --git a/src/server.js b/src/server.js index 35d75063..e6f82db8 100644 --- a/src/server.js +++ b/src/server.js @@ -17,7 +17,7 @@ app.use(express.urlencoded({ extended: true })); const customerRouter = require('./routers/customer'); const moviesRouter = require("./routers/movies"); const screensRouter = require("./routers/screens"); -const prisma = require("./utils/prisma"); +// const prisma = require("./utils/prisma"); app.use('/customers', customerRouter); app.use('/movies', moviesRouter); diff --git a/test/setupTests.js b/test/setupTests.js index 2be95321..86c70156 100644 --- a/test/setupTests.js +++ b/test/setupTests.js @@ -2,7 +2,7 @@ const prisma = require("../src/utils/prisma") const deleteTables = () => { const deleteTables = [ - prisma.ticket.deleteMany(), + // prisma.ticket.deleteMany(), prisma.screening.deleteMany(), prisma.movie.deleteMany(), prisma.screen.deleteMany(),