diff --git a/index.js b/index.js index bda6afb..f98752e 100644 --- a/index.js +++ b/index.js @@ -35,14 +35,22 @@ app.use(express.static('public')); // load routes const indexRoutes = require('./src/routes/index'); const projectRoutes = require('./src/routes/project'); +const hardwareRoutes = require('./src/routes/hardware'); // register routes app.get('/', indexRoutes.getIndex); +// project routes app.get('/project', projectRoutes.getIndex); app.get('/project/list', projectRoutes.getList); -app.get('/project/:project_id', projectRoutes.getView); app.get('/project/add', projectRoutes.getAdd); app.post('/project/add', projectRoutes.postAdd); +app.get('/project/:project_id', projectRoutes.getView); +// hardware routes +app.get('/hardware', hardwareRoutes.getIndex); +app.get('/hardware/list', hardwareRoutes.getList); +app.get('/hardware/add', hardwareRoutes.getAdd); +app.post('/hardware/add', hardwareRoutes.postAdd); +app.get('/hardware/:hardware_id', hardwareRoutes.getView); app.listen(port, () => { console.log(`Leviathan listening on port ${port}`); diff --git a/public/css/eye.css b/public/css/eye.css index e707f95..8b17f68 100644 --- a/public/css/eye.css +++ b/public/css/eye.css @@ -7,6 +7,9 @@ body{ } body{ + height: auto; + min-height: 100%; + box-sizing: border-box; padding-top: 80px; padding-bottom: 80px; background: #eee; @@ -30,6 +33,7 @@ textarea{ height: 64px; background: teal; color: white; + z-index: 20; } #main-nav ul{ @@ -61,6 +65,7 @@ textarea{ padding: 14px 20px; background: white; border-radius: 8px; + z-index: 10; } #main-footer{ @@ -69,6 +74,7 @@ textarea{ left: 0; width: 100%; height: 64px; + } #main-footer p{ diff --git a/src/models/benchmark.js b/src/models/benchmark.js new file mode 100644 index 0000000..9cfed4d --- /dev/null +++ b/src/models/benchmark.js @@ -0,0 +1,21 @@ +const { Sequelize } = require("sequelize"); + +module.exports = (sequelize) => { + const Benchmark = sequelize.define('Benchmark', { + name: { + type: Sequelize.STRING, + null: false, + }, + description: { + type: Sequelize.TEXT, + }, + scoring: { + type: Sequelize.STRING, + null: false, + }, + }, + { + tableName: 'benchmarks' + }); + return Benchmark; +}; diff --git a/src/models/hardware.js b/src/models/hardware.js new file mode 100644 index 0000000..0da9f1a --- /dev/null +++ b/src/models/hardware.js @@ -0,0 +1,18 @@ +const { Sequelize } = require("sequelize"); + +module.exports = (sequelize) => { + const Hardware = sequelize.define('Hardware', { + name: { + type: Sequelize.STRING, + null: false, + }, + type: { + type: Sequelize.STRING, + null: false, + }, + }, + { + tableName: 'hardware' + }); + return Hardware; +}; diff --git a/src/models/index.js b/src/models/index.js index bc733ac..10d384d 100644 --- a/src/models/index.js +++ b/src/models/index.js @@ -6,5 +6,7 @@ const sequelize = new Sequelize({ }); const Project = require('./project')(sequelize); +const Hardware = require('./hardware')(sequelize); +const Benchmark = require('./benchmark')(sequelize); module.exports = sequelize; diff --git a/src/models/project.js b/src/models/project.js index 2f79790..049970b 100644 --- a/src/models/project.js +++ b/src/models/project.js @@ -10,6 +10,8 @@ module.exports = (sequelize) => { type: Sequelize.TEXT, }, }, - {}); + { + tableName: 'projects' + }); return Project; }; diff --git a/src/routes/hardware.js b/src/routes/hardware.js new file mode 100644 index 0000000..29e6910 --- /dev/null +++ b/src/routes/hardware.js @@ -0,0 +1,41 @@ +const Hardware = require('../models').models.Hardware; + +// GET /hardware - redirects to project list +exports.getIndex = async function(req, res) { + res.redirect('/hardware/list'); +}; + +// GET /hardware/list - list of hardware +exports.getList = async function(req, res) { + var hardware = await Hardware.findAll(); + res.render('hardware/list', { + hardware: hardware + }); +}; + +// GET /hardware/:hardware_id - view information about a piece of hardware +exports.getView = async function(req, res) { + var hardware = await Hardware.findAll({ + where: { + id: req.params.hardware_id + } + }); + res.render('hardware/view', { + hardware: hardware[0] + }); +}; + +// GET /hardware/add - add a new hardware +exports.getAdd = async function(req, res) { + res.render('hardware/add'); +}; + +// POST /hardware/add - add the hardware to the database +exports.postAdd = async function(req, res) { + var hardware = await Hardware.create({ + name: req.body.hardware_name, + type: req.body.hardware_type + }); + + res.redirect('/hardware'); +}; diff --git a/views/hardware/add.twig b/views/hardware/add.twig new file mode 100644 index 0000000..2dd10fd --- /dev/null +++ b/views/hardware/add.twig @@ -0,0 +1,35 @@ +{% extends 'layouts/default.twig' %} + +{% block title %}Add Hardware{% endblock %} + +{% block content %} +
+

Add hardware

+ +
+
+
+ +
+ +
+ +
+
+ + +
+
+{% endblock %} diff --git a/views/hardware/list.twig b/views/hardware/list.twig new file mode 100644 index 0000000..0b319aa --- /dev/null +++ b/views/hardware/list.twig @@ -0,0 +1,31 @@ +{% extends 'layouts/default.twig' %} + +{% block title %}List of Hardware{% endblock %} + +{% block content %} +
+

Hardware

+ Add new hardware + + + + + + + + + + + + {% for h in hardware %} + + + + + + + {% endfor %} + +
NameTypeCreated atLast updated
{{ h.name }}{{ h.type }}{{ p.createdAt | date('m/d/Y g:ia') }}{{ p.updatedAt | date('m/d/Y g:ia') }}
+
+{% endblock %} diff --git a/views/hardware/view.twig b/views/hardware/view.twig new file mode 100644 index 0000000..ecfd15b --- /dev/null +++ b/views/hardware/view.twig @@ -0,0 +1,15 @@ +{% extends 'layouts/default.twig' %} + +{% block title %}{{ hardware.name }}{% endblock %} + +{% block content %} +
+

{{ hardware.name }}

+ +

Hardware type: {{ hardware.type }}

+ +
+ +

Back

+
+{% endblock %}