Skip to content

Commit

Permalink
implement all Issues logics in app create components to respective is…
Browse files Browse the repository at this point in the history
…sue page b00tc4mp#257
  • Loading branch information
Yeyusin committed Aug 6, 2024
1 parent 6a6946e commit 28a4073
Show file tree
Hide file tree
Showing 25 changed files with 516 additions and 40 deletions.
35 changes: 35 additions & 0 deletions staff/sergio-ocaña/project/api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,41 @@ mongoose.connect(MONGO_URL)
}
})

server.get('/rooms/customer/:cinemaId', (req, res) => {
try {
const { authorization } = req.headers

const token = authorization.slice(7)

const { sub: userId } = jwt.verify(token, JWT_SECRET)

const { cinemaId } = req.params

logic.retrieveRoomsFromCinemaCustomer(userId, cinemaId)
.then(rooms => res.json(rooms))
.catch(error => {

let status = 500

if (error instanceof MatchError)
status = 404

res.status(status).json({ error: error.constructor.name, message: error.message })
})
} catch (error) {
let status = 500

if (error instanceof TypeError || error instanceof RangeError || error instanceof ContentError)
status = 400
else if (error instanceof JsonWebTokenError || error instanceof TokenExpiredError) {
status = 401

error = new MatchError(error.message)
}
res.status(status).json({ error: error.constructor.name, message: error.message })
}
})

