diff --git a/src/app.js b/src/app.js index 49abb0f..9c89db5 100644 --- a/src/app.js +++ b/src/app.js @@ -5,7 +5,8 @@ const path = require('path'); function buildDependencies() { const dependencies = {}; - dependencies.sequelize = require('./database'); + const webRoutesProvider = new (require('./routes/webRoutes'))(); + dependencies.webRoutes = webRoutesProvider.provide(); return dependencies; } @@ -26,7 +27,7 @@ function createApp(dependencies) { app.use(createSessionMiddleware); - const webRoutes = require('./routes/webRoutes'); + const webRoutes = dependencies.webRoutes; const apiRoutes = require('./routes/apiRoutes'); app.use('/', webRoutes); diff --git a/src/routes/webRoutes.js b/src/routes/webRoutes.js index fd6585e..49ad7cd 100644 --- a/src/routes/webRoutes.js +++ b/src/routes/webRoutes.js @@ -7,68 +7,81 @@ const attachPublicKeyMiddleware = require('../middlewares/attachPublicKeyMiddlew const redirectIfMissingProfileDetailsMiddleware = require('../middlewares/redirectIfMissingProfileDetailsMiddleware'); const redirectHomeIfAuthorized = require('../middlewares/redirectHomeIfAuthorized'); -router.get( - '/', - redirectHomeIfAuthorized, - redirectIfNotAuthorizedMiddleware, - (req, res) => { - res.redirect('/login'); +class WebRoutesProvider { + provide() { + router.get( + '/', + redirectHomeIfAuthorized, + redirectIfNotAuthorizedMiddleware, + (req, res) => { + res.redirect('/login'); + } + ); + + router.get('/login', redirectHomeIfAuthorized, (req, res) => { + res.render('login', { uuid: req.cookies.sessionUuid }); + }); + + router.get('/invite/:inviteUuid', async (req, res) => { + const { inviteUuid } = req.params; + + res.cookie('inviteUuid', inviteUuid, { + httpOnly: true, + maxAge: 86400000, + }); + + let invite; + try { + invite = await invitesService.getAppInvite(inviteUuid); + if (!invite) { + return res + .status(404) + .render('error', { message: 'Invite not found.' }); + } + + if (await invitesService.isAppInviteSpent(inviteUuid)) { + return res.status(410).render('invite_spent', { invite }); + } + } catch (error) { + console.error('Error fetching invite:', error); + return res + .status(500) + .render('error', { message: 'An error occurred' }); + } + + return res.render('invite', { invite }); + }); + + router.get( + '/createProfile', + redirectIfNotAuthorizedMiddleware, + async (req, res) => { + return res.status(200).render('createProfile'); + } + ); + + router.get( + '/home', + redirectIfNotAuthorizedMiddleware, + attachPublicKeyMiddleware, + redirectIfMissingProfileDetailsMiddleware, + (req, res) => { + res.render('home', {}); + } + ); + + router.get( + '/offers', + redirectIfNotAuthorizedMiddleware, + attachPublicKeyMiddleware, + redirectIfMissingProfileDetailsMiddleware, + (req, res) => { + res.render('offers', {}); + } + ); + + return router; } -); +} -router.get('/login', redirectHomeIfAuthorized, (req, res) => { - res.render('login', { uuid: req.cookies.sessionUuid }); -}); - -router.get('/invite/:inviteUuid', async (req, res) => { - const { inviteUuid } = req.params; - - res.cookie('inviteUuid', inviteUuid, { httpOnly: true, maxAge: 86400000 }); - - let invite; - try { - invite = await invitesService.getAppInvite(inviteUuid); - if (!invite) { - return res.status(404).render('error', { message: 'Invite not found.' }); - } - - if (await invitesService.isAppInviteSpent(inviteUuid)) { - return res.status(410).render('invite_spent', { invite }); - } - } catch (error) { - console.error('Error fetching invite:', error); - return res.status(500).render('error', { message: 'An error occurred' }); - } - - return res.render('invite', { invite }); -}); - -router.get( - '/createProfile', - redirectIfNotAuthorizedMiddleware, - async (req, res) => { - return res.status(200).render('createProfile'); - } -); - -router.get( - '/home', - redirectIfNotAuthorizedMiddleware, - attachPublicKeyMiddleware, - redirectIfMissingProfileDetailsMiddleware, - (req, res) => { - res.render('home', {}); - } -); - -router.get( - '/offers', - redirectIfNotAuthorizedMiddleware, - attachPublicKeyMiddleware, - redirectIfMissingProfileDetailsMiddleware, - (req, res) => { - res.render('offers', {}); - } -); - -module.exports = router; +module.exports = WebRoutesProvider;