import { MigrationInterface, QueryRunner, TableForeignKey } from 'typeorm'; import { Table } from 'typeorm/schema-builder/table/Table'; export class CreateUserPersonalAccessTokensTable1746727457618 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { await queryRunner.createTable( new Table({ name: 'user_personal_access_tokens', columns: [ { name: 'id', type: 'uuid', isPrimary: true, isGenerated: true, generationStrategy: 'uuid', }, { name: 'user_id', type: 'uuid', isNullable: false, }, { name: 'app_id', type: 'uuid', isNullable: true, }, { name: 'token_hash', type: 'varchar', length: '256', isNullable: false, }, { name: 'scope', type: 'enum', enum: ['app', 'workspace'], isNullable: false, }, { name: 'session_expiry_minutes', type: 'int', isNullable: false, default: 60, }, { name: 'created_at', type: 'timestamp', default: 'now()', }, { name: 'expires_at', type: 'timestamp', isNullable: false, }, ], }), true ); await queryRunner.createForeignKey( 'user_personal_access_tokens', new TableForeignKey({ columnNames: ['user_id'], referencedColumnNames: ['id'], referencedTableName: 'users', onDelete: 'CASCADE', }) ); await queryRunner.createForeignKey( 'user_personal_access_tokens', new TableForeignKey({ columnNames: ['app_id'], referencedColumnNames: ['id'], referencedTableName: 'apps', onDelete: 'CASCADE', }) ); } public async down(queryRunner: QueryRunner): Promise {} }