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/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 f14a87fc..68e4a6b2 100644 --- a/src/routers/customer.js +++ b/src/routers/customer.js @@ -1,13 +1,54 @@ 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 // 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) => { + 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 new file mode 100644 index 00000000..b364a7d0 --- /dev/null +++ b/src/routers/movies.js @@ -0,0 +1,77 @@ +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; + 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..e6f82db8 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 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(),