'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'); table.integer('photos', 3) .defaultTo(0); })) .then(() => knex.schema.createTable('directors', (table) => { table.increments('id', 8); table.string('name'); table.integer('alias_for', 8) .references('id') .inTable('directors'); table.integer('photos', 3) .defaultTo(0); })) .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('photos', 3) .defaultTo(0); 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('directors_associated', (table) => { table.increments('id', 16); table.integer('release_id', 12) .notNullable() .references('id') .inTable('releases'); table.integer('director_id', 8) .notNullable() .references('id') .inTable('directors'); })) .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('directors_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'));