aboutsummaryrefslogtreecommitdiffstats
path: root/database/migrations
diff options
context:
space:
mode:
authorLibravatar Ricardo <ricardo@cino.io>2023-10-13 14:12:03 +0200
committerLibravatar GitHub <noreply@github.com>2023-10-13 13:12:03 +0100
commite503468660a13760010a94ecda5f0625c6f47f87 (patch)
treefa532f54fc5f091de08d55405ec6339bd2440a02 /database/migrations
parent1.3.16 [skip ci] (diff)
downloadferdium-server-e503468660a13760010a94ecda5f0625c6f47f87.tar.gz
ferdium-server-e503468660a13760010a94ecda5f0625c6f47f87.tar.zst
ferdium-server-e503468660a13760010a94ecda5f0625c6f47f87.zip
Server re-build with latest AdonisJS framework & Typescript (#47)
* chore: setup first basis structure * chore: ensure styling is loaded correctly * chore: comply to new routing syntax by replace . with / in routes/resource locations * chore: add login controller * chore: correctly use views with slash instead of dot * chore: working login + tests * chore: clean up tests * chore: add password-forgot endpoint and matching test * chore: add delete page test * chore: add logout test * chore: add reset-password route and tests * chore: remove obsolete comment * chore: add account-page and tests * chore: add data page & first step of the test * chore: add transfer/import data feature and tests * chore: add export and basic test * chore: add all static api routes with tests * Regenerate 'pnpm-lock.json' and fix bad merge conflict WIP: - Tests have been commented out since they dont work - Server doesn't start * easier dev and test runs * - remove --require-pragma from reformat-files so formatting works properly - run pnpm reformat-files over codebase - remove .json files from .eslintignore - add invalid.json file to .eslintignore - configure prettier properly in eslint config - add type jsdoc to prettier config - run adonis generate:manifest command to regenerate ace-manifest.json - specify volta in package.json - introduce typecheck npm script - remove unused .mjs extension from npm scripts - install missing type definition dependencies - add pnpm.allowedDeprecatedVersions to package.json - fix invalid extends in tsconfig.json causing TS issues throughout codebase - remove @ts-ignore throughout codebase which is not relevant anymore - enable some of the tsconfig options - remove outdated eslint-disable from codebase - change deprecated faker.company.companyName() to faker.company.name() - fix TS issues inside transfer.spec.ts * - update to latest node and pnpm versions - upgrade all non-major dependencies to latest - install missing @types/luxon dependency - add cuid to pnpm.allowedDeprecatedVersions - add esModuleInterop config option to tsconfig - migrate more deprecated faker methods to new ones - add more temporary ts-ignore to code * - update eslint config - remove trailingComma: all since default in prettier v3 - add typecheck command to prepare-code npm script - upgrade various dependencies to latest major version - update tsconfig to include only useful config options - disable some lint issues and fix others * - add test command to prepare-code - disable strictPropertyInitialization flag in tsconfig which creates issues with adonis models - update precommit hook to excute pnpm prepare-code - remove ts-ignore statements from all models * fix node and pnpm dependency update * add cross env (so that we can develop on windows) * add signup endpoint (TODO: JWT auth) * Add login endpoint * Add me and updateMe endpoints * Add service endpoint * refactor: change endpoints to use jwt * add recipes endpoint * add workspaces endpoint * fix web controllors for login and post import * Update node deps * Change auth middleware (for web) and exempt api from CSRF * Add import endpoint (franz import) * Fix export/import logic * Fix service and workspace data in user/data * Fix partial lint * chore: workaround lint issues * fix: migration naming had two . * Sync back node with recipes repo * Temporarily ignore typescript * Fix adonisrc to handle public folder static assets * Fix issue with production database * add Legacy Password Provider * Fix lint errors * Fix issue on login errors frontend * add Legacy Password Provider * Fix issue with customIcons * Fix issue with auth tokens * Update 'node' to '18.18.0' * make docker work * improve docker entrypoint (test api performance) * Add migration database script * NODE_ENV on recipes * prefer @ts-expect-error over @ts-ignore * small fixes * Update 'pnpm' to '8.7.6' * fix error catch * Automatically generate JWT Public and Private keys * Use custom Adonis5-jwt * Update code to use secret (old way, no breaking changes) * Normalize appKey * Trick to make JWT tokens on client work with new version * Fix error with new JWT logic * Change migration and how we store JWT * Fix 500 response code (needs to be 401) * Improve logic and fix bugs * Fix build and entrypoint logic * Catch error if appKey changes * Add newToken logic * Fix lint (ignore any errors) * Add build for PRs * pnpm reformat-files result * Fix some tests * Fix reset password not working (test failing) * Restore csrfTokens (disabled by accident) * Fix pnpm start command with .env * Disable failing tests on the transfer endpoint (TODO) * Add tests to PR build * Fix build * Remove unnecessary assertStatus * Add typecheck * hash password on UserFactory (fix build) * Add JWT_USE_PEM true by default (increase security) * fix name of github action --------- Co-authored-by: Vijay A <vraravam@users.noreply.github.com> Co-authored-by: Balaji Vijayakumar <kuttibalaji.v6@gmail.com> Co-authored-by: MCMXC <16797721+mcmxcdev@users.noreply.github.com> Co-authored-by: André Oliveira <oliveira.andrerodrigues95@gmail.com>
Diffstat (limited to 'database/migrations')
-rw-r--r--database/migrations/1503250034279_user.js22
-rw-r--r--database/migrations/1503250034279_user.ts20
-rw-r--r--database/migrations/1503250034280_token.js22
-rw-r--r--database/migrations/1503250034280_token.ts20
-rw-r--r--database/migrations/1566385379883_service_schema.js23
-rw-r--r--database/migrations/1566385379883_service_schema.ts21
-rw-r--r--database/migrations/1566554231482_recipe_schema.js21
-rw-r--r--database/migrations/1566554231482_recipe_schema.ts19
-rw-r--r--database/migrations/1566554359294_workspace_schema.ts (renamed from database/migrations/1566554359294_workspace_schema.js)16
-rw-r--r--database/migrations/1612629845398_users_update_schema.js18
-rw-r--r--database/migrations/1612629845398_users_update_schema.ts15
-rw-r--r--database/migrations/1658076326250_correct_token_relations.ts22
-rw-r--r--database/migrations/1696110557648_jwt_tokens.ts29
13 files changed, 153 insertions, 115 deletions
diff --git a/database/migrations/1503250034279_user.js b/database/migrations/1503250034279_user.js
deleted file mode 100644
index 77f3cee..0000000
--- a/database/migrations/1503250034279_user.js
+++ /dev/null
@@ -1,22 +0,0 @@
1
2/** @type {import('@adonisjs/lucid/src/Schema')} */
3const Schema = use('Schema');
4
5class UserSchema extends Schema {
6 up() {
7 this.create('users', (table) => {
8 table.increments();
9 table.string('username', 80).notNullable();
10 table.string('email', 254).notNullable().unique();
11 table.string('password', 60).notNullable();
12 table.json('settings');
13 table.timestamps();
14 });
15 }
16
17 down() {
18 this.drop('users');
19 }
20}
21
22module.exports = UserSchema;
diff --git a/database/migrations/1503250034279_user.ts b/database/migrations/1503250034279_user.ts
new file mode 100644
index 0000000..262a472
--- /dev/null
+++ b/database/migrations/1503250034279_user.ts
@@ -0,0 +1,20 @@
1import BaseSchema from '@ioc:Adonis/Lucid/Schema';
2
3export default class extends BaseSchema {
4 protected tableName = 'users';
5
6 public async up(): Promise<void> {
7 this.schema.createTable(this.tableName, table => {
8 table.increments();
9 table.string('username', 80).notNullable();
10 table.string('email', 254).notNullable().unique();
11 table.string('password', 60).notNullable();
12 table.json('settings');
13 table.timestamps();
14 });
15 }
16
17 public async down(): Promise<void> {
18 this.schema.dropTable(this.tableName);
19 }
20}
diff --git a/database/migrations/1503250034280_token.js b/database/migrations/1503250034280_token.js
deleted file mode 100644
index ad97dba..0000000
--- a/database/migrations/1503250034280_token.js
+++ /dev/null
@@ -1,22 +0,0 @@
1
2/** @type {import('@adonisjs/lucid/src/Schema')} */
3const Schema = use('Schema');
4
5class TokensSchema extends Schema {
6 up() {
7 this.create('tokens', (table) => {
8 table.increments();
9 table.integer('user_id').unsigned().references('id').inTable('users');
10 table.string('token', 255).notNullable().unique().index();
11 table.string('type', 80).notNullable();
12 table.boolean('is_revoked').defaultTo(false);
13 table.timestamps();
14 });
15 }
16
17 down() {
18 this.drop('tokens');
19 }
20}
21
22module.exports = TokensSchema;
diff --git a/database/migrations/1503250034280_token.ts b/database/migrations/1503250034280_token.ts
new file mode 100644
index 0000000..5a030d0
--- /dev/null
+++ b/database/migrations/1503250034280_token.ts
@@ -0,0 +1,20 @@
1import BaseSchema from '@ioc:Adonis/Lucid/Schema';
2
3export default class extends BaseSchema {
4 protected tableName = 'tokens';
5
6 public async up(): Promise<void> {
7 this.schema.createTable(this.tableName, table => {
8 table.increments();
9 table.integer('user_id').unsigned().references('users.id');
10 table.string('token', 255).notNullable().unique().index();
11 table.string('type', 80).notNullable();
12 table.boolean('is_revoked').defaultTo(false);
13 table.timestamps();
14 });
15 }
16
17 public async down(): Promise<void> {
18 this.schema.dropTable(this.tableName);
19 }
20}
diff --git a/database/migrations/1566385379883_service_schema.js b/database/migrations/1566385379883_service_schema.js
deleted file mode 100644
index 093fb13..0000000
--- a/database/migrations/1566385379883_service_schema.js
+++ /dev/null
@@ -1,23 +0,0 @@
1
2/** @type {import('@adonisjs/lucid/src/Schema')} */
3const Schema = use('Schema');
4
5class ServiceSchema extends Schema {
6 up() {
7 this.create('services', (table) => {
8 table.increments();
9 table.string('userId', 80).notNullable();
10 table.string('serviceId', 80).notNullable();
11 table.string('name', 80).notNullable();
12 table.string('recipeId', 254).notNullable();
13 table.json('settings');
14 table.timestamps();
15 });
16 }
17
18 down() {
19 this.drop('services');
20 }
21}
22
23module.exports = ServiceSchema;
diff --git a/database/migrations/1566385379883_service_schema.ts b/database/migrations/1566385379883_service_schema.ts
new file mode 100644
index 0000000..9c3e23d
--- /dev/null
+++ b/database/migrations/1566385379883_service_schema.ts
@@ -0,0 +1,21 @@
1import BaseSchema from '@ioc:Adonis/Lucid/Schema';
2
3export default class extends BaseSchema {
4 protected tableName = 'services';
5
6 public async up(): Promise<void> {
7 this.schema.createTable(this.tableName, table => {
8 table.increments();
9 table.string('userId', 80).notNullable();
10 table.string('serviceId', 80).notNullable();
11 table.string('name', 80).notNullable();
12 table.string('recipeId', 254).notNullable();
13 table.json('settings');
14 table.timestamps();
15 });
16 }
17
18 public async down(): Promise<void> {
19 this.schema.dropTable(this.tableName);
20 }
21}
diff --git a/database/migrations/1566554231482_recipe_schema.js b/database/migrations/1566554231482_recipe_schema.js
deleted file mode 100644
index 14fcb82..0000000
--- a/database/migrations/1566554231482_recipe_schema.js
+++ /dev/null
@@ -1,21 +0,0 @@
1
2/** @type {import('@adonisjs/lucid/src/Schema')} */
3const Schema = use('Schema');
4
5class RecipeSchema extends Schema {
6 up() {
7 this.create('recipes', (table) => {
8 table.increments();
9 table.string('name', 80).notNullable();
10 table.string('recipeId', 254).notNullable().unique();
11 table.json('data');
12 table.timestamps();
13 });
14 }
15
16 down() {
17 this.drop('recipes');
18 }
19}
20
21module.exports = RecipeSchema;
diff --git a/database/migrations/1566554231482_recipe_schema.ts b/database/migrations/1566554231482_recipe_schema.ts
new file mode 100644
index 0000000..3a9784d
--- /dev/null
+++ b/database/migrations/1566554231482_recipe_schema.ts
@@ -0,0 +1,19 @@
1import BaseSchema from '@ioc:Adonis/Lucid/Schema';
2
3export default class extends BaseSchema {
4 protected tableName = 'recipes';
5
6 public async up(): Promise<void> {
7 this.schema.createTable(this.tableName, table => {
8 table.increments();
9 table.string('name', 80).notNullable();
10 table.string('recipeId', 254).notNullable().unique();
11 table.json('data');
12 table.timestamps();
13 });
14 }
15
16 public async down(): Promise<void> {
17 this.schema.dropTable(this.tableName);
18 }
19}
diff --git a/database/migrations/1566554359294_workspace_schema.js b/database/migrations/1566554359294_workspace_schema.ts
index 0a3c138..77e1189 100644
--- a/database/migrations/1566554359294_workspace_schema.js
+++ b/database/migrations/1566554359294_workspace_schema.ts
@@ -1,10 +1,10 @@
1import BaseSchema from '@ioc:Adonis/Lucid/Schema';
1 2
2/** @type {import('@adonisjs/lucid/src/Schema')} */ 3export default class extends BaseSchema {
3const Schema = use('Schema'); 4 protected tableName = 'workspaces';
4 5
5class WorkspaceSchema extends Schema { 6 public async up(): Promise<void> {
6 up() { 7 this.schema.createTable(this.tableName, table => {
7 this.create('workspaces', (table) => {
8 table.increments(); 8 table.increments();
9 table.string('workspaceId', 80).notNullable().unique(); 9 table.string('workspaceId', 80).notNullable().unique();
10 table.string('userId', 80).notNullable(); 10 table.string('userId', 80).notNullable();
@@ -16,9 +16,7 @@ class WorkspaceSchema extends Schema {
16 }); 16 });
17 } 17 }
18 18
19 down() { 19 public async down(): Promise<void> {
20 this.drop('workspaces'); 20 this.schema.dropTable(this.tableName);
21 } 21 }
22} 22}
23
24module.exports = WorkspaceSchema;
diff --git a/database/migrations/1612629845398_users_update_schema.js b/database/migrations/1612629845398_users_update_schema.js
deleted file mode 100644
index 10b82aa..0000000
--- a/database/migrations/1612629845398_users_update_schema.js
+++ /dev/null
@@ -1,18 +0,0 @@
1/** @type {import('@adonisjs/lucid/src/Schema')} */
2const Schema = use('Schema');
3
4class UsersUpdateSchema extends Schema {
5 up() {
6 this.table('users', (table) => {
7 table.string('lastname', 80).notNullable().default('');
8 });
9 }
10
11 down() {
12 this.table('users', (table) => {
13 table.dropColumn('lastname');
14 });
15 }
16}
17
18module.exports = UsersUpdateSchema;
diff --git a/database/migrations/1612629845398_users_update_schema.ts b/database/migrations/1612629845398_users_update_schema.ts
new file mode 100644
index 0000000..8831ea4
--- /dev/null
+++ b/database/migrations/1612629845398_users_update_schema.ts
@@ -0,0 +1,15 @@
1import BaseSchema from '@ioc:Adonis/Lucid/Schema';
2
3export default class extends BaseSchema {
4 public async up(): Promise<void> {
5 this.schema.alterTable('users', table => {
6 table.string('lastname', 80).notNullable().defaultTo('');
7 });
8 }
9
10 public async down(): Promise<void> {
11 this.schema.alterTable('users', table => {
12 table.dropColumn('lastname');
13 });
14 }
15}
diff --git a/database/migrations/1658076326250_correct_token_relations.ts b/database/migrations/1658076326250_correct_token_relations.ts
new file mode 100644
index 0000000..5486657
--- /dev/null
+++ b/database/migrations/1658076326250_correct_token_relations.ts
@@ -0,0 +1,22 @@
1import BaseSchema from '@ioc:Adonis/Lucid/Schema';
2
3export default class extends BaseSchema {
4 protected tableName = 'tokens';
5
6 public async up(): Promise<void> {
7 await this.db.rawQuery(
8 'DELETE FROM tokens WHERE user_id NOT IN (SELECT id FROM users)',
9 );
10
11 this.schema.alterTable(this.tableName, table => {
12 table.dropForeign('user_id');
13
14 table.foreign('user_id').references('users.id').onDelete('cascade');
15 });
16 }
17
18 public async down(): Promise<void> {
19 // Don't set it back withouth onDelete as the
20 // tests will break.
21 }
22}
diff --git a/database/migrations/1696110557648_jwt_tokens.ts b/database/migrations/1696110557648_jwt_tokens.ts
new file mode 100644
index 0000000..9400de7
--- /dev/null
+++ b/database/migrations/1696110557648_jwt_tokens.ts
@@ -0,0 +1,29 @@
1import BaseSchema from '@ioc:Adonis/Lucid/Schema';
2
3export default class JwtTokens extends BaseSchema {
4 protected tableName = 'jwt_tokens';
5
6 public async up() {
7 this.schema.createTable(this.tableName, table => {
8 table.increments('id').primary();
9 table
10 .integer('user_id')
11 .unsigned()
12 .references('users.id')
13 .onDelete('CASCADE');
14 table.string('name').notNullable();
15 table.string('type').notNullable();
16 table.string('token', 64).notNullable().unique();
17 table.timestamp('expires_at', { useTz: true }).nullable();
18 table.string('refresh_token').notNullable().unique().index();
19 table
20 .timestamp('refresh_token_expires_at', { useTz: true })
21 .notNullable();
22 table.timestamp('created_at', { useTz: true }).notNullable();
23 });
24 }
25
26 public async down() {
27 this.schema.dropTable(this.tableName);
28 }
29}