diff --git a/routes/singleTestTemplate.js b/routes/singleTestTemplate.js new file mode 100644 index 0000000..07b83b4 --- /dev/null +++ b/routes/singleTestTemplate.js @@ -0,0 +1,61 @@ +'use strict'; + +const express = require('express'); +const router = express.Router(); + +const validator = require('../lib/validator'); + +router.get('/:id', async (req, res) => { + const tt = req.tt; + const linkRoot = `/admin/test-template/${tt.id}`; + + return res.render('testTemplate', { + ...req.hbsContext, + title: `Stratos - ${tt.name}`, + current: 'Test Templates', + name: tt.name, + id: tt.id, + maxMark: tt.maxMark, + editLink: `${linkRoot}/edit`, + deleteLink: `${linkRoot}/delete`, + basedTests: await tt.getTests() + }); +}); + +router.post('/:id/edit', async (req, res) => { + const tt = req.tt; + const returnURL = `/admin/test-template/${tt.id}`; + + let fields; + try { + fields = validator.validate(req.body, + [ + 'maxMark', + 'name' + ] + ).fields; + } catch (e) { + console.error(e); + return res.redirect(returnURL); + } + + await Promise.all([ + tt.setMaxMark(fields.get('maxMark')), + tt.setName(fields.get('name')) + ]); + + res.redirect(returnURL); +}); + +router.post('/:id/delete', async (req, res) => { + const tt = req.tt; + await tt.delete(); + + res.redirect('/admin/test-templates'); +}); + +module.exports = { + priority: 50, + root: '/admin/test-template', + router: router +};