summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorUdo Walter2019-03-15 05:47:09 +0100
committerUdo Walter2019-03-15 05:47:09 +0100
commit4758e919c59c2f342a5b5f3e4c1e02494f860040 (patch)
treede8cae4339faee0b777b40ed3d7de1bf619e25d0 /server
parent[server] New clients are automaticly added to the groups of the fitting subra... (diff)
downloadbas-4758e919c59c2f342a5b5f3e4c1e02494f860040.tar.gz
bas-4758e919c59c2f342a5b5f3e4c1e02494f860040.tar.xz
bas-4758e919c59c2f342a5b5f3e4c1e02494f860040.zip
[server/log] add log lib
Diffstat (limited to 'server')
-rw-r--r--server/api/log.js19
-rw-r--r--server/lib/log.js21
-rw-r--r--server/migrations/20190304043012-create-log.js58
-rw-r--r--server/models/log.js26
4 files changed, 124 insertions, 0 deletions
diff --git a/server/api/log.js b/server/api/log.js
new file mode 100644
index 0000000..05fe801
--- /dev/null
+++ b/server/api/log.js
@@ -0,0 +1,19 @@
+/* global __appdir */
+var path = require('path')
+var db = require(path.join(__appdir, 'lib', 'sequelize'))
+var express = require('express')
+const { decorateApp } = require('@awaitjs/express')
+var router = decorateApp(express.Router())
+
+// ############################################################################
+// ########################### GET requests #################################
+
+router.getAsync('', async (req, res) => {
+ const log = await db.log.findAll({ order: [['timestamp', 'DESC']] })
+ res.send(log)
+})
+
+// ############################################################################
+// ############################################################################
+
+module.exports.router = router
diff --git a/server/lib/log.js b/server/lib/log.js
new file mode 100644
index 0000000..22ce264
--- /dev/null
+++ b/server/lib/log.js
@@ -0,0 +1,21 @@
+/* global __appdir */
+const path = require('path')
+var db = require(path.join(__appdir, 'lib', 'sequelize'))
+
+async function log ({ category, description, groupId, clientId, userId }) {
+ const entry = db.log.build({
+ category,
+ description,
+ timestamp: Date.now() / 1000,
+ groupId,
+ clientId,
+ userId
+ })
+ if (groupId) entry.groupSnapshot = await db.group.findOne({ where: { id: groupId }})
+ if (clientId) entry.clientSnapshot = await db.client.findOne({ where: { id: clientId }})
+ if (userId) entry.userSnapshot = await db.user.findOne({ where: { id: userId }})
+ await entry.save()
+ return entry
+}
+
+module.exports = log \ No newline at end of file
diff --git a/server/migrations/20190304043012-create-log.js b/server/migrations/20190304043012-create-log.js
new file mode 100644
index 0000000..a7f9c25
--- /dev/null
+++ b/server/migrations/20190304043012-create-log.js
@@ -0,0 +1,58 @@
+'use strict'
+module.exports = {
+ up: (queryInterface, Sequelize) => {
+ return queryInterface.createTable('log', {
+ id: {
+ allowNull: false,
+ autoIncrement: true,
+ primaryKey: true,
+ type: Sequelize.INTEGER
+ },
+ timestamp: {
+ type: Sequelize.BIGINT
+ },
+ category: {
+ type: Sequelize.STRING
+ },
+ description: {
+ type: Sequelize.STRING(2048)
+ },
+ groupId: {
+ type: Sequelize.INTEGER,
+ onDelete: 'SET NULL',
+ references: {
+ model: 'groups',
+ key: 'id'
+ }
+ },
+ groupSnapshot: {
+ type: Sequelize.JSON
+ },
+ clientId: {
+ type: Sequelize.INTEGER,
+ onDelete: 'SET NULL',
+ references: {
+ model: 'clients',
+ key: 'id'
+ }
+ },
+ clientSnapshot: {
+ type: Sequelize.JSON
+ },
+ userId: {
+ type: Sequelize.INTEGER,
+ onDelete: 'SET NULL',
+ references: {
+ model: 'users',
+ key: 'id'
+ }
+ },
+ userSnapshot: {
+ type: Sequelize.JSON
+ }
+ })
+ },
+ down: (queryInterface, Sequelize) => {
+ return queryInterface.dropTable('log')
+ }
+}
diff --git a/server/models/log.js b/server/models/log.js
new file mode 100644
index 0000000..36fdf20
--- /dev/null
+++ b/server/models/log.js
@@ -0,0 +1,26 @@
+'use strict'
+module.exports = (sequelize, DataTypes) => {
+ var log = sequelize.define('log', {
+ id: {
+ allowNull: false,
+ autoIncrement: true,
+ primaryKey: true,
+ type: DataTypes.INTEGER
+ },
+ timestamp: DataTypes.BIGINT,
+ category: DataTypes.STRING,
+ description: DataTypes.STRING(2048),
+ groupSnapshot: DataTypes.JSON,
+ clientSnapshot: DataTypes.JSON,
+ userSnapshot: DataTypes.JSON
+ }, {
+ timestamps: false,
+ freezeTableName: true
+ })
+ log.associate = function (models) {
+ log.belongsTo(models.group)
+ log.belongsTo(models.client)
+ log.belongsTo(models.user)
+ }
+ return log
+}