aboutsummaryrefslogtreecommitdiff
path: root/src/api/database
diff options
context:
space:
mode:
authorZephyrrus <[email protected]>2020-07-08 19:22:25 +0300
committerZephyrrus <[email protected]>2020-07-08 19:22:25 +0300
commit6713eca9d4a4887dc8d7416dbdd8ec37de7bb2ed (patch)
treeef79104c0ddaa038baaff36d01f7eb474af8b791 /src/api/database
parentchore: linter the entire project using the new rules (diff)
downloadhost.fuwn.me-6713eca9d4a4887dc8d7416dbdd8ec37de7bb2ed.tar.xz
host.fuwn.me-6713eca9d4a4887dc8d7416dbdd8ec37de7bb2ed.zip
chore: add unique integrity checks to the database for many-to-many tables
Diffstat (limited to 'src/api/database')
-rw-r--r--src/api/database/migrations/20190221225812_initialMigration.js20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/api/database/migrations/20190221225812_initialMigration.js b/src/api/database/migrations/20190221225812_initialMigration.js
index dd18ee5..b755a33 100644
--- a/src/api/database/migrations/20190221225812_initialMigration.js
+++ b/src/api/database/migrations/20190221225812_initialMigration.js
@@ -1,11 +1,11 @@
exports.up = async (knex) => {
await knex.schema.createTable('users', (table) => {
table.increments();
- table.string('username');
+ table.string('username').unique();
table.text('password');
table.boolean('enabled');
table.boolean('isAdmin');
- table.string('apiKey');
+ table.string('apiKey').unique();
table.timestamp('passwordEditedAt');
table.timestamp('apiKeyEditedAt');
table.timestamp('createdAt');
@@ -16,10 +16,12 @@ exports.up = async (knex) => {
table.increments();
table.integer('userId');
table.string('name');
- table.boolean('nsfw');
+ table.boolean('nsfw').defaultTo(false);
table.timestamp('zippedAt');
table.timestamp('createdAt');
table.timestamp('editedAt');
+
+ table.unique(['userId', 'name']);
});
await knex.schema.createTable('files', (table) => {
@@ -29,7 +31,7 @@ exports.up = async (knex) => {
table.string('original');
table.string('type');
table.integer('size');
- table.boolean('nsfw');
+ table.boolean('nsfw').defaultTo(false);
table.string('hash');
table.string('ip');
table.timestamp('createdAt');
@@ -47,18 +49,22 @@ exports.up = async (knex) => {
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');
+ table.integer('linkId').unique();
});
await knex.schema.createTable('tags', (table) => {
@@ -68,12 +74,16 @@ exports.up = async (knex) => {
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) => {