snippeteer/test/test.js

192 lines
4.0 KiB
JavaScript
Raw Normal View History

2020-02-21 11:38:53 +01:00
'use strict';
/**
* create table users
*
* @param {any} knex database connection
* @returns {Promise} result
*/
function create_users (knex) {
return knex.schema.createTable ('users', (table) => {
table.increments ('id');
table.string ('name');
table.string ('email');
table.string ('password');
table.string ('salt');
table.boolean ('deleted');
table.unique ('name', 'email');
});
}
/**
* create table applications
*
* @param {any} knex database connection
* @returns {Promise} result
*/
function create_applications (knex) {
return knex.schema.createTable ('applications', (table) => {
table.increments ('id');
table.string ('name');
});
}
/**
* create table permissions
*
* @param {any} knex database connection
* @returns {Promise} result
*/
function create_permissions (knex) {
return knex.schema.createTable ('permissions', (table) => {
table.increments ('id');
table.integer ('user_id');
table.boolean ('create_app');
table.boolean ('manage_users');
table.boolean ('manage_permissions');
table.boolean ('manage_apps');
table.boolean ('manage_keys');
table.boolean ('issue_key');
table.foreign ('user_id')
.references ('id')
.inTable ('users');
});
}
/**
* create table user_access
*
* @param {any} knex database connection
* @returns {Promise} result
*/
function create_user_access (knex) {
return knex.schema.createTable ('user_access', (table) => {
table.increments ('id');
table.integer ('user_id');
table.integer ('app_id');
table.string ('crud');
table.foreign ('user_id')
.references ('id')
.inTable ('users');
table.foreign ('app_id')
.references ('id')
.inTable ('applications');
});
}
/**
* create table auth_keys
*
* @param {any} knex database connection
* @returns {Promise} result
*/
function create_auth_keys (knex) {
return knex.schema.createTable ('auth_keys', (table) => {
table.increments ('id');
table.string ('key');
table.integer ('app_id');
table.boolean ('read_data');
table.string ('hash');
table.string ('name');
table.unique ('key', 'hash');
table.foreign ('app_id')
.references ('id')
.inTable ('applications');
});
}
/**
* create table categories
*
* @param {any} knex database connection
* @returns {Promise} result
*/
function create_categories (knex) {
return knex.schema.createTable ('categories', (table) => {
table.increments ('id');
table.string ('name');
table.integer ('app_id');
table.unique ('name');
table.foreign ('app_id')
.references ('id')
.inTable ('applications');
});
}
/**
* create table log
*
* @param {any} knex database connection
* @returns {Promise} result
*/
function create_log (knex) {
return knex.schema.createTable ('log', (table) => {
table.increments ('id');
table.integer ('key_id');
table.integer ('app_id');
table.integer ('timestamp');
table.integer ('category_id');
table.foreign ('key_id')
.references ('id')
.inTable ('auth_keys');
table.foreign ('app_id')
.references ('id')
.inTable ('applications');
table.foreign ('category_id')
.references ('id')
.inTable ('categories');
});
}
/**
* create table data
*
* @param {any} knex database connection
* @returns {Promise} result
*/
function create_data (knex) {
return knex.schema.createTable ('data', (table) => {
table.increments ('id');
table.integer ('log_id');
table.string ('key');
table.string ('value');
table.foreign ('log_id')
.references ('id')
.inTable ('log');
});
}
/**
* run migration
*
* @param {any} knex db connection
*/
async function up (knex) {
await create_users (knex);
await create_applications (knex);
await create_permissions (knex);
await create_user_access (knex);
await create_auth_keys (knex);
await create_categories (knex);
await create_log (knex);
await create_data (knex);
}
/**
* revert migration
*/
function down () {
// noop
}
module.exports = { up, down };