Removed knex, bookshelf and sqlite
This commit is contained in:
parent
27871c9ed4
commit
68024783b9
16 changed files with 643 additions and 2339 deletions
|
@ -1,88 +0,0 @@
|
||||||
import knex from 'knex'
|
|
||||||
import bookshelf from 'bookshelf'
|
|
||||||
|
|
||||||
import defaults from './defaults.mjs'
|
|
||||||
import config from './config.mjs'
|
|
||||||
import log from './log.mjs'
|
|
||||||
|
|
||||||
let host = config.get('knex:connection')
|
|
||||||
|
|
||||||
log.info(host, 'Connecting to DB')
|
|
||||||
|
|
||||||
const client = knex(config.get('knex'))
|
|
||||||
|
|
||||||
// Check if we're running tests while connected to
|
|
||||||
// potential production environment.
|
|
||||||
/* istanbul ignore if */
|
|
||||||
if (config.get('NODE_ENV') === 'test' &&
|
|
||||||
config.get('knex:connection:database') !== 'test' ||
|
|
||||||
config.get('knex:connection:connection')) {
|
|
||||||
// There is an offchance that we're running tests on
|
|
||||||
// production database. Exit NOW!
|
|
||||||
log.error('Critical: potentially running test on production enviroment. Shutting down.')
|
|
||||||
process.exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
let shelf = bookshelf(client)
|
|
||||||
|
|
||||||
// Helper method to create models
|
|
||||||
shelf.createModel = (attr, opts) => {
|
|
||||||
// Create default attributes to all models
|
|
||||||
let attributes = defaults(attr, {
|
|
||||||
/**
|
|
||||||
* Initialize a new instance of model. This does not get called when
|
|
||||||
* relations to this model is being fetched though.
|
|
||||||
*/
|
|
||||||
initialize() {
|
|
||||||
this.on('fetching', this.checkFetching)
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Event handler when fetch() is called. This gets called for both
|
|
||||||
* when getSingle() or just manual fetch() is called as well as
|
|
||||||
* when relation models through belongsTo() resources get fetched.
|
|
||||||
*
|
|
||||||
* @param {Model} model - The model instance if fetch() was used. For
|
|
||||||
* belongsTo this is the relation model thingy.
|
|
||||||
* @param {Array} columns - Array of columns to select if fetch() was used.
|
|
||||||
* Otherwise this is null.
|
|
||||||
* @param {Object} options - Options for the fetch. Includes the query
|
|
||||||
* builder object.
|
|
||||||
*/
|
|
||||||
checkFetching(model, columns, options) {
|
|
||||||
options.query.where({ is_deleted: false })
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
// Create default options for all models
|
|
||||||
let options = defaults(opts, {
|
|
||||||
/**
|
|
||||||
* Create new model object in database.
|
|
||||||
*
|
|
||||||
* @param {Object} data - The values the new model should have
|
|
||||||
* @return {Model} The resulted model
|
|
||||||
*/
|
|
||||||
create(data) {
|
|
||||||
return this.forge(data).save()
|
|
||||||
},
|
|
||||||
|
|
||||||
getSingle(id, withRelated = [], require = true) {
|
|
||||||
let where = { id: Number(id) || 0 }
|
|
||||||
|
|
||||||
return this.query({ where })
|
|
||||||
.fetch({ require, withRelated })
|
|
||||||
},
|
|
||||||
|
|
||||||
getAll(where = {}, withRelated = [], orderBy = 'id') {
|
|
||||||
where.is_deleted = false
|
|
||||||
|
|
||||||
return this.query({ where })
|
|
||||||
.orderBy(orderBy, 'ASC')
|
|
||||||
.fetchAll({ withRelated })
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
return shelf.Model.extend(attributes, options)
|
|
||||||
}
|
|
||||||
|
|
||||||
export default shelf
|
|
|
@ -1,41 +0,0 @@
|
||||||
import bookshelf from '../bookshelf.mjs'
|
|
||||||
|
|
||||||
/* Content model:
|
|
||||||
{
|
|
||||||
id,
|
|
||||||
name,
|
|
||||||
graphic,
|
|
||||||
html,
|
|
||||||
css,
|
|
||||||
data,
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
const Content = bookshelf.createModel({
|
|
||||||
tableName: 'content',
|
|
||||||
|
|
||||||
format(attributes) {
|
|
||||||
attributes.graphic = JSON.stringify(attributes.graphic)
|
|
||||||
attributes.data = JSON.stringify(attributes.data)
|
|
||||||
return attributes
|
|
||||||
},
|
|
||||||
|
|
||||||
parse(attributes) {
|
|
||||||
if (attributes.graphic) {
|
|
||||||
attributes.graphic = JSON.parse(attributes.graphic)
|
|
||||||
}
|
|
||||||
if (attributes.data) {
|
|
||||||
attributes.data = JSON.parse(attributes.data)
|
|
||||||
}
|
|
||||||
return attributes
|
|
||||||
},
|
|
||||||
}, {
|
|
||||||
getSingle(name, withRelated = [], require = false) {
|
|
||||||
let where = { name }
|
|
||||||
|
|
||||||
return this.query({ where })
|
|
||||||
.fetch({ require, withRelated })
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
export default Content
|
|
|
@ -1,30 +0,0 @@
|
||||||
import bookshelf from '../bookshelf.mjs'
|
|
||||||
|
|
||||||
/* Graphic model:
|
|
||||||
{
|
|
||||||
id,
|
|
||||||
name,
|
|
||||||
engine,
|
|
||||||
settings,
|
|
||||||
is_deleted,
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
const Graphic = bookshelf.createModel({
|
|
||||||
tableName: 'graphics',
|
|
||||||
|
|
||||||
format(attributes) {
|
|
||||||
attributes.settings = JSON.stringify(attributes.settings)
|
|
||||||
return attributes
|
|
||||||
},
|
|
||||||
|
|
||||||
parse(attributes) {
|
|
||||||
if (attributes.settings) {
|
|
||||||
attributes.settings = JSON.parse(attributes.settings)
|
|
||||||
}
|
|
||||||
return attributes
|
|
||||||
},
|
|
||||||
}, {
|
|
||||||
})
|
|
||||||
|
|
||||||
export default Graphic
|
|
|
@ -1,30 +0,0 @@
|
||||||
import bookshelf from '../bookshelf.mjs'
|
|
||||||
|
|
||||||
/* Preset model:
|
|
||||||
{
|
|
||||||
id,
|
|
||||||
graphic_id,
|
|
||||||
values,
|
|
||||||
sort,
|
|
||||||
is_deleted,
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
const Preset = bookshelf.createModel({
|
|
||||||
tableName: 'presets',
|
|
||||||
|
|
||||||
format(attributes) {
|
|
||||||
attributes.values = JSON.stringify(attributes.values)
|
|
||||||
return attributes
|
|
||||||
},
|
|
||||||
|
|
||||||
parse(attributes) {
|
|
||||||
if (attributes.values) {
|
|
||||||
attributes.values = JSON.parse(attributes.values)
|
|
||||||
}
|
|
||||||
return attributes
|
|
||||||
},
|
|
||||||
}, {
|
|
||||||
})
|
|
||||||
|
|
||||||
export default Preset
|
|
|
@ -1,35 +0,0 @@
|
||||||
import bookshelf from '../bookshelf.mjs'
|
|
||||||
import Graphic from '../graphic/model.mjs'
|
|
||||||
|
|
||||||
/* Schedule model:
|
|
||||||
{
|
|
||||||
id,
|
|
||||||
graphic_id,
|
|
||||||
values,
|
|
||||||
sort,
|
|
||||||
is_deleted,
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
const Schedule = bookshelf.createModel({
|
|
||||||
tableName: 'schedule',
|
|
||||||
|
|
||||||
graphic() {
|
|
||||||
return this.belongsTo(Graphic, 'graphic_id')
|
|
||||||
},
|
|
||||||
|
|
||||||
format(attributes) {
|
|
||||||
attributes.values = JSON.stringify(attributes.values)
|
|
||||||
return attributes
|
|
||||||
},
|
|
||||||
|
|
||||||
parse(attributes) {
|
|
||||||
if (attributes.values) {
|
|
||||||
attributes.values = JSON.parse(attributes.values)
|
|
||||||
}
|
|
||||||
return attributes
|
|
||||||
},
|
|
||||||
}, {
|
|
||||||
})
|
|
||||||
|
|
||||||
export default Schedule
|
|
|
@ -1,11 +1,8 @@
|
||||||
import Schedule from './model.mjs'
|
|
||||||
|
|
||||||
export async function all(ctx) {
|
export async function all(ctx) {
|
||||||
let graphics = ctx.db.get('graphics')
|
let graphics = ctx.db.get('graphics')
|
||||||
let data = ctx.db.get('schedule').forEach(function(s) {
|
let data = ctx.db.get('schedule').forEach(function(s) {
|
||||||
s.graphic = graphics.getById(s.graphic_id).value()
|
s.graphic = graphics.getById(s.graphic_id).value()
|
||||||
}).sortBy('sort').value()
|
}).sortBy('sort').value()
|
||||||
// let data = await Schedule.getAll({ }, ['graphic'], 'sort')
|
|
||||||
|
|
||||||
ctx.io.emit('schedule.all', data)
|
ctx.io.emit('schedule.all', data)
|
||||||
total(ctx)
|
total(ctx)
|
||||||
|
@ -34,21 +31,26 @@ export async function add(ctx, payload) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function patch(ctx, payload) {
|
export async function patch(ctx, payload) {
|
||||||
await Promise.all(payload.map(async item => {
|
let schedule = ctx.db.get('schedule')
|
||||||
let scheduleItem = await Schedule.getSingle(item.id)
|
|
||||||
|
|
||||||
scheduleItem.set({ sort: item.sort })
|
schedule.forEach(function(item) {
|
||||||
|
schedule.updateById(Number(item.id), { sort: item.sort })
|
||||||
|
})
|
||||||
|
|
||||||
await scheduleItem.save()
|
await schedule.write()
|
||||||
}))
|
|
||||||
|
|
||||||
await all(ctx)
|
await all(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function remove(ctx, payload) {
|
export async function remove(ctx, payload) {
|
||||||
let scheduleItem = await Schedule.getSingle(payload.id)
|
let schedule = ctx.db.get('schedule')
|
||||||
|
let schedItem = schedule.removeById(Number(payload.id)).value()
|
||||||
|
await schedule.write()
|
||||||
|
|
||||||
await scheduleItem.destroy()
|
schedItem.deleted_at = new Date().getTime()
|
||||||
|
schedItem.type = 'schedule'
|
||||||
|
|
||||||
|
await ctx.db.get('trash').insert(schedItem).write()
|
||||||
|
|
||||||
await all(ctx)
|
await all(ctx)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
import knex from 'knex'
|
|
||||||
import defaults from './defaults.mjs'
|
|
||||||
import config from './config.mjs'
|
|
||||||
import log from './log.mjs'
|
|
||||||
|
|
||||||
// This is important for setup to run cleanly.
|
|
||||||
let knexConfig = defaults(config.get('knex'), null) // Clone
|
|
||||||
knexConfig.pool = { min: 1, max: 1 }
|
|
||||||
|
|
||||||
let knexSetup = knex(knexConfig)
|
|
||||||
|
|
||||||
export default function setup() {
|
|
||||||
log.info(knexConfig, 'Running database integrity scan.')
|
|
||||||
|
|
||||||
return knexSetup.migrate.latest({
|
|
||||||
directory: './migrations',
|
|
||||||
})
|
|
||||||
.then((result) => {
|
|
||||||
if (result[1].length === 0) {
|
|
||||||
return log.info('Database is up to date')
|
|
||||||
}
|
|
||||||
for (let i = 0; i < result[1].length; i++) {
|
|
||||||
log.info('Applied migration from', result[1][i].substr(result[1][i].lastIndexOf('\\') + 1))
|
|
||||||
}
|
|
||||||
return knexSetup.destroy()
|
|
||||||
})
|
|
||||||
}
|
|
|
@ -1,12 +1,9 @@
|
||||||
import log from './api/log.mjs'
|
import log from './api/log.mjs'
|
||||||
import setup from './api/setup.mjs'
|
|
||||||
|
|
||||||
// Run the database script automatically.
|
// Run the database script automatically.
|
||||||
log.info('Running database integrity scan.')
|
log.info('Starting server.')
|
||||||
|
|
||||||
setup().then(() => {
|
import('./api/server.mjs').catch((error) => {
|
||||||
import('./api/server.mjs')
|
log.error(error, 'Error while starting server')
|
||||||
}).catch((error) => {
|
|
||||||
log.error(error, 'Error while preparing database')
|
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
})
|
})
|
||||||
|
|
12
knexfile.js
12
knexfile.js
|
@ -1,12 +0,0 @@
|
||||||
const _ = require('lodash')
|
|
||||||
const config = require('./config')
|
|
||||||
|
|
||||||
let out = {}
|
|
||||||
|
|
||||||
// This is important for setup to run cleanly.
|
|
||||||
let knexConfig = _.cloneDeep(config.get('knex'))
|
|
||||||
knexConfig.pool = { min: 1, max: 1 }
|
|
||||||
|
|
||||||
out[config.get('NODE_ENV')] = knexConfig
|
|
||||||
|
|
||||||
module.exports = out
|
|
|
@ -1,23 +0,0 @@
|
||||||
/* eslint-disable */
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
exports.up = function(knex, Promise) {
|
|
||||||
return Promise.all([
|
|
||||||
knex.schema.createTable('store', function(table) {
|
|
||||||
table.increments()
|
|
||||||
table.text('name')
|
|
||||||
table.text('value')
|
|
||||||
}).then(() => {
|
|
||||||
return knex('store').insert({
|
|
||||||
name: 'content',
|
|
||||||
value: '{}'
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.down = function(knex, Promise) {
|
|
||||||
return Promise.all([
|
|
||||||
knex.schema.dropTable('store'),
|
|
||||||
]);
|
|
||||||
};
|
|
|
@ -1,29 +0,0 @@
|
||||||
/* eslint-disable */
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
exports.up = function(knex, Promise) {
|
|
||||||
return Promise.all([
|
|
||||||
knex.schema.dropTable('store'),
|
|
||||||
knex.schema.createTable('graphics', function(table) {
|
|
||||||
table.increments()
|
|
||||||
table.text('name')
|
|
||||||
table.text('engine')
|
|
||||||
table.text('settings')
|
|
||||||
table.boolean('is_deleted')
|
|
||||||
}),
|
|
||||||
knex.schema.createTable('presets', function(table) {
|
|
||||||
table.increments()
|
|
||||||
table.integer('graphic_id').references('graphics.id')
|
|
||||||
table.text('values')
|
|
||||||
table.integer('sort')
|
|
||||||
table.boolean('is_deleted')
|
|
||||||
}),
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.down = function(knex, Promise) {
|
|
||||||
return Promise.all([
|
|
||||||
knex.schema.dropTable('graphics'),
|
|
||||||
knex.schema.dropTable('presets'),
|
|
||||||
]);
|
|
||||||
};
|
|
|
@ -1,24 +0,0 @@
|
||||||
/* eslint-disable */
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
exports.up = function(knex, Promise) {
|
|
||||||
return Promise.all([
|
|
||||||
knex.schema.createTable('settings', function(table) {
|
|
||||||
table.increments()
|
|
||||||
table.text('name')
|
|
||||||
table.text('value')
|
|
||||||
table.boolean('is_deleted')
|
|
||||||
}).then(() => {
|
|
||||||
return knex('settings').insert({
|
|
||||||
name: 'casparcg',
|
|
||||||
value: ''
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.down = function(knex, Promise) {
|
|
||||||
return Promise.all([
|
|
||||||
knex.schema.dropTable('settings'),
|
|
||||||
]);
|
|
||||||
};
|
|
|
@ -1,22 +0,0 @@
|
||||||
/* eslint-disable */
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
exports.up = function(knex, Promise) {
|
|
||||||
return Promise.all([
|
|
||||||
knex.schema.createTable('content', function(table) {
|
|
||||||
table.increments()
|
|
||||||
table.text('graphic')
|
|
||||||
table.text('name')
|
|
||||||
table.text('html')
|
|
||||||
table.text('css')
|
|
||||||
table.text('data')
|
|
||||||
table.boolean('is_deleted')
|
|
||||||
}),
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.down = function(knex, Promise) {
|
|
||||||
return Promise.all([
|
|
||||||
knex.schema.dropTable('content'),
|
|
||||||
]);
|
|
||||||
};
|
|
|
@ -1,20 +0,0 @@
|
||||||
/* eslint-disable */
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
exports.up = function(knex, Promise) {
|
|
||||||
return Promise.all([
|
|
||||||
knex.schema.createTable('schedule', function(table) {
|
|
||||||
table.increments()
|
|
||||||
table.integer('graphic_id').references('graphics.id')
|
|
||||||
table.text('values')
|
|
||||||
table.integer('sort')
|
|
||||||
table.boolean('is_deleted')
|
|
||||||
}),
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.down = function(knex, Promise) {
|
|
||||||
return Promise.all([
|
|
||||||
knex.schema.dropTable('schedule'),
|
|
||||||
]);
|
|
||||||
};
|
|
2566
package-lock.json
generated
2566
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -34,11 +34,8 @@
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/nfp-projects/caspar-sup#readme",
|
"homepage": "https://github.com/nfp-projects/caspar-sup#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bookshelf": "^0.11.1",
|
|
||||||
"bunyan": "^1.8.12",
|
"bunyan": "^1.8.12",
|
||||||
"casparcg-connection": "4.9.0",
|
"casparcg-connection": "4.9.0",
|
||||||
"ip": "^1.1.5",
|
|
||||||
"knex": "^0.12.9",
|
|
||||||
"koa": "^2.4.1",
|
"koa": "^2.4.1",
|
||||||
"koa-better-serve": "^2.0.7",
|
"koa-better-serve": "^2.0.7",
|
||||||
"koa-socket": "^4.4.0",
|
"koa-socket": "^4.4.0",
|
||||||
|
@ -46,7 +43,6 @@
|
||||||
"lowdb": "^1.0.0",
|
"lowdb": "^1.0.0",
|
||||||
"nconf": "^0.9.1",
|
"nconf": "^0.9.1",
|
||||||
"socket.io": "^2.3.0",
|
"socket.io": "^2.3.0",
|
||||||
"sqlite3": "^4.1.1",
|
|
||||||
"tslib": "^1.11.1"
|
"tslib": "^1.11.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
Loading…
Reference in a new issue