From ac4471642881d06bc0c3022cc895a279fa5d5847 Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Mon, 20 Jun 2022 00:52:31 -0500 Subject: [PATCH] =?UTF-8?q?Alterando=20l=C3=B3gica=20das=20rotas=20de=20va?= =?UTF-8?q?ns=20e=20MER=20da=20tabela=20Vans?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1655691282002-CreateVansTable.ts | 35 ++++-- .../1655692363126-CreateVanLocatorTable.ts | 54 --------- .../1655692498005-CreateVanDocumentsTable.ts | 42 ------- ...24-AddFKVanLocatorIdToVanDocumentsTable.ts | 26 ---- ...836-AddFKVanDocumentToVanDocumentsTable.ts | 23 ---- src/models/Van.ts | 30 +++-- src/models/VanDocuments.ts | 33 ----- src/models/VanLocator.ts | 36 ------ src/routes/index.ts | 2 + src/routes/vans.routes.ts | 113 +++++++----------- src/services/CreateVanLocatorService.ts | 64 ---------- src/services/CreateVanService.ts | 30 +++-- src/services/UpdateVanLocatorService.ts | 56 --------- src/services/UpdateVanPlateService.ts | 32 +++++ src/services/UpdateVanService.ts | 30 +++-- 15 files changed, 171 insertions(+), 435 deletions(-) delete mode 100644 src/database/migrations/1655692363126-CreateVanLocatorTable.ts delete mode 100644 src/database/migrations/1655692498005-CreateVanDocumentsTable.ts delete mode 100644 src/database/migrations/1655692624024-AddFKVanLocatorIdToVanDocumentsTable.ts delete mode 100644 src/database/migrations/1655696991836-AddFKVanDocumentToVanDocumentsTable.ts delete mode 100644 src/models/VanDocuments.ts delete mode 100644 src/models/VanLocator.ts delete mode 100644 src/services/CreateVanLocatorService.ts delete mode 100644 src/services/UpdateVanLocatorService.ts create mode 100644 src/services/UpdateVanPlateService.ts diff --git a/src/database/migrations/1655691282002-CreateVansTable.ts b/src/database/migrations/1655691282002-CreateVansTable.ts index fce9a08..0cd3e25 100644 --- a/src/database/migrations/1655691282002-CreateVansTable.ts +++ b/src/database/migrations/1655691282002-CreateVansTable.ts @@ -6,16 +6,10 @@ export class CreateVansTable1655691282002 implements MigrationInterface { new Table({ name: 'vans', columns: [ - { - name: 'id_van', - type: 'uuid', - isPrimary: true, - generationStrategy: 'uuid', - default: 'uuid_generate_v4()', - }, { name: 'plate', type: 'varchar', + isPrimary: true, }, { name: 'brand', @@ -30,7 +24,32 @@ export class CreateVansTable1655691282002 implements MigrationInterface { type: 'numeric', }, { - name: 'document', + name: 'document_status', + type: 'boolean', + isNullable: true + }, + { + name: 'locator_name', + type: 'varchar', + isNullable: true + }, + { + name: 'locator_address', + type: 'varchar', + isNullable: true + }, + { + name: 'locator_complement', + type: 'varchar', + isNullable: true + }, + { + name: 'locator_city', + type: 'varchar', + isNullable: true + }, + { + name: 'locator_state', type: 'varchar', isNullable: true }, diff --git a/src/database/migrations/1655692363126-CreateVanLocatorTable.ts b/src/database/migrations/1655692363126-CreateVanLocatorTable.ts deleted file mode 100644 index ea3564d..0000000 --- a/src/database/migrations/1655692363126-CreateVanLocatorTable.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { MigrationInterface, QueryRunner, Table } from 'typeorm'; - -export class CreateVanLocatorTable1655692363126 implements MigrationInterface { - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.createTable( - new Table({ - name: 'vanLocator', - columns: [ - { - name: 'id_vanLocator', - type: 'uuid', - isPrimary: true, - generationStrategy: 'uuid', - default: 'uuid_generate_v4()', - }, - { - name: 'name', - type: 'varchar', - }, - { - name: 'address', - type: 'varchar', - }, - { - name: 'complement', - type: 'varchar', - }, - { - name: 'city', - type: 'varchar', - }, - { - name: 'state', - type: 'varchar', - }, - { - name: 'created_at', - type: 'timestamp', - default: 'now()', - }, - { - name: 'updated_at', - type: 'timestamp', - default: 'now()', - }, - ], - }), - ); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.dropTable('vanLocator'); - } -} diff --git a/src/database/migrations/1655692498005-CreateVanDocumentsTable.ts b/src/database/migrations/1655692498005-CreateVanDocumentsTable.ts deleted file mode 100644 index d3b205c..0000000 --- a/src/database/migrations/1655692498005-CreateVanDocumentsTable.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { MigrationInterface, QueryRunner, Table } from 'typeorm'; - -export class CreateVanDocumentsTable1655692498005 - implements MigrationInterface -{ - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.createTable( - new Table({ - name: 'vanDocuments', - columns: [ - { - name: 'document_van', - type: 'varchar', - isPrimary: true, - }, - { - name: 'vanLocator_id', - type: 'uuid', - }, - { - name: 'document_status', - type: 'varchar', - }, - { - name: 'created_at', - type: 'timestamp', - default: 'now()', - }, - { - name: 'updated_at', - type: 'timestamp', - default: 'now()', - }, - ], - }), - ); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.dropTable('vanDocuments'); - } -} diff --git a/src/database/migrations/1655692624024-AddFKVanLocatorIdToVanDocumentsTable.ts b/src/database/migrations/1655692624024-AddFKVanLocatorIdToVanDocumentsTable.ts deleted file mode 100644 index 0fab958..0000000 --- a/src/database/migrations/1655692624024-AddFKVanLocatorIdToVanDocumentsTable.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { MigrationInterface, QueryRunner, TableForeignKey } from 'typeorm'; - -export class AddFKVanLocatorIdToVanDocumentsTable1655692624024 - implements MigrationInterface -{ - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.createForeignKey( - 'vanDocuments', - new TableForeignKey({ - name: 'VanLocatorVanDocuments', // nome da FK, serve para referenciar numa exclusão pelo QueryRunner se necessário - columnNames: ['vanLocator_id'], // coluna que vai virar FK - referencedColumnNames: ['id_vanLocator'], // coluna PK da primeira tabela - referencedTableName: 'vanLocator', // nome da tabela que possui a PK - onDelete: 'SET NULL', - onUpdate: 'CASCADE', - }), - ); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.dropForeignKey( - 'vanDocuments', - 'VanLocatorVanDocuments', - ); - } -} diff --git a/src/database/migrations/1655696991836-AddFKVanDocumentToVanDocumentsTable.ts b/src/database/migrations/1655696991836-AddFKVanDocumentToVanDocumentsTable.ts deleted file mode 100644 index 8e782b0..0000000 --- a/src/database/migrations/1655696991836-AddFKVanDocumentToVanDocumentsTable.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { MigrationInterface, QueryRunner, TableForeignKey } from 'typeorm'; - -export class AddFKVanDocumentToVanDocumentsTable1655696991836 - implements MigrationInterface -{ - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.createForeignKey( - 'vanDocuments', - new TableForeignKey({ - name: 'VanDocumentVanDocuments', // nome da FK, serve para referenciar numa exclusão pelo QueryRunner se necessário - columnNames: ['document_van'], // coluna que vai virar FK - referencedColumnNames: ['document'], // coluna PK da primeira tabela - referencedTableName: 'vanDocuments', // nome da tabela que possui a PK - onDelete: 'SET NULL', - onUpdate: 'CASCADE', - }), - ); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.dropForeignKey('vanDocuments', 'VanDocumentVanDocuments'); - } -} diff --git a/src/models/Van.ts b/src/models/Van.ts index 46ee6fd..4c5735d 100644 --- a/src/models/Van.ts +++ b/src/models/Van.ts @@ -6,16 +6,12 @@ import { UpdateDateColumn, JoinColumn, OneToOne, + PrimaryColumn, } from 'typeorm'; -import VanDocuments from './VanDocuments'; -import VanLocator from './VanLocator'; @Entity('vans') class Van { - @PrimaryGeneratedColumn('uuid') - id_van: string; - - @Column() + @PrimaryColumn() plate: string; @Column() @@ -25,11 +21,25 @@ class Van { model: string; @Column() - seats_number: number; + seats_number: string; - @OneToOne(() => VanLocator, { eager: true }) - @JoinColumn({ name: 'document' }) - locator: VanLocator; + @Column() + document_status: boolean + + @Column() + locator_name: string; + + @Column() + locator_address: string; + + @Column() + locator_complement: string; + + @Column() + locator_city: string; + + @Column() + locator_state: string; @CreateDateColumn() created_at: Date; diff --git a/src/models/VanDocuments.ts b/src/models/VanDocuments.ts deleted file mode 100644 index 925fc0e..0000000 --- a/src/models/VanDocuments.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - Entity, - Column, - CreateDateColumn, - UpdateDateColumn, - JoinColumn, - OneToOne, - PrimaryColumn, -} from 'typeorm'; -import VanLocator from './VanLocator'; - -@Entity('vanDocuments') -class VanDocuments { - @PrimaryColumn() - @OneToOne(() => VanDocuments, { eager: true }) - @JoinColumn({ name: 'document' }) - vanDocuments: string; - - @OneToOne(() => VanLocator, { eager: true }) - @JoinColumn({ name: 'vanLocator_id' }) - vanLocator: VanLocator; - - @Column() - document_status: string; - - @CreateDateColumn() - created_at: Date; - - @UpdateDateColumn() - updated_at: Date; -} - -export default VanDocuments; diff --git a/src/models/VanLocator.ts b/src/models/VanLocator.ts deleted file mode 100644 index e99dcfb..0000000 --- a/src/models/VanLocator.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { - Entity, - Column, - PrimaryGeneratedColumn, - CreateDateColumn, - UpdateDateColumn, -} from 'typeorm'; - -@Entity('vanLocator') -class VanLocator { - @PrimaryGeneratedColumn('uuid') - id_vanLocator: string; - - @Column() - name: string; - - @Column() - address: string; - - @Column() - complement: string; - - @Column() - city: string; - - @Column() - state: string; - - @CreateDateColumn() - created_at: Date; - - @UpdateDateColumn() - updated_at: Date; -} - -export default VanLocator; diff --git a/src/routes/index.ts b/src/routes/index.ts index 449653d..c5ed39c 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -5,6 +5,7 @@ import sessionsRouter from './sessions.routes'; import transportesRouter from './transportes.routes'; import usersRouter from './users.routes'; import carsRouter from './cars.routes'; +import vansRouter from './vans.routes'; const routes = Router(); @@ -13,5 +14,6 @@ routes.use('/sessions', sessionsRouter); routes.use('/search', searchRoutes); routes.use('/transportes', transportesRouter); routes.use('/cars', carsRouter); +routes.use('/vans', vansRouter); export default routes; diff --git a/src/routes/vans.routes.ts b/src/routes/vans.routes.ts index e9ddfdc..c30cde8 100644 --- a/src/routes/vans.routes.ts +++ b/src/routes/vans.routes.ts @@ -7,10 +7,7 @@ import ensureAuthenticated from '../middlewares/ensureAuthenticated'; import FindVanService from '../services/FindVanService'; import CreateVanService from '../services/CreateVanService'; import UpdateVanService from '../services/UpdateVanService'; -import VanLocator from '../models/VanLocator'; -import FindVanLocatorService from '../services/FindVanLocatorService'; -import CreateVanLocatorService from '../services/CreateVanLocatorService'; -import UpdateVanLocatorService from '../services/UpdateVanLocatorService'; +import UpdateVanPlateService from '../services/UpdateVanPlateService'; const vansRouter = Router(); @@ -22,18 +19,28 @@ vansRouter.get('/list', async (request, response) => { return response.json({ data: vans }); }); -vansRouter.get('/:id', ensureAuthenticated, async (request, response) => { - const { id } = request.params; +vansRouter.get('/:plate', ensureAuthenticated, async (request, response) => { + const { plate } = request.params; const findVanService = new FindVanService(); - const van = await findVanService.execute(id); + const van = await findVanService.execute(plate); return response.json({ data: van }); }); vansRouter.post('/', async (request, response) => { - const { plate, brand, model, seats_number } = request.body; + const { + plate, + brand, + model, + seats_number, + locator_name, + locator_address, + locator_complement, + locator_city, + locator_state, + } = request.body; const createVanService = new CreateVanService(); @@ -42,6 +49,11 @@ vansRouter.post('/', async (request, response) => { brand, model, seats_number, + locator_name, + locator_address, + locator_complement, + locator_city, + locator_state, }); return response.json({ message: 'Van criada com sucesso.', data: van }); @@ -51,17 +63,31 @@ vansRouter.patch( '/edit/:plate', ensureAuthenticated, async (request, response) => { - const { brand, model, seats_number } = request.body; + const { + brand, + model, + seats_number, + locator_name, + locator_address, + locator_complement, + locator_city, + locator_state, + } = request.body; const { plate } = request.params; - const updateUserService = new UpdateVanService(); + const updateVanService = new UpdateVanService(); - await updateUserService.execute({ + await updateVanService.execute({ plate, brand, model, seats_number, + locator_name, + locator_address, + locator_complement, + locator_city, + locator_state, }); return response.json({ @@ -70,72 +96,23 @@ vansRouter.patch( }, ); -// locadores de van -vansRouter.get('/locator/list', async (request, response) => { - const vanLocatorsRepository = getRepository(VanLocator); - - const vansLocators = await vanLocatorsRepository.find(); - - return response.json({ data: vansLocators }); -}); - -vansRouter.get( - '/locator/:id', - ensureAuthenticated, - async (request, response) => { - const { id } = request.params; - - const findVanLocatorService = new FindVanLocatorService(); - - const vanLocator = await findVanLocatorService.execute(id); - - return response.json({ data: vanLocator }); - }, -); - -vansRouter.post('/locator/:id_van', async (request, response) => { - const { name, address, complement, city, state } = request.body; - - const { id_van } = request.params; - - const createVanLocatorService = new CreateVanLocatorService(); - - const vanLocator = await createVanLocatorService.execute({ - id_van, - name, - address, - complement, - city, - state, - }); - - return response.json({ - message: 'Locador da van configurado com sucesso.', - data: vanLocator, - }); -}); - vansRouter.patch( - '/locator/edit/:id_van', + '/edit/plate/:plate', ensureAuthenticated, async (request, response) => { - const { name, address, complement, city, state } = request.body; + const { newPlate } = request.body; - const { id_van } = request.params; + const { plate } = request.params; - const updateVanLocatorService = new UpdateVanLocatorService(); + const updateVanPlateService = new UpdateVanPlateService(); - await updateVanLocatorService.execute({ - id_van, - name, - address, - complement, - city, - state, + await updateVanPlateService.execute({ + oldPlate: plate, + newPlate, }); return response.json({ - message: 'Informações da van atualizadas com sucesso.', + message: 'Placa da van atualizada com sucesso.', }); }, ); diff --git a/src/services/CreateVanLocatorService.ts b/src/services/CreateVanLocatorService.ts deleted file mode 100644 index 79f31cc..0000000 --- a/src/services/CreateVanLocatorService.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { getRepository } from 'typeorm'; -import { v4 } from 'uuid'; -import { hash } from 'bcryptjs'; - -import AppError from '../errors/AppError'; - -import Van from '../models/Van'; -import VanLocator from '../models/VanLocator'; - -interface Request { - id_van: string; - name: string; - address: string; - complement: string; - city: string; - state: string; -} - -class CreateVanLocatorService { - public async execute({ - id_van, - name, - address, - complement, - city, - state, - }: Request): Promise { - const vansRepository = getRepository(Van); - const vansLocatorsRepository = getRepository(VanLocator); - - const van = await vansRepository.findOne({ - where: { id_van }, - }); - - if (!van) { - throw new AppError('A van informada não existe.', 404); - } - - if (van.locator) { - throw new AppError( - 'A van informada já possui um locador cadastrado.', - 400, - ); - } - - const vanLocator = vansLocatorsRepository.create({ - name, - address, - complement, - city, - state, - }); - - await vansLocatorsRepository.save(vanLocator); - - // linka o locador para o registro da van - van.locator = vanLocator - await vansRepository.save(van); - - return vanLocator; - } -} - -export default CreateVanLocatorService; diff --git a/src/services/CreateVanService.ts b/src/services/CreateVanService.ts index e78058d..7e392b2 100644 --- a/src/services/CreateVanService.ts +++ b/src/services/CreateVanService.ts @@ -1,6 +1,4 @@ import { getRepository } from 'typeorm'; -import { v4 } from 'uuid'; -import { hash } from 'bcryptjs'; import AppError from '../errors/AppError'; @@ -11,6 +9,11 @@ interface Request { brand: string; model: string; seats_number: string; + locator_name: string; + locator_address: string; + locator_complement: string; + locator_city: string; + locator_state: string; } class CreateVanService { @@ -19,23 +22,36 @@ class CreateVanService { brand, model, seats_number, + locator_name, + locator_address, + locator_complement, + locator_city, + locator_state, }: Request): Promise { const vansRepository = getRepository(Van); - const checkVanPlateExists = await vansRepository.findOne({ + const vanExists = await vansRepository.findOne({ where: { plate }, }); - if (checkVanPlateExists) { - throw new AppError('Placa do veículo já cadastrado!', 409); + if (vanExists) { + throw new AppError( + 'Uma van com a placa informada já foi cadastrada.', + 409, + ); } const van = vansRepository.create({ - id_van: v4(), plate, brand, model, - seats_number: (Number)(seats_number), + seats_number, + document_status: false, + locator_name, + locator_address, + locator_complement, + locator_city, + locator_state, }); await vansRepository.save(van); diff --git a/src/services/UpdateVanLocatorService.ts b/src/services/UpdateVanLocatorService.ts deleted file mode 100644 index b2e4b06..0000000 --- a/src/services/UpdateVanLocatorService.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { getRepository } from 'typeorm'; - -import AppError from '../errors/AppError'; - -import Van from '../models/Van'; -import VanLocator from '../models/VanLocator'; - -interface Request { - id_van: string; - name: string; - address: string; - complement: string; - city: string; - state: string; -} - -class UpdateVanLocatorService { - public async execute({ - id_van, - name, - address, - complement, - city, - state, - }: Request): Promise { - const vansRepository = getRepository(Van); - const vansLocatorsRepository = getRepository(VanLocator); - - const van = await vansRepository.findOne({ - where: { id_van }, - }); - - if (!van) { - throw new AppError('A van informada não existe.', 404); - } - - if (!van.locator) { - throw new AppError( - 'A van informada não possui um locador cadastrado.', - 404, - ); - } - - if (name) van.locator.name = name - if (address) van.locator.address = address - if (complement) van.locator.complement = complement - if (city) van.locator.city = city - if (state) van.locator.state = state - - await vansRepository.save(van); - - return van.locator; - } -} - -export default UpdateVanLocatorService; diff --git a/src/services/UpdateVanPlateService.ts b/src/services/UpdateVanPlateService.ts new file mode 100644 index 0000000..f3dadc2 --- /dev/null +++ b/src/services/UpdateVanPlateService.ts @@ -0,0 +1,32 @@ +import { getRepository } from 'typeorm'; + +import AppError from '../errors/AppError'; + +import Van from '../models/Van'; + +interface Request { + oldPlate: string; + newPlate: string; +} + +class UpdateVanPlateService { + public async execute({ oldPlate, newPlate }: Request): Promise { + const vansRepository = getRepository(Van); + + const van = await vansRepository.findOne({ + where: { plate: oldPlate }, + }); + + if (!van) { + throw new AppError('A van informada não existe.'); + } + + van.plate = newPlate + + await vansRepository.save(van); + + return van; + } +} + +export default UpdateVanPlateService; diff --git a/src/services/UpdateVanService.ts b/src/services/UpdateVanService.ts index 08e7eba..e157e92 100644 --- a/src/services/UpdateVanService.ts +++ b/src/services/UpdateVanService.ts @@ -6,9 +6,14 @@ import Van from '../models/Van'; interface Request { plate: string; - brand: string; - model: string; - seats_number: string; + brand?: string; + model?: string; + seats_number?: string; + locator_name?: string; + locator_address?: string; + locator_complement?: string; + locator_city?: string; + locator_state?: string; } class UpdateVanService { @@ -17,6 +22,11 @@ class UpdateVanService { brand, model, seats_number, + locator_name, + locator_address, + locator_complement, + locator_city, + locator_state, }: Request): Promise { const vansRepository = getRepository(Van); @@ -25,13 +35,17 @@ class UpdateVanService { }); if (!van) { - throw new AppError('Van informada não existe.'); + throw new AppError('A van informada não existe.'); } - if (plate) van.plate = plate; - if (brand) van.brand = brand; - if (model) van.model = model; - if (seats_number) van.seats_number = (Number)(seats_number); + if (brand) van.brand = brand + if (model) van.model = model + if (seats_number) van.seats_number = seats_number + if (locator_name) van.locator_name = locator_name + if (locator_address) van.locator_address = locator_address + if (locator_complement) van.locator_complement = locator_complement + if (locator_city) van.locator_city = locator_city + if (locator_state) van.locator_state = locator_state await vansRepository.save(van);