From 75552ecceeb95525edbdf2079f6a483293e09f88 Mon Sep 17 00:00:00 2001 From: Gregory Ballantine Date: Sat, 2 Dec 2023 23:41:04 -0500 Subject: [PATCH] Removed projects; added tests --- index.js | 4 +++ src/models/index.js | 10 ++++++- src/models/project.js | 17 ----------- src/models/test.js | 18 ++++++++++++ src/routes/index.js | 16 +++++------ src/routes/project.js | 41 -------------------------- src/routes/test.js | 59 ++++++++++++++++++++++++++++++++++++++ src/routes/toplevel.js | 6 ++-- views/index/dashboard.twig | 6 ++-- views/partials/navbar.twig | 4 +-- views/project/add.twig | 27 ----------------- views/project/list.twig | 29 ------------------- views/project/view.twig | 15 ---------- views/test/add.twig | 53 ++++++++++++++++++++++++++++++++++ views/test/list.twig | 29 +++++++++++++++++++ views/test/view.twig | 21 ++++++++++++++ 16 files changed, 209 insertions(+), 146 deletions(-) delete mode 100644 src/models/project.js create mode 100644 src/models/test.js delete mode 100644 src/routes/project.js create mode 100644 src/routes/test.js delete mode 100644 views/project/add.twig delete mode 100644 views/project/list.twig delete mode 100644 views/project/view.twig create mode 100644 views/test/add.twig create mode 100644 views/test/list.twig create mode 100644 views/test/view.twig diff --git a/index.js b/index.js index 67fc2c7..f733c62 100644 --- a/index.js +++ b/index.js @@ -28,6 +28,10 @@ app.use(bodyParser.urlencoded({ extended: true })); // enable the Twig template engine app.set('view engine', 'twig'); +app.set('twig options', { + allowAsync: true, + strict_variables: false +}); // enable serving static files app.use(express.static('public')); diff --git a/src/models/index.js b/src/models/index.js index 10d384d..0a8f232 100644 --- a/src/models/index.js +++ b/src/models/index.js @@ -5,8 +5,16 @@ const sequelize = new Sequelize({ storage: 'data/leviathan.db' }); -const Project = require('./project')(sequelize); const Hardware = require('./hardware')(sequelize); const Benchmark = require('./benchmark')(sequelize); +const Test = require('./test')(sequelize); + +// Hardware/Test one-to-many +Hardware.hasMany(Test); +Test.belongsTo(Hardware); + +// Benchmark/Test many-to-many +Benchmark.belongsToMany(Test, { through: 'tests_benchmarks' }); +Test.belongsToMany(Benchmark, { through: 'tests_benchmarks' }); module.exports = sequelize; diff --git a/src/models/project.js b/src/models/project.js deleted file mode 100644 index 049970b..0000000 --- a/src/models/project.js +++ /dev/null @@ -1,17 +0,0 @@ -const { Sequelize } = require("sequelize"); - -module.exports = (sequelize) => { - const Project = sequelize.define('Project', { - title: { - type: Sequelize.STRING, - null: false - }, - description: { - type: Sequelize.TEXT, - }, - }, - { - tableName: 'projects' - }); - return Project; -}; diff --git a/src/models/test.js b/src/models/test.js new file mode 100644 index 0000000..79077d3 --- /dev/null +++ b/src/models/test.js @@ -0,0 +1,18 @@ +const { Sequelize } = require("sequelize"); + +module.exports = (sequelize) => { + const Test = sequelize.define('Test', { + dateTag: { + type: Sequelize.STRING, + null: false, + }, + description: { + type: Sequelize.STRING, + null: true, + } + }, + { + tableName: 'tests' + }); + return Test; +}; diff --git a/src/routes/index.js b/src/routes/index.js index 3073b6b..0a9294e 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -1,6 +1,6 @@ // load routes const topRoutes = require('./toplevel'); -const projectRoutes = require('./project'); +const testRoutes = require('./test'); const hardwareRoutes = require('./hardware'); const benchmarkRoutes = require('./benchmark'); @@ -9,13 +9,6 @@ module.exports = function(app) { // top-level routes app.get('/', topRoutes.getIndex); - // project routes - app.get('/project', projectRoutes.getIndex); - app.get('/project/list', projectRoutes.getList); - 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); @@ -30,4 +23,11 @@ module.exports = function(app) { app.post('/benchmark/add', benchmarkRoutes.postAdd); app.get('/benchmark/:benchmark_id', benchmarkRoutes.getView); + // test routes + app.get('/test', testRoutes.getIndex); + app.get('/test/list', testRoutes.getList); + app.get('/test/add', testRoutes.getAdd); + app.post('/test/add', testRoutes.postAdd); + app.get('/test/:test_id', testRoutes.getView); + }; diff --git a/src/routes/project.js b/src/routes/project.js deleted file mode 100644 index 3a00e36..0000000 --- a/src/routes/project.js +++ /dev/null @@ -1,41 +0,0 @@ -const Project = require('../models').models.Project; - -// GET /project - redirects to project list -exports.getIndex = async function(req, res) { - res.redirect('/project/list'); -}; - -// GET /project/list - list of projects -exports.getList = async function(req, res) { - var projects = await Project.findAll(); - res.render('project/list', { - projects: projects - }); -}; - -// GET /project/:project_id - view information about a project -exports.getView = async function(req, res) { - var project = await Project.findAll({ - where: { - id: req.params.project_id - } - }); - res.render('project/view', { - project: project[0] - }); -}; - -// GET /project/add - add a new project -exports.getAdd = async function(req, res) { - res.render('project/add'); -}; - -// POST /project/add - add the project to the database -exports.postAdd = async function(req, res) { - var project = await Project.create({ - title: req.body.project_title, - description: req.body.project_description - }); - - res.redirect('/project'); -}; diff --git a/src/routes/test.js b/src/routes/test.js new file mode 100644 index 0000000..b5b1f56 --- /dev/null +++ b/src/routes/test.js @@ -0,0 +1,59 @@ +const Test = require('../models').models.Test; +const Hardware = require('../models').models.Hardware; +const Benchmark = require('../models').models.Benchmark; + +// GET /test - redirects to test list +exports.getIndex = async function(req, res) { + res.redirect('/test/list'); +}; + +// GET /test/list - list of tests +exports.getList = async function(req, res) { + var tests = await Test.findAll(); + res.render('test/list', { + tests: tests + }); +}; + +// GET /test/:test_id - view information about a test +exports.getView = async function(req, res) { + var test = await Test.findAll({ + where: { + id: req.params.test_id + } + }); + res.render('test/view', { + test: test[0] + }); +}; + +// GET /test/add - add a new test +exports.getAdd = async function(req, res) { + var hardware = await Hardware.findAll(); + var benchmarks = await Benchmark.findAll(); + + res.render('test/add', { + hardware: hardware, + benchmarks: benchmarks + }); +}; + +// POST /test/add - add the test to the database +exports.postAdd = async function(req, res) { + var test = await Test.create({ + dateTag: req.body.test_date_tag, + description: req.body.test_description, + }); + + // add link to hardware + let hardware = await Hardware.findByPk(req.body.test_hardware); + test.setHardware(hardware); + + // add links to benchmarks + for (let b = 0; b < req.body.test_benchmarks.length; b++) { + let benchmark = await Benchmark.findByPk(req.body.test_benchmarks[b]); + test.addBenchmark(benchmark); + } + + res.redirect('/test/' + test.id); +}; diff --git a/src/routes/toplevel.js b/src/routes/toplevel.js index 28fa14a..6869f9f 100644 --- a/src/routes/toplevel.js +++ b/src/routes/toplevel.js @@ -1,9 +1,9 @@ -const Project = require('../models').models.Project; +const Test = require('../models').models.Test; // GET / - primary app dashboard exports.getIndex = async function(req, res) { - var projects = await Project.findAll(); + var tests = await Test.findAll(); res.render('index/dashboard', { - projects: projects + tests: tests }); }; diff --git a/views/index/dashboard.twig b/views/index/dashboard.twig index 04f73d0..daafed2 100644 --- a/views/index/dashboard.twig +++ b/views/index/dashboard.twig @@ -4,7 +4,7 @@ {% block content %}
-

