feat: Events / audit log (#1008)

* feat: Record events in DB

* feat: events API

* First pass, hacky activity feed

* WIP

* Reset dashboard

* feat: audit log UI
feat: store ip address

* chore: Document events.list api

* fix: command specs

* await event create

* fix: backlinks service

* tidy

* fix: Hide audit log menu item if not admin
This commit is contained in:
Tom Moor
2019-08-05 20:38:31 -07:00
committed by GitHub
parent 75b03fdba2
commit fb4f6822a4
37 changed files with 911 additions and 148 deletions

View File

@@ -0,0 +1,35 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('events', 'data', {
type: Sequelize.JSONB,
allowNull: true,
});
await queryInterface.addColumn('events', 'actorId', {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'users',
},
});
await queryInterface.addColumn('events', 'modelId', {
type: Sequelize.UUID,
allowNull: true
});
await queryInterface.addColumn('events', 'ip', {
type: Sequelize.STRING,
allowNull: true
});
await queryInterface.addIndex('events', ['name']);
await queryInterface.addIndex('events', ['actorId']);
await queryInterface.addIndex('events', ['teamId', 'collectionId']);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('events', 'actorId');
await queryInterface.removeColumn('events', 'modelId');
await queryInterface.removeColumn('events', 'ip');
await queryInterface.removeIndex('events', ['name']);
await queryInterface.removeIndex('events', ['actorId']);
await queryInterface.removeIndex('events', ['teamId', 'collectionId']);
}
}