106 lines
2.8 KiB
JavaScript
106 lines
2.8 KiB
JavaScript
exports.up = async knex => {
|
|
await knex.schema.createTable('users', table => {
|
|
table.increments();
|
|
table.string('username').unique();
|
|
table.text('password');
|
|
table.boolean('enabled');
|
|
table.boolean('isAdmin');
|
|
table.string('apiKey').unique();
|
|
table.timestamp('passwordEditedAt');
|
|
table.timestamp('apiKeyEditedAt');
|
|
table.timestamp('createdAt');
|
|
table.timestamp('editedAt');
|
|
});
|
|
|
|
await knex.schema.createTable('albums', table => {
|
|
table.increments();
|
|
table.integer('userId');
|
|
table.string('name');
|
|
table.boolean('nsfw').defaultTo(false);
|
|
table.timestamp('zippedAt');
|
|
table.timestamp('createdAt');
|
|
table.timestamp('editedAt');
|
|
|
|
table.unique(['userId', 'name']);
|
|
});
|
|
|
|
await knex.schema.createTable('files', table => {
|
|
table.increments();
|
|
table.integer('userId');
|
|
table.string('name');
|
|
table.string('original');
|
|
table.string('type');
|
|
table.integer('size');
|
|
table.boolean('nsfw').defaultTo(false);
|
|
table.string('hash');
|
|
table.string('ip');
|
|
table.timestamp('createdAt');
|
|
table.timestamp('editedAt');
|
|
});
|
|
|
|
await knex.schema.createTable('links', table => {
|
|
table.increments();
|
|
table.integer('userId');
|
|
table.integer('albumId');
|
|
table.string('identifier');
|
|
table.integer('views');
|
|
table.boolean('enabled');
|
|
table.boolean('enableDownload');
|
|
table.timestamp('expiresAt');
|
|
table.timestamp('createdAt');
|
|
table.timestamp('editedAt');
|
|
|
|
table.unique(['userId', 'albumId', 'identifier']);
|
|
});
|
|
|
|
await knex.schema.createTable('albumsFiles', table => {
|
|
table.increments();
|
|
table.integer('albumId');
|
|
table.integer('fileId');
|
|
|
|
table.unique(['albumId', 'fileId']);
|
|
});
|
|
|
|
await knex.schema.createTable('albumsLinks', table => {
|
|
table.increments();
|
|
table.integer('albumId');
|
|
table.integer('linkId').unique();
|
|
});
|
|
|
|
await knex.schema.createTable('tags', table => {
|
|
table.increments();
|
|
table.string('uuid');
|
|
table.integer('userId');
|
|
table.string('name');
|
|
table.timestamp('createdAt');
|
|
table.timestamp('editedAt');
|
|
|
|
table.unique(['userId', 'name']);
|
|
});
|
|
|
|
await knex.schema.createTable('fileTags', table => {
|
|
table.increments();
|
|
table.integer('fileId');
|
|
table.integer('tagId');
|
|
|
|
table.unique(['fileId', 'tagId']);
|
|
});
|
|
|
|
await knex.schema.createTable('bans', table => {
|
|
table.increments();
|
|
table.string('ip');
|
|
table.timestamp('createdAt');
|
|
});
|
|
};
|
|
exports.down = async knex => {
|
|
await knex.schema.dropTableIfExists('users');
|
|
await knex.schema.dropTableIfExists('albums');
|
|
await knex.schema.dropTableIfExists('files');
|
|
await knex.schema.dropTableIfExists('links');
|
|
await knex.schema.dropTableIfExists('albumsFiles');
|
|
await knex.schema.dropTableIfExists('albumsLinks');
|
|
await knex.schema.dropTableIfExists('tags');
|
|
await knex.schema.dropTableIfExists('fileTags');
|
|
await knex.schema.dropTableIfExists('bans');
|
|
};
|