Recently updated projects:

+

Recently updated tests:

@@ -13,9 +13,9 @@ - {% for p in projects %} + {% for p in tests %} - + {% endfor %} diff --git a/views/partials/navbar.twig b/views/partials/navbar.twig index 999ca9d..65cc48d 100644 --- a/views/partials/navbar.twig +++ b/views/partials/navbar.twig @@ -3,9 +3,9 @@

Leviathan

- \ No newline at end of file + diff --git a/views/project/add.twig b/views/project/add.twig deleted file mode 100644 index bafc183..0000000 --- a/views/project/add.twig +++ /dev/null @@ -1,27 +0,0 @@ -{% extends 'layouts/default.twig' %} - -{% block title %}Add a Project{% endblock %} - -{% block content %} -
-

Add a project

- -
-
- -
- -
- -
- - - -
-{% endblock %} diff --git a/views/project/list.twig b/views/project/list.twig deleted file mode 100644 index b2edda9..0000000 --- a/views/project/list.twig +++ /dev/null @@ -1,29 +0,0 @@ -{% extends 'layouts/default.twig' %} - -{% block title %}List of Projects{% endblock %} - -{% block content %} -
-

Projects

- Add a project - -
{{ p.title }}{{ p.date_tag }} {{ p.updatedAt | date('m/d/Y g:ia') }}
- - - - - - - - - {% for p in projects %} - - - - - - {% endfor %} - -
TitleCreated atLast updated
{{ p.title }}{{ p.createdAt | date('m/d/Y g:ia') }}{{ p.updatedAt | date('m/d/Y g:ia') }}
-
-{% endblock %} diff --git a/views/project/view.twig b/views/project/view.twig deleted file mode 100644 index 51a30dd..0000000 --- a/views/project/view.twig +++ /dev/null @@ -1,15 +0,0 @@ -{% extends 'layouts/default.twig' %} - -{% block title %}{{ project.title }}{% endblock %} - -{% block content %} -
-

