forked from DebaucheryLibrarian/traxxx
88 lines
1.7 KiB
JavaScript
88 lines
1.7 KiB
JavaScript
exports.up = async (knex) => {
|
|
await knex.schema.createTable('scenes_revisions', (table) => {
|
|
table.increments('id');
|
|
|
|
table.integer('scene_id')
|
|
.notNullable()
|
|
.references('id')
|
|
.inTable('releases')
|
|
.onDelete('set null');
|
|
|
|
table.integer('user_id')
|
|
.references('id')
|
|
.inTable('users')
|
|
.onDelete('set null');
|
|
|
|
table.json('base')
|
|
.notNullable();
|
|
|
|
table.json('deltas')
|
|
.notNullable();
|
|
|
|
table.text('hash')
|
|
.notNullable();
|
|
|
|
table.text('comment');
|
|
|
|
table.boolean('approved');
|
|
|
|
table.integer('reviewed_by')
|
|
.references('id')
|
|
.inTable('users')
|
|
.onDelete('set null');
|
|
|
|
table.datetime('reviewed_at');
|
|
table.text('feedback');
|
|
|
|
table.datetime('applied_at');
|
|
|
|
table.datetime('created_at')
|
|
.notNullable()
|
|
.defaultTo(knex.fn.now());
|
|
});
|
|
|
|
await knex.schema.createTable('bans', (table) => {
|
|
table.increments('id');
|
|
|
|
table.integer('user_id')
|
|
.references('id')
|
|
.inTable('users')
|
|
.onDelete('set null');
|
|
|
|
table.string('username');
|
|
table.specificType('ip', 'cidr');
|
|
|
|
table.boolean('match_all')
|
|
.notNullable()
|
|
.defaultTo(false);
|
|
|
|
table.string('scope');
|
|
table.boolean('shadow');
|
|
|
|
table.integer('banned_by')
|
|
.references('id')
|
|
.inTable('users')
|
|
.onDelete('set null');
|
|
|
|
table.datetime('expires_at')
|
|
.notNullable();
|
|
|
|
table.datetime('created_at')
|
|
.notNullable()
|
|
.defaultTo(knex.fn.now());
|
|
});
|
|
|
|
await knex.schema.alterTable('users', (table) => {
|
|
table.specificType('last_ip', 'cidr');
|
|
});
|
|
};
|
|
|
|
exports.down = async (knex) => {
|
|
await knex.schema.dropTable('scenes_revisions');
|
|
await knex.schema.dropTable('bans');
|
|
|
|
await knex.schema.alterTable('users', (table) => {
|
|
table.dropColumn('last_ip');
|
|
});
|
|
};
|