chore: Move to Typescript (#2783)

This PR moves the entire project to Typescript. Due to the ~1000 ignores this will lead to a messy codebase for a while, but the churn is worth it – all of those ignore comments are places that were never type-safe previously.

closes #1282
This commit is contained in:
Tom Moor
2021-11-29 06:40:55 -08:00
committed by GitHub
parent 25ccfb5d04
commit 15b1069bcc
1017 changed files with 17410 additions and 54942 deletions

View File

@@ -1,179 +1,175 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('teams', {
await queryInterface.createTable("teams", {
id: {
type: 'UUID',
type: "UUID",
allowNull: false,
primaryKey: true,
},
name: {
type: 'CHARACTER VARYING',
type: "CHARACTER VARYING",
allowNull: true,
},
slackId: {
type: 'CHARACTER VARYING',
type: "CHARACTER VARYING",
allowNull: true,
unique: true,
},
slackData: {
type: 'JSONB',
type: "JSONB",
allowNull: true,
},
createdAt: {
type: 'TIMESTAMP WITH TIME ZONE',
type: "TIMESTAMP WITH TIME ZONE",
allowNull: false,
},
updatedAt: {
type: 'TIMESTAMP WITH TIME ZONE',
type: "TIMESTAMP WITH TIME ZONE",
allowNull: false,
},
});
await queryInterface.createTable('atlases', {
await queryInterface.createTable("atlases", {
id: {
type: 'UUID',
type: "UUID",
allowNull: false,
primaryKey: true,
},
name: {
type: 'CHARACTER VARYING',
type: "CHARACTER VARYING",
allowNull: true,
},
description: {
type: 'CHARACTER VARYING',
type: "CHARACTER VARYING",
allowNull: true,
},
type: {
type: 'CHARACTER VARYING',
type: "CHARACTER VARYING",
allowNull: true,
},
navigationTree: {
type: 'JSONB',
type: "JSONB",
allowNull: true,
},
createdAt: {
type: 'TIMESTAMP WITH TIME ZONE',
type: "TIMESTAMP WITH TIME ZONE",
allowNull: false,
},
updatedAt: {
type: 'TIMESTAMP WITH TIME ZONE',
type: "TIMESTAMP WITH TIME ZONE",
allowNull: false,
},
teamId: {
type: 'UUID',
allowNull: false
type: "UUID",
allowNull: false,
},
});
await queryInterface.createTable('users', {
await queryInterface.createTable("users", {
id: {
type: 'UUID',
type: "UUID",
allowNull: false,
primaryKey: true,
},
email: {
type: 'CHARACTER VARYING',
type: "CHARACTER VARYING",
allowNull: false,
},
username: {
type: 'CHARACTER VARYING',
type: "CHARACTER VARYING",
allowNull: false,
},
name: {
type: 'CHARACTER VARYING',
type: "CHARACTER VARYING",
allowNull: false,
},
isAdmin: {
type: 'BOOLEAN',
type: "BOOLEAN",
allowNull: true,
defaultValue: false,
},
slackAccessToken: {
type: 'bytea',
type: "bytea",
allowNull: true,
},
slackId: {
type: 'CHARACTER VARYING',
type: "CHARACTER VARYING",
unique: true,
allowNull: false,
},
slackData: {
type: 'JSONB',
type: "JSONB",
allowNull: true,
},
jwtSecret: {
type: 'bytea',
type: "bytea",
allowNull: true,
},
createdAt: {
type: 'TIMESTAMP WITH TIME ZONE',
type: "TIMESTAMP WITH TIME ZONE",
allowNull: false,
},
updatedAt: {
type: 'TIMESTAMP WITH TIME ZONE',
type: "TIMESTAMP WITH TIME ZONE",
allowNull: false,
},
teamId: {
type: 'UUID',
allowNull: true
type: "UUID",
allowNull: true,
},
});
await queryInterface.createTable('documents', {
await queryInterface.createTable("documents", {
id: {
type: 'UUID',
type: "UUID",
allowNull: false,
primaryKey: true,
},
urlId: {
type: 'CHARACTER VARYING',
type: "CHARACTER VARYING",
allowNull: false,
unique: true,
},
private: {
type: 'BOOLEAN',
type: "BOOLEAN",
allowNull: false,
defaultValue: true,
},
title: {
type: 'CHARACTER VARYING',
type: "CHARACTER VARYING",
allowNull: false,
},
text: {
type: 'TEXT',
type: "TEXT",
allowNull: true,
},
html: {
type: 'TEXT',
type: "TEXT",
allowNull: true,
},
preview: {
type: 'TEXT',
type: "TEXT",
allowNull: true,
},
createdAt: {
type: 'TIMESTAMP WITH TIME ZONE',
type: "TIMESTAMP WITH TIME ZONE",
allowNull: false,
},
updatedAt: {
type: 'TIMESTAMP WITH TIME ZONE',
type: "TIMESTAMP WITH TIME ZONE",
allowNull: false,
},
userId: {
type: 'UUID',
allowNull: true
type: "UUID",
allowNull: true,
},
atlasId: {
type: 'UUID',
allowNull: true
type: "UUID",
allowNull: true,
},
teamId: {
type: 'UUID',
allowNull: true
type: "UUID",
allowNull: true,
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropAllTables();
},

View File

@@ -1,12 +1,11 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('documents', 'parentDocumentId', {
await queryInterface.addColumn("documents", "parentDocumentId", {
type: Sequelize.UUID,
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('documents', 'parentDocumentId');
await queryInterface.removeColumn("documents", "parentDocumentId");
},
};

View File

@@ -1,27 +1,23 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addIndex('documents', ['urlId']);
await queryInterface.addIndex('documents', ['id', 'atlasId']);
await queryInterface.addIndex('documents', ['id', 'teamId']);
await queryInterface.addIndex('documents', ['parentDocumentId', 'atlasId']);
await queryInterface.addIndex('atlases', ['id', 'teamId']);
await queryInterface.addIndex('teams', ['slackId']);
await queryInterface.addIndex('users', ['slackId']);
await queryInterface.addIndex("documents", ["urlId"]);
await queryInterface.addIndex("documents", ["id", "atlasId"]);
await queryInterface.addIndex("documents", ["id", "teamId"]);
await queryInterface.addIndex("documents", ["parentDocumentId", "atlasId"]);
await queryInterface.addIndex("atlases", ["id", "teamId"]);
await queryInterface.addIndex("teams", ["slackId"]);
await queryInterface.addIndex("users", ["slackId"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeIndex('documents', ['urlId']);
await queryInterface.removeIndex('documents', ['id', 'atlasId']);
await queryInterface.removeIndex('documents', ['id', 'teamId']);
await queryInterface.removeIndex('documents', ['parentDocumentId', 'atlasId']);
await queryInterface.removeIndex('atlases', ['id', 'teamId']);
await queryInterface.removeIndex('teams', ['slackId']);
await queryInterface.removeIndex('users', ['slackId']);
await queryInterface.removeIndex("documents", ["urlId"]);
await queryInterface.removeIndex("documents", ["id", "atlasId"]);
await queryInterface.removeIndex("documents", ["id", "teamId"]);
await queryInterface.removeIndex("documents", [
"parentDocumentId",
"atlasId",
]);
await queryInterface.removeIndex("atlases", ["id", "teamId"]);
await queryInterface.removeIndex("teams", ["slackId"]);
await queryInterface.removeIndex("users", ["slackId"]);
},
};

View File

@@ -1,70 +1,66 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('revisions', {
await queryInterface.createTable("revisions", {
id: {
type: 'UUID',
type: "UUID",
allowNull: false,
primaryKey: true,
},
title: {
type: 'CHARACTER VARYING',
type: "CHARACTER VARYING",
allowNull: false,
},
text: {
type: 'TEXT',
type: "TEXT",
allowNull: true,
},
html: {
type: 'TEXT',
type: "TEXT",
allowNull: true,
},
preview: {
type: 'TEXT',
type: "TEXT",
allowNull: true,
},
createdAt: {
type: 'TIMESTAMP WITH TIME ZONE',
type: "TIMESTAMP WITH TIME ZONE",
allowNull: false,
},
updatedAt: {
type: 'TIMESTAMP WITH TIME ZONE',
type: "TIMESTAMP WITH TIME ZONE",
allowNull: false,
},
userId: {
type: 'UUID',
type: "UUID",
allowNull: false,
references: {
model: 'users',
model: "users",
},
},
documentId: {
type: 'UUID',
type: "UUID",
allowNull: false,
references: {
model: 'documents',
onDelete: 'CASCADE',
model: "documents",
onDelete: "CASCADE",
},
},
});
await queryInterface.addColumn('documents', 'lastModifiedById', {
type: 'UUID',
await queryInterface.addColumn("documents", "lastModifiedById", {
type: "UUID",
allowNull: false,
references: {
model: 'users',
model: "users",
},
});
await queryInterface.addColumn('documents', 'revisionCount', {
type: 'INTEGER',
await queryInterface.addColumn("documents", "revisionCount", {
type: "INTEGER",
defaultValue: 0,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('revisions');
await queryInterface.removeColumn('documents', 'lastModifiedById');
await queryInterface.removeColumn('documents', 'revisionCount');
await queryInterface.dropTable("revisions");
await queryInterface.removeColumn("documents", "lastModifiedById");
await queryInterface.removeColumn("documents", "revisionCount");
},
};

View File

@@ -16,7 +16,6 @@ $$ LANGUAGE plpgsql;
CREATE TRIGGER documents_tsvectorupdate BEFORE INSERT OR UPDATE
ON documents FOR EACH ROW EXECUTE PROCEDURE documents_search_trigger();
`;
const searchCollection = `
ALTER TABLE atlases ADD COLUMN "searchVector" tsvector;
CREATE INDEX atlases_tsv_idx ON atlases USING gin("searchVector");
@@ -33,11 +32,9 @@ $$ LANGUAGE plpgsql;
CREATE TRIGGER atlases_tsvectorupdate BEFORE INSERT OR UPDATE
ON atlases FOR EACH ROW EXECUTE PROCEDURE atlases_search_trigger();
`;
await queryInterface.sequelize.query(searchDocument);
await queryInterface.sequelize.query(searchCollection);
},
down: async (queryInterface, Sequelize) => {
// TODO?
},

View File

@@ -1,12 +1,11 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('atlases', 'creatorId', {
await queryInterface.addColumn("atlases", "creatorId", {
type: Sequelize.UUID,
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('atlases', 'creatorId');
await queryInterface.removeColumn("atlases", "creatorId");
},
};

View File

@@ -1,18 +1,16 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('atlases', 'deletedAt', {
await queryInterface.addColumn("atlases", "deletedAt", {
type: Sequelize.DATE,
allowNull: true,
});
await queryInterface.addColumn('documents', 'deletedAt', {
await queryInterface.addColumn("documents", "deletedAt", {
type: Sequelize.DATE,
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('atlases', 'deletedAt');
await queryInterface.removeColumn('documents', 'deletedAt');
await queryInterface.removeColumn("atlases", "deletedAt");
await queryInterface.removeColumn("documents", "deletedAt");
},
};

View File

@@ -1,47 +1,51 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
// Remove old indeces
await queryInterface.removeIndex('documents', ['urlId']);
await queryInterface.removeIndex('documents', ['id', 'atlasId']);
await queryInterface.removeIndex('documents', ['id', 'teamId']);
await queryInterface.removeIndex('documents', ['parentDocumentId', 'atlasId']);
await queryInterface.removeIndex('atlases', ['id', 'teamId']);
await queryInterface.removeIndex("documents", ["urlId"]);
await queryInterface.removeIndex("documents", ["id", "atlasId"]);
await queryInterface.removeIndex("documents", ["id", "teamId"]);
await queryInterface.removeIndex("documents", [
"parentDocumentId",
"atlasId",
]);
await queryInterface.removeIndex("atlases", ["id", "teamId"]);
// Add new ones
await queryInterface.addIndex('documents', ['id', 'deletedAt']);
await queryInterface.addIndex('documents', ['urlId', 'deletedAt']);
await queryInterface.addIndex('documents', ['id', 'atlasId', 'deletedAt']);
await queryInterface.addIndex('documents', ['id', 'teamId', 'deletedAt']);
await queryInterface.addIndex('documents', [
'parentDocumentId',
'atlasId',
'deletedAt',
await queryInterface.addIndex("documents", ["id", "deletedAt"]);
await queryInterface.addIndex("documents", ["urlId", "deletedAt"]);
await queryInterface.addIndex("documents", ["id", "atlasId", "deletedAt"]);
await queryInterface.addIndex("documents", ["id", "teamId", "deletedAt"]);
await queryInterface.addIndex("documents", [
"parentDocumentId",
"atlasId",
"deletedAt",
]);
await queryInterface.addIndex('atlases', ['id', 'deletedAt']);
await queryInterface.addIndex('atlases', ['id', 'teamId', 'deletedAt']);
await queryInterface.addIndex("atlases", ["id", "deletedAt"]);
await queryInterface.addIndex("atlases", ["id", "teamId", "deletedAt"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.addIndex('documents', ['urlId']);
await queryInterface.addIndex('documents', ['id', 'atlasId']);
await queryInterface.addIndex('documents', ['id', 'teamId']);
await queryInterface.addIndex('documents', ['parentDocumentId', 'atlasId']);
await queryInterface.addIndex('atlases', ['id', 'teamId']);
await queryInterface.removeIndex('documents', ['id', 'deletedAt']);
await queryInterface.removeIndex('documents', ['urlId', 'deletedAt']);
await queryInterface.removeIndex('documents', ['id', 'atlasId', 'deletedAt']);
await queryInterface.removeIndex('documents', ['id', 'teamId', 'deletedAt']);
await queryInterface.removeIndex('documents', [
'parentDocumentId',
'atlasId',
'deletedAt',
await queryInterface.addIndex("documents", ["urlId"]);
await queryInterface.addIndex("documents", ["id", "atlasId"]);
await queryInterface.addIndex("documents", ["id", "teamId"]);
await queryInterface.addIndex("documents", ["parentDocumentId", "atlasId"]);
await queryInterface.addIndex("atlases", ["id", "teamId"]);
await queryInterface.removeIndex("documents", ["id", "deletedAt"]);
await queryInterface.removeIndex("documents", ["urlId", "deletedAt"]);
await queryInterface.removeIndex("documents", [
"id",
"atlasId",
"deletedAt",
]);
await queryInterface.removeIndex('atlases', ['id', 'deletedAt']);
await queryInterface.removeIndex('atlases', ['id', 'teamId', 'deletedAt']);
await queryInterface.removeIndex("documents", [
"id",
"teamId",
"deletedAt",
]);
await queryInterface.removeIndex("documents", [
"parentDocumentId",
"atlasId",
"deletedAt",
]);
await queryInterface.removeIndex("atlases", ["id", "deletedAt"]);
await queryInterface.removeIndex("atlases", ["id", "teamId", "deletedAt"]);
},
};

View File

@@ -1,15 +1,14 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('documents', 'createdById', {
type: 'UUID',
await queryInterface.addColumn("documents", "createdById", {
type: "UUID",
allowNull: true,
references: {
model: 'users',
model: "users",
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('documents', 'createdById');
await queryInterface.removeColumn("documents", "createdById");
},
};

View File

@@ -1,10 +1,10 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('documents', 'collaboratorIds', {
await queryInterface.addColumn("documents", "collaboratorIds", {
type: Sequelize.ARRAY(Sequelize.UUID),
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('documents', 'collaboratorIds');
await queryInterface.removeColumn("documents", "collaboratorIds");
},
};

View File

@@ -1,12 +1,11 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('atlases', 'urlId', {
await queryInterface.addColumn("atlases", "urlId", {
type: Sequelize.STRING,
unique: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('atlases', 'urlId');
await queryInterface.removeColumn("atlases", "urlId");
},
};

View File

@@ -1,9 +1,8 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addIndex('revisions', ['documentId']);
await queryInterface.addIndex("revisions", ["documentId"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeIndex('revisions', ['documentId']);
await queryInterface.removeIndex("revisions", ["documentId"]);
},
};

View File

@@ -1,40 +1,39 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('apiKeys', {
await queryInterface.createTable("apiKeys", {
id: {
type: 'UUID',
type: "UUID",
allowNull: false,
primaryKey: true,
},
name: {
type: 'CHARACTER VARYING',
type: "CHARACTER VARYING",
allowNull: true,
},
secret: {
type: 'CHARACTER VARYING',
type: "CHARACTER VARYING",
allowNull: false,
unique: true,
},
userId: {
type: 'UUID',
allowNull: true
type: "UUID",
allowNull: true,
},
createdAt: {
type: 'TIMESTAMP WITH TIME ZONE',
type: "TIMESTAMP WITH TIME ZONE",
allowNull: false,
},
updatedAt: {
type: 'TIMESTAMP WITH TIME ZONE',
type: "TIMESTAMP WITH TIME ZONE",
allowNull: false,
},
deletedAt: {
type: 'TIMESTAMP WITH TIME ZONE',
type: "TIMESTAMP WITH TIME ZONE",
allowNull: true,
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('apiKeys');
await queryInterface.dropTable("apiKeys");
},
};

View File

@@ -1,11 +1,10 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addIndex('apiKeys', ['secret', 'deletedAt']);
await queryInterface.addIndex('apiKeys', ['userId', 'deletedAt']);
await queryInterface.addIndex("apiKeys", ["secret", "deletedAt"]);
await queryInterface.addIndex("apiKeys", ["userId", "deletedAt"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeIndex('apiKeys', ['secret', 'deletedAt']);
await queryInterface.removeIndex('apiKeys', ['userId', 'deletedAt']);
await queryInterface.removeIndex("apiKeys", ["secret", "deletedAt"]);
await queryInterface.removeIndex("apiKeys", ["userId", "deletedAt"]);
},
};

View File

@@ -1,24 +1,23 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('users', 'slackId', {
await queryInterface.changeColumn("users", "slackId", {
type: Sequelize.STRING,
unique: false,
allowNull: true,
});
await queryInterface.changeColumn('teams', 'slackId', {
await queryInterface.changeColumn("teams", "slackId", {
type: Sequelize.STRING,
unique: false,
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('users', 'slackId', {
await queryInterface.changeColumn("users", "slackId", {
type: Sequelize.STRING,
unique: true,
allowNull: false,
});
await queryInterface.changeColumn('teams', 'slackId', {
await queryInterface.changeColumn("teams", "slackId", {
type: Sequelize.STRING,
unique: true,
allowNull: false,

View File

@@ -1,25 +1,23 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('users', 'email', {
await queryInterface.changeColumn("users", "email", {
type: Sequelize.STRING,
unique: true,
allowNull: false,
});
await queryInterface.changeColumn('users', 'username', {
await queryInterface.changeColumn("users", "username", {
type: Sequelize.STRING,
unique: true,
allowNull: false,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('users', 'email', {
await queryInterface.changeColumn("users", "email", {
type: Sequelize.STRING,
unique: false,
allowNull: true,
});
await queryInterface.changeColumn('users', 'username', {
await queryInterface.changeColumn("users", "username", {
type: Sequelize.STRING,
unique: false,
allowNull: true,

View File

@@ -1,12 +1,11 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('users', 'passwordDigest', {
await queryInterface.addColumn("users", "passwordDigest", {
type: Sequelize.STRING,
allowNull: true,
});
},
down: async (queryInterface, _Sequelize) => {
await queryInterface.removeColumn('users', 'passwordDigest');
await queryInterface.removeColumn("users", "passwordDigest");
},
};

View File

@@ -1,14 +1,13 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.renameTable('atlases', 'collections');
await queryInterface.addColumn('collections', 'documentStructure', {
await queryInterface.renameTable("atlases", "collections");
await queryInterface.addColumn("collections", "documentStructure", {
type: Sequelize.JSONB,
allowNull: true,
});
},
down: async (queryInterface, _Sequelize) => {
await queryInterface.renameTable('collections', 'atlases');
await queryInterface.removeColumn('atlases', 'documentStructure');
await queryInterface.renameTable("collections", "atlases");
await queryInterface.removeColumn("atlases", "documentStructure");
},
};

View File

@@ -1,41 +1,39 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface
.createTable('views', {
id: {
type: Sequelize.UUID,
allowNull: false,
primaryKey: true,
},
documentId: {
type: Sequelize.UUID,
allowNull: false,
},
userId: {
type: Sequelize.UUID,
allowNull: false,
},
count: {
type: Sequelize.INTEGER,
allowNull: false,
defaultValue: 1,
},
createdAt: {
type: Sequelize.DATE,
allowNull: false,
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false,
},
});
await queryInterface.addIndex('views', ['documentId', 'userId'], {
indicesType: 'UNIQUE',
});
await queryInterface.createTable("views", {
id: {
type: Sequelize.UUID,
allowNull: false,
primaryKey: true,
},
documentId: {
type: Sequelize.UUID,
allowNull: false,
},
userId: {
type: Sequelize.UUID,
allowNull: false,
},
count: {
type: Sequelize.INTEGER,
allowNull: false,
defaultValue: 1,
},
createdAt: {
type: Sequelize.DATE,
allowNull: false,
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false,
},
});
await queryInterface.addIndex("views", ["documentId", "userId"], {
indicesType: "UNIQUE",
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeIndex('views', ['documentId', 'userId']);
await queryInterface.dropTable('views');
await queryInterface.removeIndex("views", ["documentId", "userId"]);
await queryInterface.dropTable("views");
},
};

View File

@@ -1,36 +1,34 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface
.createTable('stars', {
id: {
type: Sequelize.UUID,
allowNull: false,
primaryKey: true,
},
documentId: {
type: Sequelize.UUID,
allowNull: false,
},
userId: {
type: Sequelize.UUID,
allowNull: false,
},
createdAt: {
type: Sequelize.DATE,
allowNull: false,
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false,
},
});
await queryInterface.addIndex('stars', ['documentId', 'userId'], {
indicesType: 'UNIQUE',
await queryInterface.createTable("stars", {
id: {
type: Sequelize.UUID,
allowNull: false,
primaryKey: true,
},
documentId: {
type: Sequelize.UUID,
allowNull: false,
},
userId: {
type: Sequelize.UUID,
allowNull: false,
},
createdAt: {
type: Sequelize.DATE,
allowNull: false,
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false,
},
});
await queryInterface.addIndex("stars", ["documentId", "userId"], {
indicesType: "UNIQUE",
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeIndex('stars', ['documentId', 'userId']);
await queryInterface.dropTable('stars');
await queryInterface.removeIndex("stars", ["documentId", "userId"]);
await queryInterface.dropTable("stars");
},
};

View File

@@ -1,16 +1,15 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.removeConstraint('users', 'users_email_key', {})
await queryInterface.removeConstraint('users', 'users_username_key', {})
await queryInterface.removeConstraint("users", "users_email_key", {});
await queryInterface.removeConstraint("users", "users_username_key", {});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('users', 'email', {
await queryInterface.changeColumn("users", "email", {
type: Sequelize.STRING,
unique: true,
allowNull: false,
});
await queryInterface.changeColumn('users', 'username', {
await queryInterface.changeColumn("users", "username", {
type: Sequelize.STRING,
unique: true,
allowNull: false,

View File

@@ -1,13 +1,12 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('users', 'slackId', {
await queryInterface.changeColumn("users", "slackId", {
type: Sequelize.STRING,
unique: true,
allowNull: false,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeConstraint('users', 'users_slack_id_idx');
await queryInterface.removeConstraint("users", "users_slack_id_idx");
},
};

View File

@@ -1,12 +1,11 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('documents', 'emoji', {
await queryInterface.addColumn("documents", "emoji", {
type: Sequelize.STRING,
allowNull: true,
});
},
down: async (queryInterface, _Sequelize) => {
await queryInterface.removeColumn('documents', 'emoji');
await queryInterface.removeColumn("documents", "emoji");
},
};

View File

@@ -1,56 +1,55 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('documents', 'atlasId', {
await queryInterface.changeColumn("documents", "atlasId", {
type: Sequelize.UUID,
allowNull: true,
onDelete: 'cascade',
onDelete: "cascade",
references: {
model: 'collections',
model: "collections",
},
});
await queryInterface.changeColumn('documents', 'userId', {
await queryInterface.changeColumn("documents", "userId", {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'users',
model: "users",
},
});
await queryInterface.changeColumn('documents', 'parentDocumentId', {
await queryInterface.changeColumn("documents", "parentDocumentId", {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'documents',
model: "documents",
},
});
await queryInterface.changeColumn('documents', 'teamId', {
await queryInterface.changeColumn("documents", "teamId", {
type: Sequelize.UUID,
allowNull: true,
onDelete: 'cascade',
onDelete: "cascade",
references: {
model: 'teams',
model: "teams",
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.sequelize.query(
'ALTER TABLE documents DROP CONSTRAINT "atlasId_foreign_idx";'
);
await queryInterface.removeIndex('documents', 'atlasId_foreign_idx');
await queryInterface.removeIndex("documents", "atlasId_foreign_idx");
await queryInterface.sequelize.query(
'ALTER TABLE documents DROP CONSTRAINT "userId_foreign_idx";'
);
await queryInterface.removeIndex('documents', 'userId_foreign_idx');
await queryInterface.removeIndex("documents", "userId_foreign_idx");
await queryInterface.sequelize.query(
'ALTER TABLE documents DROP CONSTRAINT "parentDocumentId_foreign_idx";'
);
await queryInterface.removeIndex(
'documents',
'parentDocumentId_foreign_idx'
"documents",
"parentDocumentId_foreign_idx"
);
await queryInterface.sequelize.query(
'ALTER TABLE documents DROP CONSTRAINT "teamId_foreign_idx";'
);
await queryInterface.removeIndex('documents', 'teamId_foreign_idx');
await queryInterface.removeIndex("documents", "teamId_foreign_idx");
},
};

View File

@@ -1,13 +1,12 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('users', 'username', {
await queryInterface.changeColumn("users", "username", {
type: Sequelize.STRING,
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('users', 'username', {
await queryInterface.changeColumn("users", "username", {
type: Sequelize.STRING,
allowNull: false,
});

View File

@@ -1,6 +1,6 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('events', {
await queryInterface.createTable("events", {
id: {
type: Sequelize.UUID,
allowNull: false,
@@ -18,21 +18,21 @@ module.exports = {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'users',
model: "users",
},
},
collectionId: {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'collections',
model: "collections",
},
},
teamId: {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'teams',
model: "teams",
},
},
createdAt: {
@@ -45,8 +45,7 @@ module.exports = {
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('events');
await queryInterface.dropTable("events");
},
};

View File

@@ -1,10 +1,9 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('collections', 'navigationTree');
await queryInterface.removeColumn("collections", "navigationTree");
},
down: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('collections', 'navigationTree', {
await queryInterface.addColumn("collections", "navigationTree", {
type: Sequelize.JSONB,
allowNull: true,
});

View File

@@ -1,22 +1,21 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('documents', 'html');
await queryInterface.removeColumn('documents', 'preview');
await queryInterface.removeColumn('revisions', 'html');
await queryInterface.removeColumn('revisions', 'preview');
await queryInterface.removeColumn("documents", "html");
await queryInterface.removeColumn("documents", "preview");
await queryInterface.removeColumn("revisions", "html");
await queryInterface.removeColumn("revisions", "preview");
},
down: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('documents', 'html', {
await queryInterface.addColumn("documents", "html", {
type: Sequelize.TEXT,
});
await queryInterface.addColumn('documents', 'preview', {
await queryInterface.addColumn("documents", "preview", {
type: Sequelize.TEXT,
});
await queryInterface.addColumn('revisions', 'html', {
await queryInterface.addColumn("revisions", "html", {
type: Sequelize.TEXT,
});
await queryInterface.addColumn('revisions', 'preview', {
await queryInterface.addColumn("revisions", "preview", {
type: Sequelize.TEXT,
});
},

View File

@@ -1,12 +1,11 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('users', 'avatarUrl', {
await queryInterface.addColumn("users", "avatarUrl", {
type: Sequelize.TEXT,
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('users', 'avatarUrl');
await queryInterface.removeColumn("users", "avatarUrl");
},
};

View File

@@ -1,11 +1,10 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('collections', 'color', {
await queryInterface.addColumn("collections", "color", {
type: Sequelize.TEXT,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('collections', 'color');
await queryInterface.removeColumn("collections", "color");
},
};

View File

@@ -1,6 +1,6 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('authentications', {
await queryInterface.createTable("authentications", {
id: {
type: Sequelize.UUID,
allowNull: false,
@@ -10,14 +10,14 @@ module.exports = {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'users',
model: "users",
},
},
teamId: {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'teams',
model: "teams",
},
},
serviceId: {
@@ -42,8 +42,7 @@ module.exports = {
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('authentications');
await queryInterface.dropTable("authentications");
},
};

View File

@@ -1,9 +1,13 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
const [teams, metaData] = await queryInterface.sequelize.query(`SELECT * FROM teams`);
const teamIds = teams.map(team => team.id);
await Promise.all(teamIds.map(async teamId => {
await queryInterface.sequelize.query(`
const [teams, metaData] = await queryInterface.sequelize.query(
`SELECT * FROM teams`
);
const teamIds = teams.map((team) => team.id);
await Promise.all(
teamIds.map(async (teamId) => {
await queryInterface.sequelize.query(`
update users
set "isAdmin" = true
where id in (
@@ -14,9 +18,9 @@ module.exports = {
limit 1
);
`);
}));
})
);
},
down: async (queryInterface, Sequelize) => {
// no-op
},

View File

@@ -1,27 +1,35 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('documents', 'publishedAt', {
await queryInterface.addColumn("documents", "publishedAt", {
type: Sequelize.DATE,
allowNull: true,
});
const [documents, metaData] = await queryInterface.sequelize.query(
`SELECT * FROM documents`
);
const [documents, metaData] = await queryInterface.sequelize.query(`SELECT * FROM documents`);
for (const document of documents) {
await queryInterface.sequelize.query(`
update documents
set "publishedAt" = '${new Date(document.createdAt).toISOString()}'
where id = '${document.id}'
`)
`);
}
await queryInterface.removeIndex('documents', ['id', 'atlasId']);
await queryInterface.addIndex('documents', ['id', 'atlasId', 'publishedAt']);
await queryInterface.removeIndex("documents", ["id", "atlasId"]);
await queryInterface.addIndex("documents", [
"id",
"atlasId",
"publishedAt",
]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('documents', 'publishedAt');
await queryInterface.removeIndex('documents', ['id', 'atlasId', 'publishedAt']);
await queryInterface.addIndex('documents', ['id', 'atlasId']);
}
await queryInterface.removeColumn("documents", "publishedAt");
await queryInterface.removeIndex("documents", [
"id",
"atlasId",
"publishedAt",
]);
await queryInterface.addIndex("documents", ["id", "atlasId"]);
},
};

View File

@@ -1,6 +1,6 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('integrations', {
await queryInterface.createTable("integrations", {
id: {
type: Sequelize.UUID,
allowNull: false,
@@ -14,14 +14,14 @@ module.exports = {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'users',
model: "users",
},
},
teamId: {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'teams',
model: "teams",
},
},
serviceId: {
@@ -32,14 +32,14 @@ module.exports = {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'collections',
model: "collections",
},
},
authenticationId: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'authentications',
model: "authentications",
},
},
events: {
@@ -60,8 +60,7 @@ module.exports = {
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('integrations');
await queryInterface.dropTable("integrations");
},
};

View File

@@ -1,13 +1,12 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('documents', 'pinnedById', {
await queryInterface.addColumn("documents", "pinnedById", {
type: Sequelize.UUID,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('documents', 'pinnedById');
}
await queryInterface.removeColumn("documents", "pinnedById");
},
};

View File

@@ -1,22 +1,19 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('users', 'suspendedById', {
await queryInterface.addColumn("users", "suspendedById", {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'users',
model: "users",
},
});
await queryInterface.addColumn('users', 'suspendedAt', {
await queryInterface.addColumn("users", "suspendedAt", {
type: Sequelize.DATE,
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('users', 'suspendedById');
await queryInterface.removeColumn('users', 'suspendedAt');
}
await queryInterface.removeColumn("users", "suspendedById");
await queryInterface.removeColumn("users", "suspendedAt");
},
};

View File

@@ -3,24 +3,31 @@ module.exports = {
// upgrade to slate-md-serializer 3.0 means that newlines saved in Markdown are now
// accurately reflected in the editor. To prevent a change in appearance in current docs
// we need to collapse existing multiple newlines in the db.
const [documents, metaData] = await queryInterface.sequelize.query(`SELECT * FROM documents`);
const [documents, metaData] = await queryInterface.sequelize.query(
`SELECT * FROM documents`
);
for (const document of documents) {
const id = document.id;
const fixedText = document.text.replace(/\n{2,}/gi, "\n\n");
if (fixedText === document.text) continue;
// raw query to avoid hooks
await queryInterface.sequelize.query(`
await queryInterface.sequelize.query(
`
update documents
set "text" = :fixedText
where id = :id
`, { replacements: { fixedText, id } })
`,
{
replacements: {
fixedText,
id,
},
}
);
}
},
down: async (queryInterface, Sequelize) => {
// cannot be reversed
}
},
};

View File

@@ -1,6 +1,6 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('shares', {
await queryInterface.createTable("shares", {
id: {
type: Sequelize.UUID,
allowNull: false,
@@ -10,21 +10,21 @@ module.exports = {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'users',
model: "users",
},
},
teamId: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'teams',
model: "teams",
},
},
documentId: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'documents',
model: "documents",
},
},
createdAt: {
@@ -37,8 +37,7 @@ module.exports = {
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('shares');
await queryInterface.dropTable("shares");
},
};

View File

@@ -1,27 +1,27 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('teams', 'googleId', {
await queryInterface.addColumn("teams", "googleId", {
type: Sequelize.STRING,
allowNull: true,
unique: true
unique: true,
});
await queryInterface.addColumn('teams', 'avatarUrl', {
await queryInterface.addColumn("teams", "avatarUrl", {
type: Sequelize.STRING,
allowNull: true,
});
await queryInterface.addColumn('users', 'service', {
await queryInterface.addColumn("users", "service", {
type: Sequelize.STRING,
allowNull: true,
defaultValue: 'slack'
defaultValue: "slack",
});
await queryInterface.renameColumn('users', 'slackId', 'serviceId');
await queryInterface.addIndex('teams', ['googleId']);
await queryInterface.renameColumn("users", "slackId", "serviceId");
await queryInterface.addIndex("teams", ["googleId"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('teams', 'googleId');
await queryInterface.removeColumn('teams', 'avatarUrl');
await queryInterface.removeColumn('users', 'service');
await queryInterface.renameColumn('users', 'serviceId', 'slackId');
await queryInterface.removeIndex('teams', ['googleId']);
}
}
await queryInterface.removeColumn("teams", "googleId");
await queryInterface.removeColumn("teams", "avatarUrl");
await queryInterface.removeColumn("users", "service");
await queryInterface.renameColumn("users", "serviceId", "slackId");
await queryInterface.removeIndex("teams", ["googleId"]);
},
};

View File

@@ -1,10 +1,18 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.renameColumn('authentications', 'serviceId', 'service');
await queryInterface.renameColumn('integrations', 'serviceId', 'service');
await queryInterface.renameColumn(
"authentications",
"serviceId",
"service"
);
await queryInterface.renameColumn("integrations", "serviceId", "service");
},
down: async (queryInterface, Sequelize) => {
await queryInterface.renameColumn('authentications', 'service', 'serviceId');
await queryInterface.renameColumn('integrations', 'service', 'serviceId');
}
}
await queryInterface.renameColumn(
"authentications",
"service",
"serviceId"
);
await queryInterface.renameColumn("integrations", "service", "serviceId");
},
};

View File

@@ -1,26 +1,26 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('users', 'lastActiveAt', {
await queryInterface.addColumn("users", "lastActiveAt", {
type: Sequelize.DATE,
allowNull: true
allowNull: true,
});
await queryInterface.addColumn('users', 'lastActiveIp', {
await queryInterface.addColumn("users", "lastActiveIp", {
type: Sequelize.STRING,
allowNull: true
allowNull: true,
});
await queryInterface.addColumn('users', 'lastSignedInAt', {
await queryInterface.addColumn("users", "lastSignedInAt", {
type: Sequelize.DATE,
allowNull: true
allowNull: true,
});
await queryInterface.addColumn('users', 'lastSignedInIp', {
await queryInterface.addColumn("users", "lastSignedInIp", {
type: Sequelize.STRING,
allowNull: true
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('users', 'lastActiveAt');
await queryInterface.removeColumn('users', 'lastActiveIp');
await queryInterface.removeColumn('users', 'lastSignedInAt');
await queryInterface.removeColumn('users', 'lastSignedInIp');
}
}
await queryInterface.removeColumn("users", "lastActiveAt");
await queryInterface.removeColumn("users", "lastActiveIp");
await queryInterface.removeColumn("users", "lastSignedInAt");
await queryInterface.removeColumn("users", "lastSignedInIp");
},
};

View File

@@ -1,19 +1,19 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('shares', 'revokedAt', {
await queryInterface.addColumn("shares", "revokedAt", {
type: Sequelize.DATE,
allowNull: true
allowNull: true,
});
await queryInterface.addColumn('shares', 'revokedById', {
await queryInterface.addColumn("shares", "revokedById", {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'users',
model: "users",
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('shares', 'revokedAt');
await queryInterface.removeColumn('shares', 'revokedById');
}
}
await queryInterface.removeColumn("shares", "revokedAt");
await queryInterface.removeColumn("shares", "revokedById");
},
};

View File

@@ -1,16 +1,16 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('users', 'deletedAt', {
await queryInterface.addColumn("users", "deletedAt", {
type: Sequelize.DATE,
allowNull: true
allowNull: true,
});
await queryInterface.addColumn('teams', 'deletedAt', {
await queryInterface.addColumn("teams", "deletedAt", {
type: Sequelize.DATE,
allowNull: true
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('users', 'deletedAt');
await queryInterface.removeColumn('teams', 'deletedAt');
}
}
await queryInterface.removeColumn("users", "deletedAt");
await queryInterface.removeColumn("teams", "deletedAt");
},
};

View File

@@ -1,11 +1,11 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('users', 'passwordDigest');
await queryInterface.removeColumn("users", "passwordDigest");
},
down: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('users', 'passwordDigest', {
await queryInterface.addColumn("users", "passwordDigest", {
type: Sequelize.STRING,
allowNull: true,
});
}
}
},
};

View File

@@ -1,14 +1,14 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('users', 'serviceId', {
await queryInterface.changeColumn("users", "serviceId", {
type: Sequelize.STRING,
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('users', 'serviceId', {
await queryInterface.changeColumn("users", "serviceId", {
type: Sequelize.STRING,
allowNull: false,
});
}
}
},
};

View File

@@ -1,19 +1,19 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.renameColumn('documents', 'atlasId', 'collectionId');
await queryInterface.removeColumn('documents', 'private');
await queryInterface.addColumn('events', 'documentId', {
await queryInterface.renameColumn("documents", "atlasId", "collectionId");
await queryInterface.removeColumn("documents", "private");
await queryInterface.addColumn("events", "documentId", {
type: Sequelize.UUID,
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.renameColumn('documents', 'collectionId', 'atlasId');
await queryInterface.removeColumn('events', 'documentId');
await queryInterface.addColumn('documents', 'private', {
await queryInterface.renameColumn("documents", "collectionId", "atlasId");
await queryInterface.removeColumn("events", "documentId");
await queryInterface.addColumn("documents", "private", {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: true,
});
}
}
},
};

View File

@@ -1,12 +1,12 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('teams', 'sharing', {
await queryInterface.addColumn("teams", "sharing", {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: true
defaultValue: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('teams', 'sharing');
}
}
await queryInterface.removeColumn("teams", "sharing");
},
};

View File

@@ -1,14 +1,14 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('teams', 'subdomain', {
await queryInterface.addColumn("teams", "subdomain", {
type: Sequelize.STRING,
allowNull: true,
unique: true
unique: true,
});
await queryInterface.addIndex('teams', ['subdomain']);
await queryInterface.addIndex("teams", ["subdomain"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('teams', 'subdomain');
await queryInterface.removeIndex('teams', ['subdomain']);
}
}
await queryInterface.removeColumn("teams", "subdomain");
await queryInterface.removeIndex("teams", ["subdomain"]);
},
};

View File

@@ -1,6 +1,6 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('notifications', {
await queryInterface.createTable("notifications", {
id: {
type: Sequelize.UUID,
allowNull: false,
@@ -10,28 +10,28 @@ module.exports = {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'users',
model: "users",
},
},
userId: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'users',
model: "users",
},
},
event: {
type: Sequelize.STRING
type: Sequelize.STRING,
},
email: {
type: Sequelize.BOOLEAN
type: Sequelize.BOOLEAN,
},
createdAt: {
type: Sequelize.DATE,
allowNull: false,
}
},
});
await queryInterface.createTable('notification_settings', {
await queryInterface.createTable("notification_settings", {
id: {
type: Sequelize.UUID,
allowNull: false,
@@ -41,34 +41,37 @@ module.exports = {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'users',
model: "users",
},
},
teamId: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'teams',
model: "teams",
},
},
event: {
type: Sequelize.STRING
type: Sequelize.STRING,
},
createdAt: {
type: Sequelize.DATE,
allowNull: false,
}
},
});
await queryInterface.addIndex('notification_settings', ['teamId', 'userId']);
await queryInterface.addIndex('notification_settings', ['event']);
await queryInterface.addIndex("notification_settings", [
"teamId",
"userId",
]);
await queryInterface.addIndex("notification_settings", ["event"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('notifications');
await queryInterface.dropTable('notification_settings');
await queryInterface.removeIndex('notification_settings', ['teamId', 'userId']);
await queryInterface.removeIndex('notification_settings', ['event']);
await queryInterface.dropTable("notifications");
await queryInterface.dropTable("notification_settings");
await queryInterface.removeIndex("notification_settings", [
"teamId",
"userId",
]);
await queryInterface.removeIndex("notification_settings", ["event"]);
},
};

View File

@@ -1,12 +1,12 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('teams', 'documentEmbeds', {
await queryInterface.addColumn("teams", "documentEmbeds", {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: true
defaultValue: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('teams', 'documentEmbeds');
}
}
await queryInterface.removeColumn("teams", "documentEmbeds");
},
};

View File

@@ -1,29 +1,29 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('collection_users', {
await queryInterface.createTable("collection_users", {
collectionId: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'collections',
model: "collections",
},
},
userId: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'users',
model: "users",
},
},
permission: {
type: Sequelize.STRING,
allowNull: false
allowNull: false,
},
createdById: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'users',
model: "users",
},
},
createdAt: {
@@ -33,21 +33,24 @@ module.exports = {
updatedAt: {
type: Sequelize.DATE,
allowNull: false,
}
},
});
await queryInterface.addColumn('collections', 'private', {
await queryInterface.addColumn("collections", "private", {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false
defaultValue: false,
});
await queryInterface.addIndex('collection_users', ['collectionId', 'userId']);
await queryInterface.addIndex("collection_users", [
"collectionId",
"userId",
]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('collection_users');
await queryInterface.removeColumn('collections', 'private');
await queryInterface.removeIndex('collection_users', ['collectionId', 'userId']);
await queryInterface.dropTable("collection_users");
await queryInterface.removeColumn("collections", "private");
await queryInterface.removeIndex("collection_users", [
"collectionId",
"userId",
]);
},
};

View File

@@ -1,11 +1,11 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('documents', 'archivedAt', {
await queryInterface.addColumn("documents", "archivedAt", {
type: Sequelize.DATE,
allowNull: true
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('documents', 'archivedAt');
}
}
await queryInterface.removeColumn("documents", "archivedAt");
},
};

View File

@@ -1,13 +1,12 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addIndex('documents', ['updatedAt']);
await queryInterface.addIndex('documents', ['archivedAt']);
await queryInterface.addIndex('documents', ['collaboratorIds']);
await queryInterface.addIndex("documents", ["updatedAt"]);
await queryInterface.addIndex("documents", ["archivedAt"]);
await queryInterface.addIndex("documents", ["collaboratorIds"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeIndex('documents', ['updatedAt']);
await queryInterface.removeIndex('documents', ['archivedAt']);
await queryInterface.removeIndex('documents', ['collaboratorIds']);
await queryInterface.removeIndex("documents", ["updatedAt"]);
await queryInterface.removeIndex("documents", ["archivedAt"]);
await queryInterface.removeIndex("documents", ["collaboratorIds"]);
},
};

View File

@@ -1,35 +1,34 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('events', 'data', {
await queryInterface.changeColumn("events", "data", {
type: Sequelize.JSONB,
allowNull: true,
});
await queryInterface.addColumn('events', 'actorId', {
await queryInterface.addColumn("events", "actorId", {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'users',
model: "users",
},
});
await queryInterface.addColumn('events', 'modelId', {
await queryInterface.addColumn("events", "modelId", {
type: Sequelize.UUID,
allowNull: true
allowNull: true,
});
await queryInterface.addColumn('events', 'ip', {
await queryInterface.addColumn("events", "ip", {
type: Sequelize.STRING,
allowNull: true
allowNull: true,
});
await queryInterface.addIndex('events', ['name']);
await queryInterface.addIndex('events', ['actorId']);
await queryInterface.addIndex('events', ['teamId', 'collectionId']);
await queryInterface.addIndex("events", ["name"]);
await queryInterface.addIndex("events", ["actorId"]);
await queryInterface.addIndex("events", ["teamId", "collectionId"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('events', 'actorId');
await queryInterface.removeColumn('events', 'modelId');
await queryInterface.removeColumn('events', 'ip');
await queryInterface.removeIndex('events', ['name']);
await queryInterface.removeIndex('events', ['actorId']);
await queryInterface.removeIndex('events', ['teamId', 'collectionId']);
}
}
await queryInterface.removeColumn("events", "actorId");
await queryInterface.removeColumn("events", "modelId");
await queryInterface.removeColumn("events", "ip");
await queryInterface.removeIndex("events", ["name"]);
await queryInterface.removeIndex("events", ["actorId"]);
await queryInterface.removeIndex("events", ["teamId", "collectionId"]);
},
};

View File

@@ -1,12 +1,12 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('documents', 'isWelcome', {
await queryInterface.addColumn("documents", "isWelcome", {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false
defaultValue: false,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('documents', 'isWelcome');
}
}
await queryInterface.removeColumn("documents", "isWelcome");
},
};

View File

@@ -1,6 +1,6 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('backlinks', {
await queryInterface.createTable("backlinks", {
id: {
type: Sequelize.UUID,
allowNull: false,
@@ -10,21 +10,21 @@ module.exports = {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'users',
model: "users",
},
},
documentId: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'documents',
model: "documents",
},
},
reverseDocumentId: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'documents',
model: "documents",
},
},
createdAt: {
@@ -36,11 +36,10 @@ module.exports = {
allowNull: false,
},
});
await queryInterface.addIndex('backlinks', ['documentId']);
await queryInterface.addIndex("backlinks", ["documentId"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('backlinks');
await queryInterface.removeIndex('backlinks', ['documentId']);
await queryInterface.dropTable("backlinks");
await queryInterface.removeIndex("backlinks", ["documentId"]);
},
};

View File

@@ -1,25 +1,31 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('collections', 'maintainerApprovalRequired', {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false,
});
await queryInterface.changeColumn('collection_users', 'permission', {
await queryInterface.addColumn(
"collections",
"maintainerApprovalRequired",
{
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false,
}
);
await queryInterface.changeColumn("collection_users", "permission", {
type: Sequelize.STRING,
allowNull: false,
defaultValue: 'read_write',
defaultValue: "read_write",
});
await queryInterface.addIndex('collection_users', ['permission']);
await queryInterface.addIndex("collection_users", ["permission"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('collections', 'maintainerApprovalRequired');
await queryInterface.changeColumn('collection_users', 'permission', {
await queryInterface.removeColumn(
"collections",
"maintainerApprovalRequired"
);
await queryInterface.changeColumn("collection_users", "permission", {
type: Sequelize.STRING,
allowNull: false,
defaultValue: null,
});
await queryInterface.removeIndex('collection_users', ['permission']);
await queryInterface.removeIndex("collection_users", ["permission"]);
},
};
};

View File

@@ -1,43 +1,45 @@
const tableName = 'revisions';
const tableName = "revisions";
// because of this issue in Sequelize the foreign key constraint may be named differently depending
// on when the previous migrations were ran https://github.com/sequelize/sequelize/pull/9890
const constraintNames = ['revisions_documentId_fkey', 'documentId_foreign_idx'];
const constraintNames = ["revisions_documentId_fkey", "documentId_foreign_idx"];
module.exports = {
up: async (queryInterface, Sequelize) => {
let error;
for (const constraintName of constraintNames) {
try {
await queryInterface.sequelize.query(`alter table "${tableName}" drop constraint "${constraintName}"`)
await queryInterface.sequelize.query(
`alter table "${tableName}"
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete cascade`
`alter table "${tableName}" drop constraint "${constraintName}"`
);
await queryInterface.sequelize.query(`alter table "${tableName}"
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete cascade`);
return;
} catch (err) {
error = err;
}
}
throw error;
},
down: async (queryInterface, Sequelize) => {
let error;
for (const constraintName of constraintNames) {
try {
await queryInterface.sequelize.query(`alter table "${tableName}" drop constraint "${constraintName}"`)
await queryInterface.sequelize.query(
`alter table "${tableName}"\
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete no action`
`alter table "${tableName}" drop constraint "${constraintName}"`
);
await queryInterface.sequelize.query(`alter table "${tableName}"\
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete no action`);
return;
} catch (err) {
error = err;
}
}
throw error;
},
};
};

View File

@@ -1,43 +1,48 @@
const tableName = 'backlinks';
const tableName = "backlinks";
// because of this issue in Sequelize the foreign key constraint may be named differently depending
// on when the previous migrations were ran https://github.com/sequelize/sequelize/pull/9890
const constraintNames = ['backlinks_reverseDocumentId_fkey', 'reverseDocumentId_foreign_idx'];
const constraintNames = [
"backlinks_reverseDocumentId_fkey",
"reverseDocumentId_foreign_idx",
];
module.exports = {
up: async (queryInterface, Sequelize) => {
let error;
for (const constraintName of constraintNames) {
try {
await queryInterface.sequelize.query(`alter table "${tableName}" drop constraint "${constraintName}"`)
await queryInterface.sequelize.query(
`alter table "${tableName}"
add constraint "${constraintName}" foreign key("reverseDocumentId") references "documents" ("id")
on delete cascade`
`alter table "${tableName}" drop constraint "${constraintName}"`
);
await queryInterface.sequelize.query(`alter table "${tableName}"
add constraint "${constraintName}" foreign key("reverseDocumentId") references "documents" ("id")
on delete cascade`);
return;
} catch (err) {
error = err;
}
}
throw error;
},
down: async (queryInterface, Sequelize) => {
let error;
for (const constraintName of constraintNames) {
try {
await queryInterface.sequelize.query(`alter table "${tableName}" drop constraint "${constraintName}"`)
await queryInterface.sequelize.query(
`alter table "${tableName}"\
add constraint "${constraintName}" foreign key("reverseDocumentId") references "documents" ("id")
on delete no action`
`alter table "${tableName}" drop constraint "${constraintName}"`
);
await queryInterface.sequelize.query(`alter table "${tableName}"\
add constraint "${constraintName}" foreign key("reverseDocumentId") references "documents" ("id")
on delete no action`);
return;
} catch (err) {
error = err;
}
}
throw error;
},
};
};

View File

@@ -1,43 +1,48 @@
const tableName = 'documents';
const tableName = "documents";
// because of this issue in Sequelize the foreign key constraint may be named differently depending
// on when the previous migrations were ran https://github.com/sequelize/sequelize/pull/9890
const constraintNames = ['documents_parentDocumentId_fkey', 'parentDocumentId_foreign_idx'];
const constraintNames = [
"documents_parentDocumentId_fkey",
"parentDocumentId_foreign_idx",
];
module.exports = {
up: async (queryInterface, Sequelize) => {
let error;
for (const constraintName of constraintNames) {
try {
await queryInterface.sequelize.query(`alter table "${tableName}" drop constraint "${constraintName}"`)
await queryInterface.sequelize.query(
`alter table "${tableName}"
add constraint "${constraintName}" foreign key("parentDocumentId") references "documents" ("id")
on delete cascade`
`alter table "${tableName}" drop constraint "${constraintName}"`
);
await queryInterface.sequelize.query(`alter table "${tableName}"
add constraint "${constraintName}" foreign key("parentDocumentId") references "documents" ("id")
on delete cascade`);
return;
} catch (err) {
error = err;
}
}
throw error;
},
down: async (queryInterface, Sequelize) => {
let error;
for (const constraintName of constraintNames) {
try {
await queryInterface.sequelize.query(`alter table "${tableName}" drop constraint "${constraintName}"`)
await queryInterface.sequelize.query(
`alter table "${tableName}"\
add constraint "${constraintName}" foreign key("parentDocumentId") references "documents" ("id")
on delete no action`
`alter table "${tableName}" drop constraint "${constraintName}"`
);
await queryInterface.sequelize.query(`alter table "${tableName}"\
add constraint "${constraintName}" foreign key("parentDocumentId") references "documents" ("id")
on delete no action`);
return;
} catch (err) {
error = err;
}
}
throw error;
},
};
};

View File

@@ -1,43 +1,45 @@
const tableName = 'shares';
const tableName = "shares";
// because of this issue in Sequelize the foreign key constraint may be named differently depending
// on when the previous migrations were ran https://github.com/sequelize/sequelize/pull/9890
const constraintNames = ['shares_documentId_fkey', 'documentId_foreign_idx'];
const constraintNames = ["shares_documentId_fkey", "documentId_foreign_idx"];
module.exports = {
up: async (queryInterface, Sequelize) => {
let error;
for (const constraintName of constraintNames) {
try {
await queryInterface.sequelize.query(`alter table "${tableName}" drop constraint "${constraintName}"`)
await queryInterface.sequelize.query(
`alter table "${tableName}"
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete cascade`
`alter table "${tableName}" drop constraint "${constraintName}"`
);
await queryInterface.sequelize.query(`alter table "${tableName}"
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete cascade`);
return;
} catch (err) {
error = err;
}
}
throw error;
},
down: async (queryInterface, Sequelize) => {
let error;
for (const constraintName of constraintNames) {
try {
await queryInterface.sequelize.query(`alter table "${tableName}" drop constraint "${constraintName}"`)
await queryInterface.sequelize.query(
`alter table "${tableName}"\
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete no action`
`alter table "${tableName}" drop constraint "${constraintName}"`
);
await queryInterface.sequelize.query(`alter table "${tableName}"\
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete no action`);
return;
} catch (err) {
error = err;
}
}
throw error;
},
};
};

View File

@@ -1,43 +1,45 @@
const tableName = 'backlinks';
const tableName = "backlinks";
// because of this issue in Sequelize the foreign key constraint may be named differently depending
// on when the previous migrations were ran https://github.com/sequelize/sequelize/pull/9890
const constraintNames = ['backlinks_documentId_fkey', 'documentId_foreign_idx'];
const constraintNames = ["backlinks_documentId_fkey", "documentId_foreign_idx"];
module.exports = {
up: async (queryInterface, Sequelize) => {
let error;
for (const constraintName of constraintNames) {
try {
await queryInterface.sequelize.query(`alter table "${tableName}" drop constraint "${constraintName}"`)
await queryInterface.sequelize.query(
`alter table "${tableName}"
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete cascade`
`alter table "${tableName}" drop constraint "${constraintName}"`
);
await queryInterface.sequelize.query(`alter table "${tableName}"
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete cascade`);
return;
} catch (err) {
error = err;
}
}
throw error;
},
down: async (queryInterface, Sequelize) => {
let error;
for (const constraintName of constraintNames) {
try {
await queryInterface.sequelize.query(`alter table "${tableName}" drop constraint "${constraintName}"`)
await queryInterface.sequelize.query(
`alter table "${tableName}"\
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete no action`
`alter table "${tableName}" drop constraint "${constraintName}"`
);
await queryInterface.sequelize.query(`alter table "${tableName}"\
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete no action`);
return;
} catch (err) {
error = err;
}
}
throw error;
},
};
};

View File

@@ -1,25 +1,25 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('teams', 'guestSignin', {
await queryInterface.addColumn("teams", "guestSignin", {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false,
});
await queryInterface.addColumn('users', 'lastSigninEmailSentAt', {
type: Sequelize.DATE
await queryInterface.addColumn("users", "lastSigninEmailSentAt", {
type: Sequelize.DATE,
});
await queryInterface.changeColumn('users', 'email', {
await queryInterface.changeColumn("users", "email", {
type: Sequelize.STRING,
allowNull: true,
defaultValue: null,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('teams', 'guestSignin');
await queryInterface.removeColumn('users', 'lastSigninEmailSentAt');
await queryInterface.changeColumn('users', 'email', {
await queryInterface.removeColumn("teams", "guestSignin");
await queryInterface.removeColumn("users", "lastSigninEmailSentAt");
await queryInterface.changeColumn("users", "email", {
type: Sequelize.STRING,
allowNull: false
allowNull: false,
});
},
};
};

View File

@@ -6,45 +6,43 @@ module.exports = {
id: {
type: Sequelize.UUID,
allowNull: false,
primaryKey: true
primaryKey: true,
},
name: {
type: Sequelize.STRING,
allowNull: false
allowNull: false,
},
teamId: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: "teams"
}
model: "teams",
},
},
createdById: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: "users"
}
model: "users",
},
},
createdAt: {
type: Sequelize.DATE,
allowNull: false
allowNull: false,
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false
allowNull: false,
},
deletedAt: {
type: Sequelize.DATE,
allowNull: true
}
allowNull: true,
},
});
await queryInterface.addIndex("groups", ["teamId"]);
await queryInterface.addIndex("groups", ["deletedAt"]);
},
down: async (queryInterface, Sequelize) => {
return queryInterface.dropTable("groups");
}
},
};

View File

@@ -7,43 +7,41 @@ module.exports = {
type: Sequelize.UUID,
allowNull: false,
references: {
model: "users"
}
model: "users",
},
},
groupId: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: "groups"
}
model: "groups",
},
},
createdById: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: "users"
}
model: "users",
},
},
createdAt: {
type: Sequelize.DATE,
allowNull: false
allowNull: false,
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false
allowNull: false,
},
deletedAt: {
type: Sequelize.DATE,
allowNull: true
}
allowNull: true,
},
});
await queryInterface.addIndex("group_users", ["groupId", "userId"]);
await queryInterface.addIndex("group_users", ["userId"]);
await queryInterface.addIndex("group_users", ["deletedAt"]);
},
down: async (queryInterface, Sequelize) => {
return queryInterface.dropTable("group_users");
}
},
};

View File

@@ -1,14 +1,13 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('views', 'lastEditingAt', {
await queryInterface.addColumn("views", "lastEditingAt", {
type: Sequelize.DATE,
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('views', 'lastEditingAt');
}
await queryInterface.removeColumn("views", "lastEditingAt");
},
};

View File

@@ -1,6 +1,6 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('attachments', {
await queryInterface.createTable("attachments", {
id: {
type: Sequelize.UUID,
allowNull: false,
@@ -10,21 +10,21 @@ module.exports = {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'teams',
model: "teams",
},
},
userId: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'users',
model: "users",
},
},
documentId: {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'documents',
model: "documents",
},
},
key: {
@@ -56,10 +56,9 @@ module.exports = {
allowNull: false,
},
});
await queryInterface.addIndex('attachments', ['documentId']);
await queryInterface.addIndex("attachments", ["documentId"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('attachments');
await queryInterface.dropTable("attachments");
},
};

View File

@@ -1,4 +1,4 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
@@ -7,47 +7,48 @@ module.exports = {
type: Sequelize.UUID,
allowNull: false,
references: {
model: "collections"
}
model: "collections",
},
},
groupId: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: "groups"
}
model: "groups",
},
},
createdById: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: "users"
}
model: "users",
},
},
permission: {
type: Sequelize.STRING,
allowNull: false
allowNull: false,
},
createdAt: {
type: Sequelize.DATE,
allowNull: false
allowNull: false,
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false
allowNull: false,
},
deletedAt: {
type: Sequelize.DATE,
allowNull: true
}
allowNull: true,
},
});
await queryInterface.addIndex("collection_groups", ["collectionId", "groupId"]);
await queryInterface.addIndex("collection_groups", [
"collectionId",
"groupId",
]);
await queryInterface.addIndex("collection_groups", ["groupId"]);
await queryInterface.addIndex("collection_groups", ["deletedAt"]);
},
down: async (queryInterface, Sequelize) => {
return queryInterface.dropTable("collection_groups");
}
},
};

View File

@@ -1,19 +1,18 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('documents', 'editorVersion', {
await queryInterface.addColumn("documents", "editorVersion", {
type: Sequelize.STRING,
allowNull: true,
});
await queryInterface.addColumn('revisions', 'editorVersion', {
await queryInterface.addColumn("revisions", "editorVersion", {
type: Sequelize.STRING,
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('documents', 'editorVersion');
await queryInterface.removeColumn('revisions', 'editorVersion');
}
};
await queryInterface.removeColumn("documents", "editorVersion");
await queryInterface.removeColumn("revisions", "editorVersion");
},
};

View File

@@ -1,43 +1,48 @@
const tableName = 'attachments';
const tableName = "attachments";
// because of this issue in Sequelize the foreign key constraint may be named differently depending
// on when the previous migrations were ran https://github.com/sequelize/sequelize/pull/9890
const constraintNames = ['attachments_documentId_fkey', 'attachments_foreign_idx'];
const constraintNames = [
"attachments_documentId_fkey",
"attachments_foreign_idx",
];
module.exports = {
up: async (queryInterface, Sequelize) => {
let error;
for (const constraintName of constraintNames) {
try {
await queryInterface.sequelize.query(`alter table "${tableName}" drop constraint "${constraintName}"`)
await queryInterface.sequelize.query(
`alter table "${tableName}"
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete cascade`
`alter table "${tableName}" drop constraint "${constraintName}"`
);
await queryInterface.sequelize.query(`alter table "${tableName}"
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete cascade`);
return;
} catch (err) {
error = err;
}
}
throw error;
},
down: async (queryInterface, Sequelize) => {
let error;
for (const constraintName of constraintNames) {
try {
await queryInterface.sequelize.query(`alter table "${tableName}" drop constraint "${constraintName}"`)
await queryInterface.sequelize.query(
`alter table "${tableName}"\
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete no action`
`alter table "${tableName}" drop constraint "${constraintName}"`
);
await queryInterface.sequelize.query(`alter table "${tableName}"\
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete no action`);
return;
} catch (err) {
error = err;
}
}
throw error;
},
};
};

View File

@@ -1,19 +1,18 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('documents', 'version', {
await queryInterface.addColumn("documents", "version", {
type: Sequelize.SMALLINT,
allowNull: true,
});
await queryInterface.addColumn('revisions', 'version', {
await queryInterface.addColumn("revisions", "version", {
type: Sequelize.SMALLINT,
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('documents', 'version');
await queryInterface.removeColumn('revisions', 'version');
}
};
await queryInterface.removeColumn("documents", "version");
await queryInterface.removeColumn("revisions", "version");
},
};

View File

@@ -1,19 +1,18 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('documents', 'backup', {
await queryInterface.addColumn("documents", "backup", {
type: Sequelize.TEXT,
allowNull: true,
});
await queryInterface.addColumn('revisions', 'backup', {
await queryInterface.addColumn("revisions", "backup", {
type: Sequelize.TEXT,
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('documents', 'backup');
await queryInterface.removeColumn('revisions', 'backup');
}
};
await queryInterface.removeColumn("documents", "backup");
await queryInterface.removeColumn("revisions", "backup");
},
};

View File

@@ -1,14 +1,13 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('collections', 'icon', {
await queryInterface.addColumn("collections", "icon", {
type: Sequelize.TEXT,
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('collections', 'icon');
}
};
await queryInterface.removeColumn("collections", "icon");
},
};

View File

@@ -1,20 +1,18 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('shares', 'published', {
await queryInterface.addColumn("shares", "published", {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false
defaultValue: false,
});
await queryInterface.sequelize.query(`
update shares
set "published" = true
`);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('shares', 'published');
}
};
await queryInterface.removeColumn("shares", "published");
},
};

View File

@@ -1,20 +1,19 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('documents', 'template', {
await queryInterface.addColumn("documents", "template", {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false
defaultValue: false,
});
await queryInterface.addColumn('documents', 'templateId', {
await queryInterface.addColumn("documents", "templateId", {
type: Sequelize.UUID,
allowNull: true
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('documents', 'templateId');
await queryInterface.removeColumn('documents', 'template');
}
};
await queryInterface.removeColumn("documents", "templateId");
await queryInterface.removeColumn("documents", "template");
},
};

View File

@@ -1,14 +1,13 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('collections', 'type');
await queryInterface.removeColumn("collections", "type");
},
down: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('collections', 'type', {
await queryInterface.addColumn("collections", "type", {
type: Sequelize.STRING,
defaultValue: "atlas"
defaultValue: "atlas",
});
}
};
},
};

View File

@@ -1,4 +1,5 @@
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable("search_queries", {

View File

@@ -1,19 +1,16 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addIndex("search_queries", ["teamId"]);
await queryInterface.addIndex("search_queries", ["userId"]);
await queryInterface.addIndex("search_queries", ["createdAt"]);
await queryInterface.addIndex("users", ["teamId"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeIndex("search_queries", ["teamId"]);
await queryInterface.removeIndex("search_queries", ["userId"]);
await queryInterface.removeIndex("search_queries", ["createdAt"]);
await queryInterface.removeIndex("users", ["teamId"]);
}
},
};

View File

@@ -1,11 +1,10 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addIndex("backlinks", ["reverseDocumentId"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeIndex("backlinks", ["reverseDocumentId"]);
}
},
};

View File

@@ -1,15 +1,14 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('teams', 'domain', {
await queryInterface.addColumn("teams", "domain", {
type: Sequelize.STRING,
allowNull: true,
unique: true
unique: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('teams', 'domain');
}
};
await queryInterface.removeColumn("teams", "domain");
},
};

View File

@@ -1,14 +1,13 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('users', 'language', {
await queryInterface.addColumn("users", "language", {
type: Sequelize.STRING,
defaultValue: process.env.DEFAULT_LANGUAGE,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('users', 'language');
}
await queryInterface.removeColumn("users", "language");
},
};

View File

@@ -1,29 +1,24 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn(
"attachments",
"key",
{ type: Sequelize.STRING(4096), allowNull: false, }
);
await queryInterface.changeColumn(
"attachments",
"url",
{ type: Sequelize.STRING(4096), allowNull: false, }
);
await queryInterface.changeColumn("attachments", "key", {
type: Sequelize.STRING(4096),
allowNull: false,
});
await queryInterface.changeColumn("attachments", "url", {
type: Sequelize.STRING(4096),
allowNull: false,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn(
"attachments",
"key",
{ type: Sequelize.STRING(255), allowNull: false, }
);
await queryInterface.changeColumn(
"attachments",
"url",
{ type: Sequelize.STRING(255), allowNull: false, }
);
}
await queryInterface.changeColumn("attachments", "key", {
type: Sequelize.STRING(255),
allowNull: false,
});
await queryInterface.changeColumn("attachments", "url", {
type: Sequelize.STRING(255),
allowNull: false,
});
},
};

View File

@@ -1,37 +1,42 @@
const tableName = 'attachments';
const tableName = "attachments";
// because of this issue in Sequelize the foreign key constraint may be named differently depending
// on when the previous migrations were ran https://github.com/sequelize/sequelize/pull/9890
const constraintNames = ['attachments_documentId_fkey', 'attachments_foreign_idx'];
const constraintNames = [
"attachments_documentId_fkey",
"attachments_foreign_idx",
];
module.exports = {
up: async (queryInterface, Sequelize) => {
let error;
for (const constraintName of constraintNames) {
try {
await queryInterface.sequelize.query(`alter table "${tableName}" drop constraint "${constraintName}"`)
return;
} catch (err) {
error = err;
}
}
throw error;
},
down: async (queryInterface, Sequelize) => {
let error;
for (const constraintName of constraintNames) {
try {
await queryInterface.sequelize.query(
`alter table "${tableName}"
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete cascade`
`alter table "${tableName}" drop constraint "${constraintName}"`
);
return;
} catch (err) {
error = err;
}
}
throw error;
},
};
down: async (queryInterface, Sequelize) => {
let error;
for (const constraintName of constraintNames) {
try {
await queryInterface.sequelize.query(`alter table "${tableName}"
add constraint "${constraintName}" foreign key("documentId") references "documents" ("id")
on delete cascade`);
return;
} catch (err) {
error = err;
}
}
throw error;
},
};

View File

@@ -1,14 +1,13 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('collections', 'sort', {
await queryInterface.addColumn("collections", "sort", {
type: Sequelize.JSONB,
allowNull: true
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('collections', 'sort');
}
};
await queryInterface.removeColumn("collections", "sort");
},
};

View File

@@ -8,7 +8,6 @@ module.exports = {
"createdById"
);
},
down: async (queryInterface, Sequelize) => {
return queryInterface.renameColumn(
"collections",

View File

@@ -1,12 +1,12 @@
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('collections', 'sharing', {
await queryInterface.addColumn("collections", "sharing", {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: true
defaultValue: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('collections', 'sharing');
}
}
await queryInterface.removeColumn("collections", "sharing");
},
};

View File

@@ -7,7 +7,6 @@ module.exports = {
defaultValue: null,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn("collections", "index");
},

View File

@@ -1,4 +1,4 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
@@ -20,21 +20,20 @@ module.exports = {
enabled: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: true
defaultValue: true,
},
teamId: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: "teams"
}
model: "teams",
},
},
createdAt: {
type: Sequelize.DATE,
allowNull: false,
},
});
await queryInterface.createTable("user_authentications", {
id: {
type: Sequelize.UUID,
@@ -45,15 +44,15 @@ module.exports = {
type: Sequelize.UUID,
allowNull: false,
references: {
model: "users"
}
model: "users",
},
},
authenticationProviderId: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: "authentication_providers"
}
model: "authentication_providers",
},
},
accessToken: {
type: Sequelize.BLOB,
@@ -81,18 +80,16 @@ module.exports = {
allowNull: false,
},
});
await queryInterface.removeColumn("users", "slackAccessToken")
await queryInterface.removeColumn("users", "slackAccessToken");
await queryInterface.addIndex("authentication_providers", ["providerId"]);
await queryInterface.addIndex("user_authentications", ["providerId"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable("user_authentications");
await queryInterface.dropTable("authentication_providers");
await queryInterface.addColumn("users", "slackAccessToken", {
type: 'bytea',
type: "bytea",
allowNull: true,
});
}
},
};

View File

@@ -1,19 +1,18 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn("users", "slackData");
await queryInterface.removeColumn("teams", "slackData");
},
down: async (queryInterface, Sequelize) => {
await queryInterface.addColumn("teams", "slackData", {
type: 'JSONB',
type: "JSONB",
allowNull: true,
});
await queryInterface.addColumn("users", "slackData", {
type: 'JSONB',
type: "JSONB",
allowNull: true,
});
}
},
};

View File

@@ -1,15 +1,14 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn("users", "isViewer", {
await queryInterface.addColumn("users", "isViewer", {
type: Sequelize.BOOLEAN,
defaultValue: false,
allowNull: false,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn("users", "isViewer");
}
},
};

View File

@@ -1,4 +1,4 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
@@ -10,29 +10,24 @@ module.exports = {
isIn: [["read", "read_write"]],
},
});
await queryInterface.sequelize.query(`
UPDATE collections
SET "permission" = 'read_write'
WHERE "private" = false
`);
await queryInterface.removeColumn("collections", "private");
},
down: async (queryInterface, Sequelize) => {
await queryInterface.addColumn("collections", "private", {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false
defaultValue: false,
});
await queryInterface.sequelize.query(`
UPDATE collections
SET "private" = true
WHERE "permission" IS NULL
`);
await queryInterface.removeColumn("collections", "permission");
}
},
};

View File

@@ -1,4 +1,4 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
@@ -7,8 +7,7 @@ module.exports = {
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn("shares", "lastAccessedAt");
}
},
};

View File

@@ -1,4 +1,4 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
@@ -8,8 +8,7 @@ module.exports = {
defaultValue: false,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn("shares", "includeChildDocuments");
}
},
};

View File

@@ -1,14 +1,13 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn("teams", "signupQueryParams", {
await queryInterface.addColumn("teams", "signupQueryParams", {
type: Sequelize.JSONB,
allowNull: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn("teams", "signupQueryParams");
}
},
};

View File

@@ -1,13 +1,12 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn("documents","previousTitles",{
type: Sequelize.ARRAY(Sequelize.STRING)
})
await queryInterface.addColumn("documents", "previousTitles", {
type: Sequelize.ARRAY(Sequelize.STRING),
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn("documents", "previousTitles");
}
},
};

View File

@@ -1,4 +1,4 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
@@ -15,7 +15,6 @@ module.exports = {
`;
await queryInterface.sequelize.query(searchDocument);
},
down: async (queryInterface, Sequelize) => {
const searchDocument = `
CREATE OR REPLACE FUNCTION documents_search_trigger() RETURNS trigger AS $$
@@ -28,6 +27,5 @@ module.exports = {
$$ LANGUAGE plpgsql;
`;
await queryInterface.sequelize.query(searchDocument);
}
},
};

View File

@@ -1,11 +1,10 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addIndex("events", ["documentId"]);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeIndex("events", ["documentId"]);
}
},
};

View File

@@ -7,9 +7,11 @@ module.exports = {
await queryInterface.removeIndex("users", "users_slack_id");
await queryInterface.removeIndex("teams", "teams_slack_id");
await queryInterface.removeIndex("teams", "teams_google_id");
await queryInterface.removeIndex("collection_users", "collection_users_permission");
await queryInterface.removeIndex(
"collection_users",
"collection_users_permission"
);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.addIndex("documents", ["collaboratorIds"]);
await queryInterface.addIndex("documents", ["id", "deletedAt"]);
@@ -17,5 +19,5 @@ module.exports = {
await queryInterface.addIndex("teams", ["slackId"]);
await queryInterface.addIndex("teams", ["googleId"]);
await queryInterface.addIndex("collection_users", ["permission"]);
}
},
};

View File

@@ -1,19 +1,18 @@
'use strict';
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('documents', 'backup');
await queryInterface.removeColumn('revisions', 'backup');
await queryInterface.removeColumn("documents", "backup");
await queryInterface.removeColumn("revisions", "backup");
},
down: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('documents', 'backup', {
await queryInterface.addColumn("documents", "backup", {
type: Sequelize.TEXT,
allowNull: true,
});
await queryInterface.addColumn('revisions', 'backup', {
await queryInterface.addColumn("revisions", "backup", {
type: Sequelize.TEXT,
allowNull: true,
});
}
};
},
};

View File

@@ -9,7 +9,6 @@ module.exports = {
type: Sequelize.BOOLEAN,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn("documents", "state");
await queryInterface.removeColumn("teams", "collaborativeEditing");

Some files were not shown because too many files have changed in this diff Show More