Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
DynamicWebsite/index.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
257 lines (234 sloc)
6.96 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Routes File | |
'use strict' | |
/* MODULE IMPORTS */ | |
const Koa = require('koa') | |
const Router = require('koa-router') | |
const views = require('koa-views') | |
const staticDir = require('koa-static') | |
const bodyParser = require('koa-bodyparser') | |
const koaBody = require('koa-body')({multipart: true, uploadDir: '.'}) | |
const session = require('koa-session') | |
/* IMPORT CUSTOM MODULES */ | |
const User = require('./modules/user') | |
const Order = require('./modules/order') | |
const app = new Koa() | |
const router = new Router() | |
/* CONFIGURING THE MIDDLEWARE */ | |
app.keys = ['darkSecret'] | |
app.use(staticDir('public')) | |
app.use(bodyParser()) | |
app.use(session(app)) | |
app.use(views(`${__dirname}/views`, { extension: 'handlebars' }, {map: { handlebars: 'handlebars' }})) | |
const defaultPort = 8080 | |
const port = process.env.PORT || defaultPort | |
const dbUsers = './databases/users.db' | |
const dbMenu = './databases/menu.db' | |
/** | |
* The secure home page. | |
* | |
* @name Home Page | |
* @route {GET} / | |
* @authentication This route requires cookie-based authentication. | |
*/ | |
// eslint-disable-next-line complexity | |
router.get('/', async ctx => { | |
try { | |
const auth = ctx.session.authorised | |
if(auth !== 'Admin' || auth !== 'Kitchen' || auth !== 'Waiting') { | |
return ctx.redirect('/login?msg=you need to log in') | |
} | |
const data = {} | |
if(ctx.query.msg) data.msg = ctx.query.msg | |
await ctx.render('index') | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
/** | |
* The user registration page. | |
* | |
* @name Register Page | |
* @route {GET} /register | |
*/ | |
router.get('/register', async ctx => await ctx.render('register')) | |
/** | |
* The script to process new user registrations. | |
* | |
* @name Register Script | |
* @route {POST} /register | |
*/ | |
router.post('/register', koaBody, async ctx => { | |
try { | |
// extract the data from the request | |
const body = ctx.request.body | |
console.log(body) | |
// call the functions in the module | |
const user = await new User(dbUsers) | |
await user.register(body.user, body.pass, body.auth) | |
// redirect to the home page | |
ctx.redirect(`/?msg=new user "${body.name}" added`) | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
router.get('/login', async ctx => { | |
const data = {} | |
if(ctx.query.msg) data.msg = ctx.query.msg | |
if(ctx.query.user) data.user = ctx.query.user | |
await ctx.render('login', data) | |
}) | |
router.post('/login', async ctx => { | |
try { | |
const body = ctx.request.body | |
const user = await new User(dbUsers) | |
await user.login(body.user, body.pass) | |
const auth = await user.getAuth(body.user) | |
ctx.session.authorised = auth.auth | |
return ctx.render('mainmenu') | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
router.get('/logout', async ctx => { | |
ctx.session.authorised = null | |
ctx.redirect('/?msg=you are now logged out') | |
}) | |
router.get('/mainmenu', async ctx => { | |
try{ | |
const auth = ctx.session.authorised | |
if(auth !== 'Admin' || auth !== 'Kitchen' || auth !== 'Waiting') { | |
return ctx.redirect('/login?msg=you need to log in') | |
} else await ctx.render('mainmenu') | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
router.get('/order', async ctx => { | |
try{ | |
const auth = ctx.session.authorised | |
if(auth === 'Admin' || auth === 'Waiting') { | |
const order = await new Order(dbMenu) | |
const numbers = order.createTableNumbers() | |
await ctx.render('order', {number: numbers}) | |
} else await ctx.render('mainmenu') | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
router.get('/order/:tableNumber', async ctx => { | |
try{ | |
const currentTableNumber = ctx.params.tableNumber | |
const order = await new Order(dbMenu) | |
const itemNames = await order.getItemsName() | |
const itemAmount = await order.getAmount(currentTableNumber, itemNames) | |
const data = order.createItemObject(itemNames, itemAmount, currentTableNumber) | |
const numbers = order.createTableNumbers() | |
if (ctx.params.tableNumber === 'Select') { | |
ctx.redirect('/order/select?msg=Select a Table Number') | |
} else{ | |
await ctx.render('order', {items: data, number: numbers, table: currentTableNumber}) | |
} | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
router.post('/order/:tableNumber', async ctx => { | |
try { | |
const body = ctx.request.body | |
const order = await new Order(dbMenu) | |
if(body.submit === 'Add') { | |
await order.addToOrder(body) | |
} else if (body.submit === 'Remove') { | |
await order.removeFromOrder(body) | |
} | |
ctx.redirect(ctx.params.tableNumber) | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
router.get('/ready', async ctx => { | |
try{ | |
const auth = ctx.session.authorised | |
if(auth === 'Admin' || auth === 'Kitchen') { | |
const order = await new Order(dbMenu) | |
const unready = await order.getNotReadyOrders() | |
const ready = await order.getReadyOrders() | |
await ctx.render('ready', {unreadyOrder: unready, readyOrder: ready}) | |
} else await ctx.render('mainmenu') | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
router.post('/ready', async ctx => { | |
try { | |
const body = ctx.request.body | |
const order = await new Order(dbMenu) | |
if (body.submit === 'Ready') { | |
await order.setReady(body.ID) | |
} else if (body.submit === 'Unready') { | |
await order.setUnready(body.ID) | |
} | |
const unready = await order.getNotReadyOrders() | |
const ready = await order.getReadyOrders() | |
await ctx.render('ready', {unreadyOrder: unready, readyOrder: ready}) | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
router.get('/adding', async ctx => { | |
try{ | |
const auth = ctx.session.authorised | |
if(auth === 'Admin' || auth === 'Waiting') { | |
await ctx.render('adding') | |
} else await ctx.render('mainmenu') | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
router.post('/adding', async ctx => { | |
try { | |
const body = ctx.request.body | |
const order = await new Order(dbMenu) | |
order.createPrice(body) | |
await order.addItem(body) | |
await ctx.render('adding') | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
router.get('/menu', async ctx => { | |
try{ | |
const auth = ctx.session.authorised | |
if(auth === 'Admin') { | |
const order = await new Order(dbMenu) | |
const data = await order.getItemsName() | |
await ctx.render('menu', {items: data}) | |
} else await ctx.render('mainmenu') | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
router.get('/edit/:itemID', async ctx => { | |
try{ | |
const order = await new Order(dbMenu) | |
const data = await order.getItemInfo(ctx.params.itemID) | |
order.splitPrice(data[0]) | |
await ctx.render('edit', {items: data}) | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
router.post('/edit', async ctx => { | |
try { | |
const body = ctx.request.body | |
const order = await new Order(dbMenu) | |
order.createPrice(body) | |
await order.editItem(body) | |
const data = await order.getItemsName() | |
await ctx.render('menu', {items: data}) | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
app.use(router.routes()) | |
module.exports = app.listen(port, async() => console.log(`listening on port ${port}`)) |