diff --git a/src/database/migrations/1659404395471-CreateItineraries.ts b/src/database/migrations/1659404395471-CreateItineraries.ts new file mode 100644 index 0000000..0ff2d25 --- /dev/null +++ b/src/database/migrations/1659404395471-CreateItineraries.ts @@ -0,0 +1,91 @@ +import { MigrationInterface, QueryRunner, Table, TableForeignKey, TableIndex } from 'typeorm'; + +export class CreateItineraries1659404395471 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: 'itineraries', + columns: [ + { + name: 'id_itinerary', + type: 'integer', + isPrimary: true, + isGenerated: true, + generationStrategy: 'increment', + }, + { + name: 'van_plate', + type: 'varchar', + }, + { + name: 'price', + type: 'float', + }, + { + name: 'days_of_week', + type: 'bit', + isNullable: true, + }, + { + name: 'specific_day', + type: 'date', + isNullable: true, + }, + { + name: 'estimated_departure_time', + type: 'time', + }, + { + name: 'estimated_arrival_time', + type: 'time', + }, + { + name: 'available_seats', + type: 'integer', + }, + { + name: 'itinerary_nickname', + type: 'varchar', + }, + { + name: 'created_at', + type: 'timestamp', + default: 'now()', + }, + { + name: 'updated_at', + type: 'timestamp', + default: 'now()', + }, + ], + }), + ); + + await queryRunner.createForeignKey( + 'itineraries', + new TableForeignKey({ + name: 'itineraries_van_plate_fk', // nome da FK, serve para referenciar numa exclusão pelo QueryRunner se necessário + columnNames: ['van_plate'], // coluna que vai virar FK + referencedColumnNames: ['plate'], // coluna PK da primeira tabela + referencedTableName: 'vans', // nome da tabela que possui a PK + onDelete: 'SET NULL', + onUpdate: 'CASCADE', + }), + ); + + await queryRunner.createIndex( + 'itineraries', + new TableIndex({ + name: 'itineraries_idx', + columnNames: ['van_plate', 'days_of_week', 'specific_day', 'estimated_departure_time'], + isUnique: true, + }) + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropTable('itineraries'); + await queryRunner.dropForeignKey('itineraries', 'itineraries_van_plate_fk'); + await queryRunner.dropIndex('itineraries', 'itineraries_idx'); + } +} diff --git a/src/database/migrations/1660009211327-CreateNeighborhoodsServed.ts b/src/database/migrations/1660009211327-CreateNeighborhoodsServed.ts new file mode 100644 index 0000000..d7f55d8 --- /dev/null +++ b/src/database/migrations/1660009211327-CreateNeighborhoodsServed.ts @@ -0,0 +1,55 @@ +import { MigrationInterface, QueryRunner, Table, TableForeignKey } from 'typeorm'; + +export class CreateNeighborhoodsServed1660009211327 + implements MigrationInterface +{ + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: 'neighborhoods_served', + columns: [ + { + name: 'id_neighborhood', + type: 'integer', + isPrimary: true, + isGenerated: true, + generationStrategy: 'increment', + }, + { + name: 'itinerary_id', + type: 'integer', + }, + { + name: 'name', + type: 'varchar', + }, + { + name: 'latitude', + type: 'numeric', + }, + { + name: 'longitude', + type: 'numeric', + } + ], + }), + ); + + await queryRunner.createForeignKey( + 'neighborhoods_served', + new TableForeignKey({ + name: 'neighborhoods_served_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', + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropTable('neighborhoods_served'); + await queryRunner.dropForeignKey('neighborhoods_served', 'neighborhoods_served_itinerary_id_fk'); + } +} diff --git a/src/database/migrations/1660009323138-CreateDestinations.ts b/src/database/migrations/1660009323138-CreateDestinations.ts new file mode 100644 index 0000000..0c49875 --- /dev/null +++ b/src/database/migrations/1660009323138-CreateDestinations.ts @@ -0,0 +1,53 @@ +import { MigrationInterface, QueryRunner, Table, TableForeignKey } from 'typeorm'; + +export class CreateDestinations1660009323138 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: 'destinations', + columns: [ + { + name: 'id_destination', + type: 'integer', + isPrimary: true, + isGenerated: true, + generationStrategy: 'increment', + }, + { + name: 'itinerary_id', + type: 'integer', + }, + { + name: 'name', + type: 'varchar', + }, + { + name: 'latitude', + type: 'numeric', + }, + { + name: 'longitude', + type: 'numeric', + }, + ], + }), + ); + + await queryRunner.createForeignKey( + 'destinations', + new TableForeignKey({ + name: 'destinations_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', + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropTable('destinations'); + await queryRunner.dropForeignKey('destinations', 'destinations_itinerary_id_fk'); + } +} diff --git a/src/database/migrations/1660010452826-CreatePassengers.ts b/src/database/migrations/1660010452826-CreatePassengers.ts new file mode 100644 index 0000000..9a0fd6d --- /dev/null +++ b/src/database/migrations/1660010452826-CreatePassengers.ts @@ -0,0 +1,68 @@ +import { MigrationInterface, QueryRunner, Table, TableForeignKey, TableIndex } from 'typeorm'; + +export class CreatePassengers1660010452826 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: 'passengers', + columns: [ + { + name: 'id_passenger', + type: 'integer', + isPrimary: true, + isGenerated: true, + generationStrategy: 'increment', + }, + { + name: 'itinerary_id', + type: 'integer', + }, + { + name: 'user_id', + type: 'uuid', + }, + ], + }), + ); + + await queryRunner.createForeignKey( + 'passengers', + new TableForeignKey({ + name: 'passengers_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', + new TableForeignKey({ + name: 'passengers_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', + new TableIndex({ + name: 'passengers_itinerary_user_idx', + columnNames: ['itinerary_id', 'user_id'], + isUnique: true, + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropTable('passengers'); + await queryRunner.dropForeignKey('passengers', 'passengers_itinerary_id_fk'); + await queryRunner.dropForeignKey('passengers', 'passengers_user_id_fk'); + await queryRunner.dropIndex('passengers', 'passengers_itinerary_user_idx'); + } +} diff --git a/src/database/migrations/1660010491828-CreateRouteHistoric.ts b/src/database/migrations/1660010491828-CreateRouteHistoric.ts new file mode 100644 index 0000000..095e67a --- /dev/null +++ b/src/database/migrations/1660010491828-CreateRouteHistoric.ts @@ -0,0 +1,76 @@ +import { MigrationInterface, QueryRunner, Table, TableForeignKey, TableIndex } from 'typeorm'; + +export class CreateRouteHistoric1660010491828 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: 'route_historic', + columns: [ + { + name: 'id_historic', + type: 'integer', + isPrimary: true, + isGenerated: true, + generationStrategy: 'increment', + }, + { + name: 'itinerary_id', + type: 'integer', + }, + { + name: 'user_id', + type: 'uuid', + }, + { + name: 'is_return', + type: 'boolean', + }, + { + name: 'date', + type: 'date', + }, + ], + }), + ); + + await queryRunner.createForeignKey( + 'route_historic', + new TableForeignKey({ + name: 'route_historic_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( + 'route_historic', + new TableForeignKey({ + name: 'route_historic_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( + 'route_historic', + new TableIndex({ + name: 'itinerary_historic_idx', + columnNames: ['itinerary_id', 'user_id', 'is_return', 'date'], + isUnique: true, + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropTable('route_historic'); + await queryRunner.dropForeignKey('route_historic', 'route_historic_itinerary_id_fk'); + await queryRunner.dropForeignKey('route_historic', 'route_historic_user_id_fk'); + await queryRunner.dropIndex('route_historic', 'itinerary_historic_idx'); + } +} diff --git a/src/routes/index.ts b/src/routes/index.ts index c5ed39c..52d74f5 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -1,8 +1,8 @@ import { Router } from 'express'; -import searchRoutes from './search.routes'; +import searchRoutes from './search.routes'; import sessionsRouter from './sessions.routes'; -import transportesRouter from './transportes.routes'; +import transportsRouter from './transports.routes'; import usersRouter from './users.routes'; import carsRouter from './cars.routes'; import vansRouter from './vans.routes'; @@ -12,7 +12,7 @@ const routes = Router(); routes.use('/users', usersRouter); routes.use('/sessions', sessionsRouter); routes.use('/search', searchRoutes); -routes.use('/transportes', transportesRouter); +routes.use('/transports', transportsRouter); routes.use('/cars', carsRouter); routes.use('/vans', vansRouter); diff --git a/src/routes/transportes.routes.ts b/src/routes/transports.routes.ts similarity index 95% rename from src/routes/transportes.routes.ts rename to src/routes/transports.routes.ts index ef4c2a4..f8caff8 100644 --- a/src/routes/transportes.routes.ts +++ b/src/routes/transports.routes.ts @@ -2,9 +2,9 @@ import { Router } from 'express'; import { getRepository } from 'typeorm'; import CalculateDistanceBetweenCoords from '../services/CalculateDistanceBetweenCoords'; -const transportesRouter = Router(); +const transporteRouter = Router(); -transportesRouter.post('/', async (request, response) => { +transporteRouter.post('/', async (request, response) => { const { coordinatesFrom, coordinatesTo } = request.body; console.log(coordinatesFrom, coordinatesTo); const data = [ @@ -95,4 +95,4 @@ transportesRouter.post('/', async (request, response) => { return response.json(transportsFiltered); }); -export default transportesRouter; +export default transporteRouter;