Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions .env.example

This file was deleted.

Binary file added assets/conceptual-modelling.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/logical-modelling.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/physical-maodelling.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
26 changes: 24 additions & 2 deletions src/controllers/customer.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const { PrismaClientKnownRequestError } = require("@prisma/client")
const { createCustomerDb } = require('../domains/customer.js')
const { createCustomerDb, updateCustomerById } = require('../domains/customer.js')

const createCustomer = async (req, res) => {
const {
Expand Down Expand Up @@ -43,6 +43,28 @@ const createCustomer = async (req, res) => {
}
}

const updateCustomer = async (req, res) => {

const { id } = req.params
const { name } = req.body

if (!name) {
return res.status(400).json({ error: 'Invalid data format' });
}

try {

const updateCustomerDetails = await updateCustomerById (id, name)
res.status(201).json({customer: updateCustomerDetails })

} catch (error) {

console.error('Error updating customer:', error)
res.status(500).json({ error: 'Internal server error' })

}
}

module.exports = {
createCustomer
createCustomer, updateCustomer
}
83 changes: 83 additions & 0 deletions src/controllers/movie.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
const { PrismaClientKnownRequestError } = require("@prisma/client")
const { getListMovies, postMovie, getMovieById, updateMovieById } = require('../domains/movie.js')


const getMovies = async (req, res) => {

try {
const movies = await getListMovies()
res.status(200).json({movies})
} catch (error) {
console.error('Error fetching movies:', error)
res.status(500).json({ error: 'Internal server error' })
}
}

const createMovie = async (req, res) => {

const {
title,
runtimeMins
} = req.body

if (!title || !runtimeMins) {
return res.status(400).json({
error: "Missing fields in request body"
})
}

try {
const createdMovie = await postMovie(title, runtimeMins)

res.status(201).json({
movie: createdMovie
})
} catch (error) {

if (error instanceof PrismaClientKnownRequestError) {
if (error.code === "P2002") {
return res.status(409).json({ error: "A movie with the provided title already exists" })
}
}

res.status(500).json({ error: error.message })
}
}

const fetchMovieByID = async (req, res) => {

try {
const movieId = req.params.id
const movie = await getMovieById(movieId)

if (!movie) {
return res.status(404).json({error: 'movie not found'})
}

res.status(200).json({movie})

} catch (error) {
console.error('Error fetching movie:', error)
res.status(500).json({ error: 'Internal server error' })
}
}

const updateMovie = async (req, res) => {
const { id } = req.params
const { title, runtimeMins, screenings } = req.body

try {

const updatedMovie = await updateMovieById(id, title, runtimeMins, screenings)
res.status(201).json({ movie: updatedMovie })

} catch (error) {

console.error('Error updating movie and screenings:', error)
res.status(500).json({ error: 'Internal server error' })

}
}


module.exports = { getMovies, createMovie, fetchMovieByID, updateMovie }
35 changes: 35 additions & 0 deletions src/controllers/screen.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
const { PrismaClientKnownRequestError } = require("@prisma/client")
const { createScreen } = require('../domains/screen.js')


const createNewScreen = async (req, res) => {

const {
number
} = req.body

if (!number) {
return res.status(400).json({
error: "Missing fields in request body"
})
}

try {
const screen = await createScreen(number)

res.status(201).json({
screen: screen
})
} catch (error) {

if (error instanceof PrismaClientKnownRequestError) {
if (error.code === "P2002") {
return res.status(409).json({ error: "A screen with the provided number already exists" })
}
}

res.status(500).json({ error: error.message })
}
}

module.exports = { createNewScreen }
50 changes: 35 additions & 15 deletions src/domains/customer.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,43 @@ const prisma = require('../utils/prisma')
* This will create a Customer AND create a new Contact, then automatically relate them with each other
* @tutorial https://www.prisma.io/docs/concepts/components/prisma-client/relation-queries#create-a-related-record
*/
const createCustomerDb = async (name, phone, email) => await prisma.customer.create({
data: {
name,
contact: {
create: {
phone,
email
const createCustomerDb = async (name, phone, email) => {
const registerdCustomer = await prisma.customer.create({
data: {
name,
contact: {
create: {
phone,
email
}
}
},
// We add an `include` outside of the `data` object to make sure the new contact is returned in the result
// This is like doing RETURNING in SQL
include: {
contact: true
}
},
// We add an `include` outside of the `data` object to make sure the new contact is returned in the result
// This is like doing RETURNING in SQL
include: {
contact: true
}
})
})
return registerdCustomer
}

const updateCustomerById = async (customerId, name) => {

const updateCustomer = await prisma.customer.update({
where: {
id: parseInt(customerId)
},
data: {
name
},
include: {
contact: true
}
})
return updateCustomer

}

module.exports = {
createCustomerDb
createCustomerDb, updateCustomerById
}
64 changes: 64 additions & 0 deletions src/domains/movie.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
const prisma = require('../utils/prisma')


const getListMovies = async () => {
const movies = await prisma.movie.findMany({
include: {
screenings: true
}
})
return movies
}

const postMovie = async (title, runtimeMins) => {
const movie = await prisma.movie.create({
data: {
title,
runtimeMins,
screenings: {}
},
include: {
screenings: true
}
})
return movie
}

const getMovieById = async (id) => {
const movie = await prisma.movie.findUnique({
where: {
id: parseInt(id)
},
include: {
screenings: true
}
})
return movie
}

const updateMovieById = async (movieId, title, runtimeMins, screenings) => {

const updateData = await prisma.movie.update({
where: { id: parseInt(movieId) },
data: {
title,
runtimeMins,
screenings: {
update: screenings? screenings.map(screening => ({
where: { id: screening.id },
data: {
startsAt: screening.startsAt,
screenId: screening.screenId
}
})) : []
}
},

include: {
screenings: true
}
})
return updateData
}

module.exports = { getListMovies, postMovie, getMovieById, updateMovieById }
15 changes: 15 additions & 0 deletions src/domains/screen.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const prisma = require('../utils/prisma')

const createScreen = async (number) => {
const createdScreen = await prisma.screen.create({
data: {
number,
},
include: {
screenings: true
}
})
return createdScreen
}

module.exports = { createScreen }
4 changes: 3 additions & 1 deletion src/routers/customer.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const express = require("express");
const {
createCustomer
createCustomer, updateCustomer
} = require('../controllers/customer');

const router = express.Router();
Expand All @@ -10,4 +10,6 @@ const router = express.Router();
// that looks like http://localhost:4040/customer/register
router.post("/register", createCustomer);

router.put("/:id", updateCustomer)

module.exports = router;
21 changes: 21 additions & 0 deletions src/routers/movie.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
const express = require("express");
const {
getMovies,
createMovie,
fetchMovieByID,
updateMovie
} = require('../controllers/movie');

const router = express.Router();


router.get("/", getMovies);

router.post("/", createMovie)

router.get("/:id", fetchMovieByID)

router.put("/:id", updateMovie)


module.exports = router
12 changes: 12 additions & 0 deletions src/routers/screen.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const express = require("express");
const {
createNewScreen
} = require('../controllers/screen');

const router = express.Router();


router.post("/", createNewScreen)


module.exports = router
6 changes: 6 additions & 0 deletions src/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,11 @@ app.use(express.urlencoded({ extended: true }));
const customerRouter = require('./routers/customer');
app.use('/customers', customerRouter);

const movieRouter = require('./routers/movie')
app.use('/movies', movieRouter)

const screenRouter = require('./routers/screen')
app.use('/screens', screenRouter)


module.exports = app