From 4167130f0cb4b7b8f2a860dd6ab7b6c7c1f49c61 Mon Sep 17 00:00:00 2001 From: Gregory Ballantine Date: Sun, 6 Nov 2022 01:37:56 -0500 Subject: [PATCH] Started work on adding license tracking --- index.js | 3 ++ src/models/index.js | 1 + src/models/license.js | 27 +++++++++++++++++ src/routes/home.js | 11 +++++++ src/routes/license.js | 22 ++++++++++++++ views/index.twig | 69 +++++++++++++++++++++++++++--------------- views/layout.twig | 1 + views/license/add.twig | 53 ++++++++++++++++++++++++++++++++ 8 files changed, 162 insertions(+), 25 deletions(-) create mode 100644 src/models/license.js create mode 100644 src/routes/license.js create mode 100644 views/license/add.twig diff --git a/index.js b/index.js index a821fff..a10a7d0 100644 --- a/index.js +++ b/index.js @@ -47,6 +47,7 @@ app.use(express.static('public')); // load route handlers const homeRoutes = require('./src/routes/home'); const itemRoutes = require('./src/routes/item'); +const licenseRoutes = require('./src/routes/license'); // register route handlers app.get('/', homeRoutes.getIndex); @@ -55,6 +56,8 @@ app.post('/item/add', itemRoutes.postAdd); app.get('/item/:id', itemRoutes.getItem); app.get('/item/:id/edit', itemRoutes.getItemEdit); app.post('/item/:id/edit', itemRoutes.postItemEdit); +app.get('/license/add', licenseRoutes.getAdd); +app.post('/license/add', licenseRoutes.postAdd); // start app app.listen(config.get('server.port'), config.get('server.address'), () => { diff --git a/src/models/index.js b/src/models/index.js index 652dd3e..c5736ea 100644 --- a/src/models/index.js +++ b/src/models/index.js @@ -9,6 +9,7 @@ db.Sequelize = Sequelize; db.sequelize = sequelize; db.items = require('./item.js')(sequelize, Sequelize); +db.licenses = require('./license.js')(sequelize, Sequelize); module.exports = db; diff --git a/src/models/license.js b/src/models/license.js new file mode 100644 index 0000000..c20cb7e --- /dev/null +++ b/src/models/license.js @@ -0,0 +1,27 @@ +module.exports = (sequelize, Sequelize) => { + const License = sequelize.define('license', { + + name: { + type: Sequelize.STRING, + }, + + key: { + type: Sequelize.STRING, + }, + + manufacturer: { + type: Sequelize.STRING, + }, + + purchasedFrom: { + type: Sequelize.STRING, + }, + + purchasedAt: { + type: Sequelize.DATE, + }, + + }); + + return License; +}; diff --git a/src/routes/home.js b/src/routes/home.js index 1acacae..b3a22a1 100644 --- a/src/routes/home.js +++ b/src/routes/home.js @@ -1,8 +1,10 @@ const db = require('../models'); const Item = db.items; +const License = db.licenses; // GET - / exports.getIndex = async function(req, res) { + // fetch inventory items from database const items = await Item.findAll({ limit: 10, order: [ @@ -10,9 +12,18 @@ exports.getIndex = async function(req, res) { ], }); + // fetch licenses from database + const licenses = await License.findAll({ + limit: 10, + order: [ + ['updatedAt', 'DESC'], + ], + }); + // req.flash('info', 'This is a test flash message.'); res.render('index.twig', { inventory: items, + licenses: licenses, }); }; diff --git a/src/routes/license.js b/src/routes/license.js new file mode 100644 index 0000000..fb0d909 --- /dev/null +++ b/src/routes/license.js @@ -0,0 +1,22 @@ +const db = require('../models'); +const License = db.licenses; + +// GET - /license/add +exports.getAdd = async function(req, res) { + res.render('license/add.twig'); +}; + +// POST - /license/add +exports.postAdd = async function(req, res) { + const license = await License.create({ + name: req.body.license_name, + key: req.body.license_key, + manufacturer: req.body.license_manufacturer, + purchasedFrom: req.body.license_purchase_from, + purchasedAt: req.body.license_purchase_date, + }); + + console.log(`Saved license ${license.name} to the database.`); + + res.redirect('/'); +}; diff --git a/views/index.twig b/views/index.twig index 3d53738..33a140f 100644 --- a/views/index.twig +++ b/views/index.twig @@ -28,32 +28,51 @@
-
-

Recently updated records:

+
+

Recently updated hardware:

+ + + + + + + + + + + {% for item in inventory %} + + + + + + + {% endfor %} + +
NameManufacturerTypeUpdated at
{{ item.name }}{{ item.manufacturer }}{{ item.type }}{{ item.updatedAt | date("m/d/Y h:i:s A") }}
+
+ +
+

Recently updated licenses:

+ + + + + + + + + + {% for license in licenses %} + + + + + + {% endfor %} + +
NameManufacturerUpdated at
{{ license.name }}{{ license.manufacturer }}{{ license.updatedAt | date("m/d/Y h:i:s A") }}
-
- - - - - - - - - - - {% for item in inventory %} - - - - - - - {% endfor %} - -
NameManufacturerTypeUpdated at
{{ item.name }}{{ item.manufacturer }}{{ item.type }}{{ item.updatedAt | date("m/d/Y h:i:s A") }}
-
- {% endblock %} diff --git a/views/layout.twig b/views/layout.twig index 909ae55..450ee30 100644 --- a/views/layout.twig +++ b/views/layout.twig @@ -20,6 +20,7 @@ + diff --git a/views/license/add.twig b/views/license/add.twig new file mode 100644 index 0000000..75fad4b --- /dev/null +++ b/views/license/add.twig @@ -0,0 +1,53 @@ +{% extends 'layout.twig' %} + +{% block title %}Add New License{% endblock %} + +{% block content %} + + +
+
+

Add new license

+
+
+ +
+
+
+
+
+ + +
+
+ +
+
+ + +
+ +
+ + +
+
+ +
+
+ + +
+ +
+ + +
+
+ + +
+
+
+ +{% endblock %}