diff --git a/src/database/migrations/1662081949950-CreatePassengersRequests.ts b/src/database/migrations/1662081949950-CreatePassengersRequests.ts new file mode 100644 index 0000000..a906f70 --- /dev/null +++ b/src/database/migrations/1662081949950-CreatePassengersRequests.ts @@ -0,0 +1,107 @@ +import { + MigrationInterface, + QueryRunner, + Table, + TableForeignKey, + TableIndex, +} from 'typeorm'; + +export class CreatePassengersRequests1662081949950 + implements MigrationInterface +{ + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: 'passengers_requests', + columns: [ + { + name: 'id_request', + type: 'integer', + isPrimary: true, + isGenerated: true, + generationStrategy: 'increment', + }, + { + name: 'itinerary_id', + type: 'integer', + }, + { + name: 'user_id', + type: 'uuid', + }, + { + name: 'status', + type: 'enum', + enum: ['pending', 'accepted', 'rejected'], + }, + { + name: 'created_at', + type: 'timestamp', + default: 'now()', + }, + { + name: 'address', + type: 'varchar', + }, + { + name: 'latitude_address', + type: 'numeric', + }, + { + name: 'longitude_address', + type: 'numeric', + }, + ], + }), + ); + + await queryRunner.createForeignKey( + 'passengers_requests', + new TableForeignKey({ + name: 'passengers_requests_itinerary_id_fk', // nome da FK, serve para referenciar numa exclusão pelo QueryRunner se necessário + columnNames: ['itinerary_id'], // coluna que vai virar FK + referencedColumnNames: ['id_itinerary'], // coluna PK da tabela referenciada + referencedTableName: 'itineraries', // nome da tabela que possui a PK + onDelete: 'SET NULL', + onUpdate: 'CASCADE', + }), + ); + + await queryRunner.createForeignKey( + 'passengers_requests', + new TableForeignKey({ + name: 'passengers_requests_user_id_fk', // nome da FK, serve para referenciar numa exclusão pelo QueryRunner se necessário + columnNames: ['user_id'], // coluna que vai virar FK + referencedColumnNames: ['id_user'], // coluna PK da tabela referenciada + referencedTableName: 'users', // nome da tabela que possui a PK + onDelete: 'SET NULL', + onUpdate: 'CASCADE', + }), + ); + + await queryRunner.createIndex( + 'passengers_requests', + new TableIndex({ + name: 'passengers_requests_idx', + columnNames: ['itinerary_id', 'user_id', 'status', 'created_at'], + isUnique: true, + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropTable('passengers_requests'); + await queryRunner.dropForeignKey( + 'passengers_requests', + 'passengers_requests_itinerary_id_fk', + ); + await queryRunner.dropForeignKey( + 'passengers_requests', + 'passengers_requests_user_id_fk', + ); + await queryRunner.dropIndex( + 'passengers_requests', + 'passengers_requests_idx', + ); + } +}