server.patch('/rooms/:cinemaId/:roomId', jsonBodyParser, (req, res) => {
try {
const { authorization } = req.headers
Expand Down
2 changes: 2 additions & 0 deletions staff/sergio-ocaña/project/api/logic/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import retrieveCinemaIssues from './retrieveCinemaIssues.js'
import retrieveUserIssues from './retrieveUserIssues.js'
import deleteIssue from './deleteIssue.js'
import closeIssue from './closeIssue.js'
import retrieveRoomsFromCinemaCustomer from './retrieveRoomsFromCinemaCustomer.js'

const logic = {
authenticateUser,
Expand All @@ -33,6 +34,7 @@ const logic = {
updateRoom,
deleteRoom,
retrieveRoomsFromCinema,
retrieveRoomsFromCinemaCustomer,
createIssue,
retrieveCinemaIssues,
retrieveUserIssues,
Expand Down
9 changes: 5 additions & 4 deletions staff/sergio-ocaña/project/api/logic/retrieveCinemaIssues.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { validate, errors } from 'com'

const { MatchError, SystemError } = errors


function retrieveCinemaIssues(userId) {
validate.id(userId)

Expand All @@ -21,7 +20,7 @@ function retrieveCinemaIssues(userId) {
.then(cinema => {
if (!cinema) throw new MatchError('Cinema not found')

return Issue.find({ $and: [{ status: 'open' }, { cinema: cinemaId }] }).populate('author', 'name').sort({ date: -1 }).select('-__v ').lean()
return Issue.find({ cinema: cinemaId }).populate([{ path: 'author', select: 'name' }, { path: 'cinema', select: 'name' }]).sort({ date: -1 }).select('-__v ').lean()
.catch(error => { throw new SystemError(error.message) })
.then(issues => {
issues.forEach(issue => {
Expand All @@ -36,15 +35,17 @@ function retrieveCinemaIssues(userId) {

delete issue.author._id
}
if (issue.cinema._id) {
issue.cinema.id = issue.cinema._id.toString()

if (typeof issue.cinema === 'object') issue.cinema = issue.cinema.toString()
delete issue.cinema._id
}

if ('room' in issue) if (typeof issue.room === 'object') issue.room = issue.room.toString()
})

return issues
})

})
})
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { User, Cinema, Room } from '../data/index.js'

import { validate, errors } from 'com'

const { SystemError, MatchError } = errors

function retrieveRoomsFromCinemaCustomer(userId, cinemaId) {
validate.id(userId)
validate.id(cinemaId, 'cinemaId')

return User.findById(userId)
.catch(error => { throw new SystemError(error.message) })
.then(user => {
if (!user) throw new MatchError('User not found')

return Cinema.findById(cinemaId)
.catch(error => { throw new SystemError(error.message) })
.then(cinema => {
if (!cinema) throw new MatchError('Cinema not found')

return Room.find({ cinema: cinemaId }).select('-__v -temperature').sort({ name: 1 }).lean()
.catch(error => { throw new SystemError(error.message) })
.then(rooms => {
rooms.forEach(room => {
if (room._id) {
room.id = room._id.toString()

delete room._id
}
if (typeof room.cinema === 'object')
room.cinema = room.cinema.toString()
})

return rooms
})

})
})
}

export default retrieveRoomsFromCinemaCustomer
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import retrieveRoomsFromCinema from './retrieveRoomsFromCinema.js'

import mongoose from 'mongoose'

mongoose.connect('mongodb://localhost:27017/project')
.then(() => {
try {
retrieveRoomsFromCinema('669e3f9f595f14db65b23a19', '66a8b2fca7a3e4552fedf3f4')
.then((rooms) => console.log(rooms))
.catch(error => console.error(error.message))
} catch (error) {
console.error(error)
}
})
8 changes: 6 additions & 2 deletions staff/sergio-ocaña/project/api/logic/retrieveUserIssues.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ function retrieveUserIssues(userId) {

if (user.role !== 'customer') throw new MatchError('only customers could search his issues')

return Issue.find({ author: userId }).sort({ date: -1 }).select('-__v -author').lean()
return Issue.find({ author: userId }).sort({ date: -1 }).populate('cinema', 'name').select('-__v -author').lean()
.catch(error => { throw new SystemError(error.message) })
.then(issues => {
issues.forEach(issue => {
Expand All @@ -24,7 +24,11 @@ function retrieveUserIssues(userId) {
delete issue._id
}

if (typeof issue.cinema === 'object') issue.cinema = issue.cinema.toString()
if (issue.cinema._id) {
issue.cinema.id = issue.cinema._id.toString()

delete issue.cinema._id
}

if ('room' in issue) if (typeof issue.room === 'object') issue.room = issue.room.toString()
})
Expand Down
9 changes: 6 additions & 3 deletions staff/sergio-ocaña/project/app/src/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import RegisterCustomer from './pages/RegisterCustomer'
import RegisterManager from './pages/RegisterManager'
import Home from './pages/Home'
import RouteFooter from './pages/RouteFooter'
import Issue from './pages/Issue'
import Issues from './pages/Issues'

const login = "/login"
const register = "/register"
Expand All @@ -15,6 +15,7 @@ const home = "/"
const issue = "/issue"

function App() {

const navigate = useNavigate()

const handleUserRegistered = () => navigate(login)
Expand All @@ -29,13 +30,15 @@ function App() {

const handleHomeButton = () => navigate(home)

const handleIssueButton = () => navigate(issue)

return <Routes>
<Route path={login} element={logic.isUserLoggedIn() ? <Navigate to={home} /> : <Login onUserLoggedIn={handleUserLoggedIn} onRegisterClick={handleRegisterButton} />} />
<Route path={register} element={logic.isUserLoggedIn() ? <Navigate to={home} /> : <RegisterCustomer onUserRegistered={handleUserRegistered} onLoginClick={handleLoginButton} />} />
<Route path={registerManager} element={logic.isUserLoggedIn() ? <Navigate to={home} /> : <RegisterManager onUserRegistered={handleUserRegistered} onLoginClick={handleLoginButton} />} />
<Route element={<RouteFooter onHomeClick={handleHomeButton} />}>
<Route element={<RouteFooter onHomeClick={handleHomeButton} onIssueClick={handleIssueButton} />}>
<Route path={home} element={logic.isUserLoggedIn() ? <Home onLogoutClick={handleLogoutButton} /> : <Navigate to={login} />} />
<Route path={issue} element={logic.isUserLoggedIn() ? <Issues onLogoutClick={handleLogoutButton} /> : <Navigate to={login} />} />
<Route path={issue} element={logic.isUserLoggedIn() ? <Issues /> : <Navigate to={login} />} />
</Route>
</Routes>

Expand Down
Loading

0 comments on commit 28a4073

Please sign in to comment.