traxxx/migrations/20190325001339_releases.js

142 lines
3.9 KiB
JavaScript
Raw Normal View History

'use strict';
exports.up = knex => Promise.resolve()
.then(() => knex.schema.createTable('actors', (table) => {
table.increments('id', 8);
table.string('name')
.unique()
.notNullable();
table.string('gender', 18);
table.integer('alias_for', 8)
.references('id')
.inTable('actors');
}))
.then(() => knex.schema.createTable('directors', (table) => {
table.increments('id', 8);
table.string('name');
table.integer('alias_for', 8)
.references('id')
.inTable('directors');
}))
.then(() => knex.schema.createTable('tags_groups', (table) => {
table.string('group', 20)
.primary();
table.string('name', 32);
}))
.then(() => knex.schema.createTable('tags', (table) => {
table.string('tag', 32)
.primary();
table.integer('capitalization', 1)
.defaultTo(0);
table.string('group_id', 20)
.references('group')
.inTable('tags_groups');
table.string('alias_for', 32)
.references('tag')
.inTable('tags');
}))
.then(() => knex.schema.createTable('networks', (table) => {
table.string('id', 32)
.primary();
table.string('name');
table.string('url');
table.text('description');
}))
.then(() => knex.schema.createTable('sites', (table) => {
table.string('id', 32)
.primary();
table.string('network_id', 32)
.notNullable()
.references('id')
.inTable('networks');
table.string('name');
table.string('url');
table.text('description');
table.string('parameters');
}))
.then(() => knex.schema.createTable('releases', (table) => {
table.increments('id', 12);
table.string('site_id', 32)
.notNullable()
.references('id')
.inTable('sites');
table.string('shoot_id');
table.string('entry_id');
table.unique(['site_id', 'shoot_id']);
table.unique(['site_id', 'entry_id']);
table.string('url');
table.string('title');
table.date('date');
table.text('description');
table.integer('director', 8)
.references('id')
.inTable('directors');
table.integer('duration')
.unsigned();
table.integer('likes')
.unsigned();
table.integer('dislikes')
.unsigned();
table.integer('rating')
.unsigned();
table.datetime('created_at')
.defaultTo(knex.fn.now());
}))
.then(() => knex.schema.createTable('actors_associated', (table) => {
table.increments('id', 16);
table.integer('release_id', 12)
.notNullable()
.references('id')
.inTable('releases');
table.integer('actor_id', 8)
.notNullable()
.references('id')
.inTable('actors');
}))
.then(() => knex.schema.createTable('tags_associated', (table) => {
table.string('tag_id', 20)
.notNullable()
.references('tag')
.inTable('tags');
table.string('site_id')
.references('id')
.inTable('sites');
table.integer('release_id', 12)
.references('id')
.inTable('releases');
}));
exports.down = knex => Promise.resolve()
.then(() => knex.schema.dropTable('tags_associated'))
.then(() => knex.schema.dropTable('actors_associated'))
.then(() => knex.schema.dropTable('tags'))
.then(() => knex.schema.dropTable('tags_groups'))
.then(() => knex.schema.dropTable('actors'))
.then(() => knex.schema.dropTable('releases'))
.then(() => knex.schema.dropTable('sites'))
.then(() => knex.schema.dropTable('directors'))
.then(() => knex.schema.dropTable('networks'));