{{ project.title }}

- -

{{ project.description }}

- -
- -

Back

-
-{% endblock %} diff --git a/views/test/add.twig b/views/test/add.twig new file mode 100644 index 0000000..2f70d25 --- /dev/null +++ b/views/test/add.twig @@ -0,0 +1,53 @@ +{% extends 'layouts/default.twig' %} + +{% block title %}Add a Test{% endblock %} + +{% block content %} +
+

Add a test

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

Tests

+ Add a test + + + + + + + + + + + {% for t in tests %} + + + + + + {% endfor %} + +
Date TagCreated atLast updated
{{ t.dateTag }} {{ t.getHardware().name }}{{ t.createdAt | date('m/d/Y g:ia') }}{{ t.updatedAt | date('m/d/Y g:ia') }}
+
+{% endblock %} diff --git a/views/test/view.twig b/views/test/view.twig new file mode 100644 index 0000000..ab53ab3 --- /dev/null +++ b/views/test/view.twig @@ -0,0 +1,21 @@ +{% extends 'layouts/default.twig' %} + +{% block title %}Test: {{ test.getHardware().name }} - {{ test.dateTag }}{% endblock %} + +{% block content %} +
+

Test: {{ test.getHardware().name }} - {{ test.dateTag }}

+ +
+
    + {% for b in test.getBenchmarks() %} +
  • {{ b.name }}
  • + {% endfor %} +
+
+ +
+ +

Back

+
+{% endblock %}