From 73c929f25e322ab466c76e9fde8d297d0b24bb17 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Mon, 22 Apr 2024 15:19:17 +0200 Subject: [PATCH] feat: Create access tokens model --- .../20240422130323_create_access_tokens.js | 15 +++++++++ packages/backend/src/models/access-token.js | 32 +++++++++++++++++++ packages/backend/src/models/user.js | 9 ++++++ 3 files changed, 56 insertions(+) create mode 100644 packages/backend/src/db/migrations/20240422130323_create_access_tokens.js create mode 100644 packages/backend/src/models/access-token.js diff --git a/packages/backend/src/db/migrations/20240422130323_create_access_tokens.js b/packages/backend/src/db/migrations/20240422130323_create_access_tokens.js new file mode 100644 index 00000000..d71af5b8 --- /dev/null +++ b/packages/backend/src/db/migrations/20240422130323_create_access_tokens.js @@ -0,0 +1,15 @@ +export async function up(knex) { + return knex.schema.createTable('access_tokens', (table) => { + table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid()')); + table.string('token').notNullable(); + table.integer('expires_in').notNullable(); + table.timestamp('revoked_at').nullable(); + table.uuid('user_id').references('id').inTable('users'); + + table.timestamps(true, true); + }); +} + +export async function down(knex) { + return knex.schema.dropTable('access_tokens'); +} diff --git a/packages/backend/src/models/access-token.js b/packages/backend/src/models/access-token.js new file mode 100644 index 00000000..7afb4776 --- /dev/null +++ b/packages/backend/src/models/access-token.js @@ -0,0 +1,32 @@ +import Base from './base.js'; +import User from './user.js'; + +class AccessToken extends Base { + static tableName = 'access_tokens'; + + static jsonSchema = { + type: 'object', + required: ['token', 'expiresIn'], + + properties: { + id: { type: 'string', format: 'uuid' }, + userId: { type: 'string', format: 'uuid' }, + token: { type: 'string', minLength: 32 }, + expiresIn: { type: 'integer' }, + revokedAt: { type: ['string', 'null'], format: 'date-time' }, + }, + }; + + static relationMappings = () => ({ + user: { + relation: Base.BelongsToOneRelation, + modelClass: User, + join: { + from: 'access_tokens.user_id', + to: 'users.id', + }, + }, + }); +} + +export default AccessToken; diff --git a/packages/backend/src/models/user.js b/packages/backend/src/models/user.js index 9452e8b0..aca2ea7b 100644 --- a/packages/backend/src/models/user.js +++ b/packages/backend/src/models/user.js @@ -8,6 +8,7 @@ import userAbility from '../helpers/user-ability.js'; import createAuthTokenByUserId from '../helpers/create-auth-token-by-user-id.js'; import Base from './base.js'; import App from './app.js'; +import AccessToken from './access-token.js'; import Connection from './connection.js'; import Execution from './execution.js'; import Flow from './flow.js'; @@ -42,6 +43,14 @@ class User extends Base { }; static relationMappings = () => ({ + accessTokens: { + relation: Base.HasManyRelation, + modelClass: AccessToken, + join: { + from: 'users.id', + to: 'access_tokens.user_id', + }, + }, connections: { relation: Base.HasManyRelation, modelClass: Connection,