From 0d2b7a6884a7b08d4a6e305260e564d6c6ace284 Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Mon, 30 May 2022 19:51:29 -0500 Subject: [PATCH 01/14] Migrations da tabela socialInformation --- ...3956028190-CreateSocialInformationTable.ts | 61 +++++++++++++++++++ ...180-AddFKUserIdToSocialInformationTable.ts | 23 +++++++ 2 files changed, 84 insertions(+) create mode 100644 src/database/migrations/1653956028190-CreateSocialInformationTable.ts create mode 100644 src/database/migrations/1653956193180-AddFKUserIdToSocialInformationTable.ts diff --git a/src/database/migrations/1653956028190-CreateSocialInformationTable.ts b/src/database/migrations/1653956028190-CreateSocialInformationTable.ts new file mode 100644 index 0000000..50a56b4 --- /dev/null +++ b/src/database/migrations/1653956028190-CreateSocialInformationTable.ts @@ -0,0 +1,61 @@ +import { MigrationInterface, QueryRunner, Table } from 'typeorm'; + +export class CreateSocialInformationTable1653956028190 + implements MigrationInterface +{ + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: 'socialInformation', + columns: [ + { + name: 'id_social', + type: 'integer', + isPrimary: true, + isGenerated: true, + generationStrategy: 'increment', + }, + { + name: 'user_id', + type: 'uuid', + isNullable: true, + }, + { + name: 'phone', + type: 'varchar', + isNullable: true, + }, + { + name: 'whatsapp', + type: 'varchar', + isNullable: true, + }, + { + name: 'facebook', + type: 'varchar', + isNullable: true, + }, + { + name: 'telegram', + type: 'varchar', + isNullable: true, + }, + { + name: 'created_at', + type: 'timestamp', + default: 'now()', + }, + { + name: 'updated_at', + type: 'timestamp', + default: 'now()', + }, + ], + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropTable('socials'); + } +} diff --git a/src/database/migrations/1653956193180-AddFKUserIdToSocialInformationTable.ts b/src/database/migrations/1653956193180-AddFKUserIdToSocialInformationTable.ts new file mode 100644 index 0000000..d04d6c5 --- /dev/null +++ b/src/database/migrations/1653956193180-AddFKUserIdToSocialInformationTable.ts @@ -0,0 +1,23 @@ +import { MigrationInterface, QueryRunner, TableForeignKey } from 'typeorm'; + +export class AddFKUserIdToSocialInformationTable1653956193180 + implements MigrationInterface +{ + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createForeignKey( + 'socialInformation', + new TableForeignKey({ + name: 'SocialInformationUser', // 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 primeira tabela + referencedTableName: 'users', // nome da tabela que possui a PK + onDelete: 'SET NULL', + onUpdate: 'CASCADE', + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropForeignKey('socialInformation', 'SocialInformationUser'); + } +} From 01a30b0f17f9f66e3f0619d3a32bc4f36b3064cf Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Sun, 19 Jun 2022 22:20:30 -0500 Subject: [PATCH 02/14] =?UTF-8?q?Atualizando=20backend=20de=20usu=C3=A1rio?= =?UTF-8?q?s=20para=20conter=20informa=C3=A7=C3=B5es=20de=20contato?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrations/1617210132141-CreateUsers.ts | 1 - ...1654814986232-AddCpfAndCnpjFieldToUsers.ts | 24 ++++++++ .../{Social.ts => SocialInformation.ts} | 12 ++-- src/models/User.ts | 6 ++ src/routes/users.routes.ts | 43 ++++++++++++++- src/services/CreateUserService.ts | 8 +-- src/services/FindUserSocialService.ts | 19 ++++--- src/services/UpdateUserAvatarService.ts | 2 +- src/services/UpdateUserPasswordService.ts | 2 +- src/services/UpdateUserService.ts | 17 ++++-- src/services/UpdateUserSocialService.ts | 55 +++++++++---------- 11 files changed, 133 insertions(+), 56 deletions(-) create mode 100644 src/database/migrations/1654814986232-AddCpfAndCnpjFieldToUsers.ts rename src/models/{Social.ts => SocialInformation.ts} (89%) diff --git a/src/database/migrations/1617210132141-CreateUsers.ts b/src/database/migrations/1617210132141-CreateUsers.ts index c810619..64d8b16 100644 --- a/src/database/migrations/1617210132141-CreateUsers.ts +++ b/src/database/migrations/1617210132141-CreateUsers.ts @@ -1,7 +1,6 @@ import { MigrationInterface, QueryRunner, Table } from "typeorm"; export class CreateUsers1617210132141 implements MigrationInterface { - public async up(queryRunner: QueryRunner): Promise { await queryRunner.createTable( new Table({ diff --git a/src/database/migrations/1654814986232-AddCpfAndCnpjFieldToUsers.ts b/src/database/migrations/1654814986232-AddCpfAndCnpjFieldToUsers.ts new file mode 100644 index 0000000..7dbbb73 --- /dev/null +++ b/src/database/migrations/1654814986232-AddCpfAndCnpjFieldToUsers.ts @@ -0,0 +1,24 @@ +import { MigrationInterface, QueryRunner, TableColumn } from 'typeorm'; + +export class AddCpfAndCnpjFieldToUsers1654814986232 + implements MigrationInterface +{ + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.addColumns('users', [ + new TableColumn({ + name: 'cpf', + type: 'varchar', + isNullable: true, + }), + new TableColumn({ + name: 'cnpj', + type: 'varchar', + isNullable: true, + }), + ]); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropColumns('users', ['cnpj', 'cpf']); + } +} diff --git a/src/models/Social.ts b/src/models/SocialInformation.ts similarity index 89% rename from src/models/Social.ts rename to src/models/SocialInformation.ts index 068a274..98e4fe2 100644 --- a/src/models/Social.ts +++ b/src/models/SocialInformation.ts @@ -11,7 +11,7 @@ import { import User from './User'; -@Entity('socials') +@Entity('socialInformation') class Social { @PrimaryGeneratedColumn('increment') id_social: string; @@ -21,16 +21,16 @@ class Social { user: User; @Column() - telegram: string; + phone: string; + + @Column() + whatsapp: string; @Column() facebook: string; @Column() - twitter: string; - - @Column() - twitch: string; + telegram: string; @CreateDateColumn() created_at: Date; diff --git a/src/models/User.ts b/src/models/User.ts index 5c517e3..99ee735 100644 --- a/src/models/User.ts +++ b/src/models/User.ts @@ -38,6 +38,12 @@ class User { @Column() star_rating: number; + @Column() + cpf: string; + + @Column() + cnpj: string; + @CreateDateColumn() created_at: Date; diff --git a/src/routes/users.routes.ts b/src/routes/users.routes.ts index 4d0505e..cb65bec 100644 --- a/src/routes/users.routes.ts +++ b/src/routes/users.routes.ts @@ -67,6 +67,8 @@ usersRouter.get('/:id', ensureAuthenticated, async (request, response) => { birth_date: finalDate, avatar_image: user.avatar_image, bio: user.bio, + cpf: user.cpf, + cnpj: user.cnpj, // created_at: user.created_at, // updated_at: user.updated_at, }; @@ -98,7 +100,7 @@ usersRouter.post('/', async (request, response) => { }); usersRouter.patch('/edit', ensureAuthenticated, async (request, response) => { - const { name, lastname, username, bio, email, birth_date } = request.body; + const { name, lastname, username, bio, email, birth_date, cpf, cnpj } = request.body; const updateUserService = new UpdateUserService(); @@ -110,6 +112,8 @@ usersRouter.patch('/edit', ensureAuthenticated, async (request, response) => { bio, email, birth_date, + cpf, + cnpj }); return response.json({ message: 'User info sucessfully updated.' }); @@ -177,4 +181,41 @@ usersRouter.patch( }, ); +usersRouter.get( + '/social/:id_user', + ensureAuthenticated, + async (request, response) => { + const { id_user } = request.params; + + const findUserSocial = new FindUserSocialService(); + + const social = await findUserSocial.execute(id_user); + + return response.json({ data: social }); + }, +); + +usersRouter.patch( + '/social', + ensureAuthenticated, + async (request, response) => { + const { id_user, phone, whatsapp, facebook, telegram } = request.body; + + const social_network = { + phone, + whatsapp, + facebook, + telegram + } + + const updateUserSocialService = new UpdateUserSocialService(); + const social = await updateUserSocialService.execute({ + id_user, + social_network + }); + + return response.json({ data: social }); + }, +); + export default usersRouter; diff --git a/src/services/CreateUserService.ts b/src/services/CreateUserService.ts index 2df4325..9ba7ad9 100644 --- a/src/services/CreateUserService.ts +++ b/src/services/CreateUserService.ts @@ -5,7 +5,7 @@ import { hash } from 'bcryptjs'; import AppError from '../errors/AppError'; import User from '../models/User'; -import Social from '../models/Social'; +import Social from '../models/SocialInformation'; interface Request { name: string; @@ -18,7 +18,7 @@ interface Request { class CreateUserService { public async execute({ name, lastname, email, birth_date, password }: Request): Promise { const usersRepository = getRepository(User); - const socialsRepository = getRepository(Social); + const socialInformationRepository = getRepository(Social); const checkUserEmailExists = await usersRepository.findOne({ where: { email }, @@ -40,8 +40,8 @@ class CreateUserService { await usersRepository.save(user); // já criar registro na tabela Socials para evitar inconsistências - // const social = socialsRepository.create({ user, telegram: "", facebook: "", twitter: "", twitch: "" }); - // await socialsRepository.save(social); + const social = socialInformationRepository.create({ user, phone: "", whatsapp: "", facebook: "", telegram: "" }); + await socialInformationRepository.save(social); return user; } diff --git a/src/services/FindUserSocialService.ts b/src/services/FindUserSocialService.ts index 1f06fc0..9fe7079 100644 --- a/src/services/FindUserSocialService.ts +++ b/src/services/FindUserSocialService.ts @@ -3,30 +3,35 @@ import { getRepository } from 'typeorm'; import AppError from '../errors/AppError'; import User from '../models/User'; -import Social from '../models/Social'; +import Social from '../models/SocialInformation'; class FindUserSocialService { public async execute(id_user: string): Promise { const usersRepository = getRepository(User); - const socialRepository = getRepository(Social); + const socialInformationRepository = getRepository(Social); const user = await usersRepository.findOne({ where: { id_user } }); if (!user) { - // TODO, fazer no front um tratamento para isso throw new AppError('User does not exist.'); }; - const social = await socialRepository.findOne({ + let social = await socialInformationRepository.findOne({ where: { user }, }); if (!social) { - // TODO, lembrar - // muito importate colocar o código HTTP de erro - throw new AppError('User does not have social information.', 200); + social = socialInformationRepository.create({ + user, + phone: '', + whatsapp: '', + facebook: '', + telegram: '', + }); + + await socialInformationRepository.save(social); }; return social; diff --git a/src/services/UpdateUserAvatarService.ts b/src/services/UpdateUserAvatarService.ts index b0fd08c..b41b768 100644 --- a/src/services/UpdateUserAvatarService.ts +++ b/src/services/UpdateUserAvatarService.ts @@ -3,7 +3,7 @@ import { getRepository } from 'typeorm'; import AppError from '../errors/AppError'; import User from '../models/User'; -import Social from '../models/Social'; +import Social from '../models/SocialInformation'; interface Request { id_user: string; diff --git a/src/services/UpdateUserPasswordService.ts b/src/services/UpdateUserPasswordService.ts index b515a21..72db6ec 100644 --- a/src/services/UpdateUserPasswordService.ts +++ b/src/services/UpdateUserPasswordService.ts @@ -4,7 +4,7 @@ import { hash, compare } from 'bcryptjs'; import AppError from '../errors/AppError'; import User from '../models/User'; -import Social from '../models/Social'; +import Social from '../models/SocialInformation'; interface Request { id_user: string; diff --git a/src/services/UpdateUserService.ts b/src/services/UpdateUserService.ts index 71968e0..35f8d40 100644 --- a/src/services/UpdateUserService.ts +++ b/src/services/UpdateUserService.ts @@ -3,7 +3,7 @@ import { getRepository } from 'typeorm'; import AppError from '../errors/AppError'; import User from '../models/User'; -import Social from '../models/Social'; +import Social from '../models/SocialInformation'; interface Request { id_user: string; @@ -13,10 +13,12 @@ interface Request { bio: string; email: string; birth_date: string; + cpf: string; + cnpj: string; } class UpdateUserService { - public async execute({ id_user, name, lastname, username, bio, email, birth_date }: Request): Promise { + public async execute({ id_user, name, lastname, username, bio, email, birth_date, cpf, cnpj }: Request): Promise { const usersRepository = getRepository(User); const socialRepository = getRepository(Social); @@ -28,10 +30,13 @@ class UpdateUserService { throw new AppError('User does not exist.'); }; - user.name = name - user.lastname = lastname - user.bio = bio - user.email = email + if (name) user.name = name + if (lastname) user.lastname = lastname + if (bio) user.bio = bio + if (email) user.email = email + + if (cpf) user.cpf = cpf + if (cnpj) user.cnpj = cnpj // user.birth_date = new Date(birth_date); // TODO, funciona? diff --git a/src/services/UpdateUserSocialService.ts b/src/services/UpdateUserSocialService.ts index bf8587d..ee7ec8f 100644 --- a/src/services/UpdateUserSocialService.ts +++ b/src/services/UpdateUserSocialService.ts @@ -3,54 +3,51 @@ import { getRepository } from 'typeorm'; import AppError from '../errors/AppError'; import User from '../models/User'; -import Social from '../models/Social'; +import Social from '../models/SocialInformation'; interface Request { id_user: string; - social_network: string; + social_network: { + phone: string; + whatsapp: string; + facebook: string; + telegram: string; + }; } class UpdateUserSocialService { - public async execute({ - id_user, - social_network, - }: Request): Promise { + public async execute({ id_user, social_network }: Request): Promise { const usersRepository = getRepository(User); - const socialRepository = getRepository(Social); + const socialInformationRepository = getRepository(Social); const user = await usersRepository.findOne({ - where: { id_user: id_user }, + where: { id_user }, }); if (!user) { throw new AppError('User does not exist.'); } - const social = await socialRepository.findOne({ - where: { user: user }, + let social = await socialInformationRepository.findOne({ + where: { user }, }); - if (!social) throw new AppError('User does not exist.'); - - switch (social_network) { - case 'telegram': - social.telegram = ""; - break; - case 'facebook': - social.facebook = ""; - break; - case 'twitter': - social.twitter = ""; - break; - case 'twitch': - social.twitch = ""; - break; - - default: - break; + if (!social) { + social = socialInformationRepository.create({ + user, + phone: '', + whatsapp: '', + facebook: '', + telegram: '', + }); } - await socialRepository.save(social); + if (social_network.phone) social.phone = social_network.phone; + if (social_network.whatsapp) social.whatsapp = social_network.whatsapp; + if (social_network.facebook) social.facebook = social_network.facebook; + if (social_network.telegram) social.telegram = social_network.telegram; + + await socialInformationRepository.save(social); return social; } From 98fb0816483434443cac79de899fa5244583cc88 Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Sun, 19 Jun 2022 22:21:12 -0500 Subject: [PATCH 03/14] =?UTF-8?q?Adicionando=20rotas=20e=20l=C3=B3gica=20p?= =?UTF-8?q?ara=20Vans=20e=20Locadores=20de=20Vans?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1655691282002-CreateVansTable.ts | 50 ++++++++++++++ .../1655692363126-CreateVanLocatorTable.ts | 54 +++++++++++++++ .../1655692498005-CreateVanDocumentsTable.ts | 44 ++++++++++++ ...24-AddFKVanLocatorIdToVanDocumentsTable.ts | 26 +++++++ src/models/Van.ts | 40 +++++++++++ src/models/VanLocator.ts | 36 ++++++++++ src/routes/vans.routes.ts | 67 +++++++++++++++++++ src/services/CreateVanService.ts | 47 +++++++++++++ src/services/FindVanService.ts | 23 +++++++ src/services/UpdateUserSocialInformation.ts | 66 ++++++++++++++++++ src/services/UpdateVanService.ts | 42 ++++++++++++ 11 files changed, 495 insertions(+) create mode 100644 src/database/migrations/1655691282002-CreateVansTable.ts create mode 100644 src/database/migrations/1655692363126-CreateVanLocatorTable.ts create mode 100644 src/database/migrations/1655692498005-CreateVanDocumentsTable.ts create mode 100644 src/database/migrations/1655692624024-AddFKVanLocatorIdToVanDocumentsTable.ts create mode 100644 src/models/Van.ts create mode 100644 src/models/VanLocator.ts create mode 100644 src/routes/vans.routes.ts create mode 100644 src/services/CreateVanService.ts create mode 100644 src/services/FindVanService.ts create mode 100644 src/services/UpdateUserSocialInformation.ts create mode 100644 src/services/UpdateVanService.ts diff --git a/src/database/migrations/1655691282002-CreateVansTable.ts b/src/database/migrations/1655691282002-CreateVansTable.ts new file mode 100644 index 0000000..90bac78 --- /dev/null +++ b/src/database/migrations/1655691282002-CreateVansTable.ts @@ -0,0 +1,50 @@ +import { MigrationInterface, QueryRunner, Table } from 'typeorm'; + +export class CreateVansTable1655691282002 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: 'vans', + columns: [ + { + name: 'id_van', + type: 'uuid', + isPrimary: true, + generationStrategy: 'uuid', + default: 'uuid_generate_v4()', + }, + { + name: 'plate', + type: 'varchar', + }, + { + name: 'brand', + type: 'varchar', + }, + { + name: 'model', + type: 'varchar', + }, + { + name: 'seats_number', + type: 'numeric', + }, + { + name: 'created_at', + type: 'timestamp', + default: 'now()', + }, + { + name: 'updated_at', + type: 'timestamp', + default: 'now()', + }, + ], + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropTable('vans'); + } +} diff --git a/src/database/migrations/1655692363126-CreateVanLocatorTable.ts b/src/database/migrations/1655692363126-CreateVanLocatorTable.ts new file mode 100644 index 0000000..ea3564d --- /dev/null +++ b/src/database/migrations/1655692363126-CreateVanLocatorTable.ts @@ -0,0 +1,54 @@ +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 new file mode 100644 index 0000000..d69f570 --- /dev/null +++ b/src/database/migrations/1655692498005-CreateVanDocumentsTable.ts @@ -0,0 +1,44 @@ +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: 'id_vanDocuments', + type: 'uuid', + isPrimary: true, + generationStrategy: 'uuid', + default: 'uuid_generate_v4()', + }, + { + 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 new file mode 100644 index 0000000..0fab958 --- /dev/null +++ b/src/database/migrations/1655692624024-AddFKVanLocatorIdToVanDocumentsTable.ts @@ -0,0 +1,26 @@ +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/models/Van.ts b/src/models/Van.ts new file mode 100644 index 0000000..5e399ca --- /dev/null +++ b/src/models/Van.ts @@ -0,0 +1,40 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + CreateDateColumn, + UpdateDateColumn, + JoinColumn, + OneToOne, +} from 'typeorm'; +import VanLocator from './VanLocator'; + +@Entity('vans') +class Van { + @PrimaryGeneratedColumn('uuid') + id_van: string; + + @Column() + plate: string; + + @Column() + brand: string; + + @Column() + model: string; + + @Column() + seats_number: number; + + @OneToOne(() => VanLocator, { eager: true }) + @JoinColumn({ name: 'vanLocator_id' }) + vanLocator: VanLocator; + + @CreateDateColumn() + created_at: Date; + + @UpdateDateColumn() + updated_at: Date; +} + +export default Van; diff --git a/src/models/VanLocator.ts b/src/models/VanLocator.ts new file mode 100644 index 0000000..e99dcfb --- /dev/null +++ b/src/models/VanLocator.ts @@ -0,0 +1,36 @@ +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/vans.routes.ts b/src/routes/vans.routes.ts new file mode 100644 index 0000000..02ed8ce --- /dev/null +++ b/src/routes/vans.routes.ts @@ -0,0 +1,67 @@ +import { Router } from 'express'; +import { getRepository } from 'typeorm'; +import Van from '../models/Van'; + +import ensureAuthenticated from '../middlewares/ensureAuthenticated'; + +import FindVanService from '../services/FindVanService'; +import CreateVanService from '../services/CreateVanService'; +import UpdateVanService from '../services/UpdateVanService'; + +const vansRouter = Router(); + +vansRouter.get('/list', async (request, response) => { + const vansRepository = getRepository(Van); + + const vans = await vansRepository.find(); + + return response.json({ data: vans }); +}); + +vansRouter.get('/:id', ensureAuthenticated, async (request, response) => { + const { id } = request.params; + + const findVan = new FindVanService(); + + const van = await findVan.execute(id); + + return response.json({ data: van }); +}); + +vansRouter.post('/', async (request, response) => { + const { plate, brand, model, seats_number } = request.body; + + const createVan = new CreateVanService(); + + const van = await createVan.execute({ + plate, + brand, + model, + seats_number, + }); + + return response.json({ message: 'Van criada com sucesso.', data: van }); +}); + +vansRouter.patch( + '/edit/:plate', + ensureAuthenticated, + async (request, response) => { + const { brand, model, seats_number } = request.body; + + const { plate } = request.params; + + const updateUserService = new UpdateVanService(); + + await updateUserService.execute({ + plate, + brand, + model, + seats_number, + }); + + return response.json({ message: 'Informações da van atualizadas com sucesso.' }); + }, +); + +export default vansRouter; diff --git a/src/services/CreateVanService.ts b/src/services/CreateVanService.ts new file mode 100644 index 0000000..e78058d --- /dev/null +++ b/src/services/CreateVanService.ts @@ -0,0 +1,47 @@ +import { getRepository } from 'typeorm'; +import { v4 } from 'uuid'; +import { hash } from 'bcryptjs'; + +import AppError from '../errors/AppError'; + +import Van from '../models/Van'; + +interface Request { + plate: string; + brand: string; + model: string; + seats_number: string; +} + +class CreateVanService { + public async execute({ + plate, + brand, + model, + seats_number, + }: Request): Promise { + const vansRepository = getRepository(Van); + + const checkVanPlateExists = await vansRepository.findOne({ + where: { plate }, + }); + + if (checkVanPlateExists) { + throw new AppError('Placa do veículo já cadastrado!', 409); + } + + const van = vansRepository.create({ + id_van: v4(), + plate, + brand, + model, + seats_number: (Number)(seats_number), + }); + + await vansRepository.save(van); + + return van; + } +} + +export default CreateVanService; diff --git a/src/services/FindVanService.ts b/src/services/FindVanService.ts new file mode 100644 index 0000000..d768417 --- /dev/null +++ b/src/services/FindVanService.ts @@ -0,0 +1,23 @@ +import { getRepository } from 'typeorm'; + +import AppError from '../errors/AppError'; + +import Van from '../models/Van'; + +class FindVanService { + public async execute(id_van: string): Promise { + const vansRepository = getRepository(Van); + + const van = await vansRepository.findOne({ + where: { id_van } + }); + + if (!van) { + throw new AppError('Van does not exist.'); + }; + + return van; + } +} + +export default FindVanService; diff --git a/src/services/UpdateUserSocialInformation.ts b/src/services/UpdateUserSocialInformation.ts new file mode 100644 index 0000000..d09bff2 --- /dev/null +++ b/src/services/UpdateUserSocialInformation.ts @@ -0,0 +1,66 @@ +import { getRepository } from 'typeorm'; + +import AppError from '../errors/AppError'; + +import User from '../models/User'; +import Social from '../models/SocialInformation'; + +interface Request { + id_user: string; + social_info_request: { + phone?: string; + whatsapp?: string; + facebook?: string; + telegram?: string; + }; + username: string; +} + +class UpdateUserSocialService { + public async execute({ + id_user, + social_info_request, + username, + }: Request): Promise { + const usersRepository = getRepository(User); + const socialInformationRepository = getRepository(Social); + + const user = await usersRepository.findOne({ + where: { id_user }, + }); + + if (!user) { + throw new AppError('User does not exist.', 404); + } + + let social = await socialInformationRepository.findOne({ + where: { user }, + }); + + if (!social) { + social = socialInformationRepository.create({ user, phone: "", whatsapp: "", facebook: "", telegram: "" }); + } + + if (social_info_request.phone) { + social.phone = social_info_request.phone + } + + if (social_info_request.whatsapp) { + social.whatsapp = social_info_request.whatsapp + } + + if (social_info_request.facebook) { + social.facebook = social_info_request.facebook + } + + if (social_info_request.telegram) { + social.telegram = social_info_request.telegram + } + + await socialInformationRepository.save(social); + + return social; + } +} + +export default UpdateUserSocialService; \ No newline at end of file diff --git a/src/services/UpdateVanService.ts b/src/services/UpdateVanService.ts new file mode 100644 index 0000000..08e7eba --- /dev/null +++ b/src/services/UpdateVanService.ts @@ -0,0 +1,42 @@ +import { getRepository } from 'typeorm'; + +import AppError from '../errors/AppError'; + +import Van from '../models/Van'; + +interface Request { + plate: string; + brand: string; + model: string; + seats_number: string; +} + +class UpdateVanService { + public async execute({ + plate, + brand, + model, + seats_number, + }: Request): Promise { + const vansRepository = getRepository(Van); + + const van = await vansRepository.findOne({ + where: { plate }, + }); + + if (!van) { + throw new AppError('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); + + await vansRepository.save(van); + + return van; + } +} + +export default UpdateVanService; From 2631af4681d1de774cef7ef17cdd50508c47403d Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Sun, 19 Jun 2022 23:14:28 -0500 Subject: [PATCH 04/14] =?UTF-8?q?Atualizando=20rotas=20das=20vans=20com=20?= =?UTF-8?q?l=C3=B3gica=20do=20locador?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1655691282002-CreateVansTable.ts | 5 ++ .../1655692498005-CreateVanDocumentsTable.ts | 6 +- ...836-AddFKVanDocumentToVanDocumentsTable.ts | 23 ++++++ src/models/Van.ts | 5 +- src/models/VanDocuments.ts | 34 ++++++++ src/routes/vans.routes.ts | 78 ++++++++++++++++++- src/services/CreateVanLocatorService.ts | 64 +++++++++++++++ src/services/FindVanLocatorService.ts | 25 ++++++ src/services/UpdateVanLocatorService.ts | 56 +++++++++++++ 9 files changed, 289 insertions(+), 7 deletions(-) create mode 100644 src/database/migrations/1655696991836-AddFKVanDocumentToVanDocumentsTable.ts create mode 100644 src/models/VanDocuments.ts create mode 100644 src/services/CreateVanLocatorService.ts create mode 100644 src/services/FindVanLocatorService.ts create mode 100644 src/services/UpdateVanLocatorService.ts diff --git a/src/database/migrations/1655691282002-CreateVansTable.ts b/src/database/migrations/1655691282002-CreateVansTable.ts index 90bac78..fce9a08 100644 --- a/src/database/migrations/1655691282002-CreateVansTable.ts +++ b/src/database/migrations/1655691282002-CreateVansTable.ts @@ -29,6 +29,11 @@ export class CreateVansTable1655691282002 implements MigrationInterface { name: 'seats_number', type: 'numeric', }, + { + name: 'document', + type: 'varchar', + isNullable: true + }, { name: 'created_at', type: 'timestamp', diff --git a/src/database/migrations/1655692498005-CreateVanDocumentsTable.ts b/src/database/migrations/1655692498005-CreateVanDocumentsTable.ts index d69f570..d3b205c 100644 --- a/src/database/migrations/1655692498005-CreateVanDocumentsTable.ts +++ b/src/database/migrations/1655692498005-CreateVanDocumentsTable.ts @@ -9,11 +9,9 @@ export class CreateVanDocumentsTable1655692498005 name: 'vanDocuments', columns: [ { - name: 'id_vanDocuments', - type: 'uuid', + name: 'document_van', + type: 'varchar', isPrimary: true, - generationStrategy: 'uuid', - default: 'uuid_generate_v4()', }, { name: 'vanLocator_id', diff --git a/src/database/migrations/1655696991836-AddFKVanDocumentToVanDocumentsTable.ts b/src/database/migrations/1655696991836-AddFKVanDocumentToVanDocumentsTable.ts new file mode 100644 index 0000000..8e782b0 --- /dev/null +++ b/src/database/migrations/1655696991836-AddFKVanDocumentToVanDocumentsTable.ts @@ -0,0 +1,23 @@ +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 5e399ca..46ee6fd 100644 --- a/src/models/Van.ts +++ b/src/models/Van.ts @@ -7,6 +7,7 @@ import { JoinColumn, OneToOne, } from 'typeorm'; +import VanDocuments from './VanDocuments'; import VanLocator from './VanLocator'; @Entity('vans') @@ -27,8 +28,8 @@ class Van { seats_number: number; @OneToOne(() => VanLocator, { eager: true }) - @JoinColumn({ name: 'vanLocator_id' }) - vanLocator: VanLocator; + @JoinColumn({ name: 'document' }) + locator: VanLocator; @CreateDateColumn() created_at: Date; diff --git a/src/models/VanDocuments.ts b/src/models/VanDocuments.ts new file mode 100644 index 0000000..fb7c3db --- /dev/null +++ b/src/models/VanDocuments.ts @@ -0,0 +1,34 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + CreateDateColumn, + UpdateDateColumn, + JoinColumn, + OneToOne, + PrimaryColumn, +} from 'typeorm'; +import VanLocator from './VanLocator'; + +@Entity('vanDocuments') +class VanDocuments { + @PrimaryColumn() + @OneToOne(() => VanDocuments, { eager: true }) + @JoinColumn({ name: 'document' }) + vanDocuments: VanDocuments; + + @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/routes/vans.routes.ts b/src/routes/vans.routes.ts index 02ed8ce..c9e02ad 100644 --- a/src/routes/vans.routes.ts +++ b/src/routes/vans.routes.ts @@ -7,6 +7,10 @@ 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'; const vansRouter = Router(); @@ -60,7 +64,79 @@ vansRouter.patch( seats_number, }); - return response.json({ message: 'Informações da van atualizadas com sucesso.' }); + return response.json({ + message: 'Informações da van atualizadas com sucesso.', + }); + }, +); + +// 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 findVanLocator = new FindVanLocatorService(); + + const vanLocator = await findVanLocator.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 createVanLocator = new CreateVanLocatorService(); + + const vanLocator = await createVanLocator.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', + ensureAuthenticated, + async (request, response) => { + const { name, address, complement, city, state } = request.body; + + const { id_van } = request.params; + + const updateVanLocatorService = new UpdateVanLocatorService(); + + await updateVanLocatorService.execute({ + id_van, + name, + address, + complement, + city, + state, + }); + + return response.json({ + message: 'Informações da van atualizadas com sucesso.', + }); }, ); diff --git a/src/services/CreateVanLocatorService.ts b/src/services/CreateVanLocatorService.ts new file mode 100644 index 0000000..79f31cc --- /dev/null +++ b/src/services/CreateVanLocatorService.ts @@ -0,0 +1,64 @@ +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/FindVanLocatorService.ts b/src/services/FindVanLocatorService.ts new file mode 100644 index 0000000..cead069 --- /dev/null +++ b/src/services/FindVanLocatorService.ts @@ -0,0 +1,25 @@ +import { getRepository } from 'typeorm'; + +import AppError from '../errors/AppError'; + +import Van from '../models/Van'; +import VanLocator from '../models/VanLocator'; + +class FindVanLocatorService { + public async execute(id_van: string): 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); + }; + + return van.locator; + } +} + +export default FindVanLocatorService; diff --git a/src/services/UpdateVanLocatorService.ts b/src/services/UpdateVanLocatorService.ts new file mode 100644 index 0000000..b2e4b06 --- /dev/null +++ b/src/services/UpdateVanLocatorService.ts @@ -0,0 +1,56 @@ +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; From 7fe4edd37f05fa1897f1732d25bcf3f9b8b7d5ac Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Sun, 19 Jun 2022 23:16:16 -0500 Subject: [PATCH 05/14] =?UTF-8?q?Padronizando=20nome=20de=20vari=C3=A1veis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/routes/users.routes.ts | 16 ++++++++-------- src/routes/vans.routes.ts | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/routes/users.routes.ts b/src/routes/users.routes.ts index cb65bec..ca4b1e7 100644 --- a/src/routes/users.routes.ts +++ b/src/routes/users.routes.ts @@ -46,9 +46,9 @@ usersRouter.get('/list', async (request, response) => { usersRouter.get('/:id', ensureAuthenticated, async (request, response) => { const { id } = request.params; - const findUser = new FindUserService(); + const findUserService = new FindUserService(); - const user = await findUser.execute(id); + const user = await findUserService.execute(id); // converting ISO 8601 date to normal date let birth_date = new Date(user.birth_date) @@ -79,9 +79,9 @@ usersRouter.get('/:id', ensureAuthenticated, async (request, response) => { usersRouter.post('/', async (request, response) => { const { name, lastname, email, birth_date, password } = request.body; - const createUser = new CreateUserService(); + const createUserService = new CreateUserService(); - const user = await createUser.execute({ + const user = await createUserService.execute({ name, lastname, email, @@ -138,9 +138,9 @@ usersRouter.get( async (request, response) => { const { id } = request.params; - const findUserSocial = new FindUserSocialService(); + const findUserSocialService = new FindUserSocialService(); - const social = await findUserSocial.execute(id); + const social = await findUserSocialService.execute(id); return response.json({ data: social }); }, @@ -187,9 +187,9 @@ usersRouter.get( async (request, response) => { const { id_user } = request.params; - const findUserSocial = new FindUserSocialService(); + const findUserSocialService = new FindUserSocialService(); - const social = await findUserSocial.execute(id_user); + const social = await findUserSocialService.execute(id_user); return response.json({ data: social }); }, diff --git a/src/routes/vans.routes.ts b/src/routes/vans.routes.ts index c9e02ad..e9ddfdc 100644 --- a/src/routes/vans.routes.ts +++ b/src/routes/vans.routes.ts @@ -25,9 +25,9 @@ vansRouter.get('/list', async (request, response) => { vansRouter.get('/:id', ensureAuthenticated, async (request, response) => { const { id } = request.params; - const findVan = new FindVanService(); + const findVanService = new FindVanService(); - const van = await findVan.execute(id); + const van = await findVanService.execute(id); return response.json({ data: van }); }); @@ -35,9 +35,9 @@ vansRouter.get('/:id', ensureAuthenticated, async (request, response) => { vansRouter.post('/', async (request, response) => { const { plate, brand, model, seats_number } = request.body; - const createVan = new CreateVanService(); + const createVanService = new CreateVanService(); - const van = await createVan.execute({ + const van = await createVanService.execute({ plate, brand, model, @@ -85,9 +85,9 @@ vansRouter.get( async (request, response) => { const { id } = request.params; - const findVanLocator = new FindVanLocatorService(); + const findVanLocatorService = new FindVanLocatorService(); - const vanLocator = await findVanLocator.execute(id); + const vanLocator = await findVanLocatorService.execute(id); return response.json({ data: vanLocator }); }, @@ -98,9 +98,9 @@ vansRouter.post('/locator/:id_van', async (request, response) => { const { id_van } = request.params; - const createVanLocator = new CreateVanLocatorService(); + const createVanLocatorService = new CreateVanLocatorService(); - const vanLocator = await createVanLocator.execute({ + const vanLocator = await createVanLocatorService.execute({ id_van, name, address, From 7edb3b58148440929fee2af8d36e6e69fd9a0d00 Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Sun, 19 Jun 2022 23:19:42 -0500 Subject: [PATCH 06/14] =?UTF-8?q?Corre=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/models/VanDocuments.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/models/VanDocuments.ts b/src/models/VanDocuments.ts index fb7c3db..925fc0e 100644 --- a/src/models/VanDocuments.ts +++ b/src/models/VanDocuments.ts @@ -1,7 +1,6 @@ import { Entity, Column, - PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn, JoinColumn, @@ -15,7 +14,7 @@ class VanDocuments { @PrimaryColumn() @OneToOne(() => VanDocuments, { eager: true }) @JoinColumn({ name: 'document' }) - vanDocuments: VanDocuments; + vanDocuments: string; @OneToOne(() => VanLocator, { eager: true }) @JoinColumn({ name: 'vanLocator_id' }) From ac4471642881d06bc0c3022cc895a279fa5d5847 Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Mon, 20 Jun 2022 00:52:31 -0500 Subject: [PATCH 07/14] =?UTF-8?q?Alterando=20l=C3=B3gica=20das=20rotas=20d?= =?UTF-8?q?e=20vans=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); From 04de75faf6c4976a69c31610f87780da4c17910d Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Mon, 20 Jun 2022 04:06:03 -0500 Subject: [PATCH 08/14] =?UTF-8?q?Mais=20altera=C3=A7=C3=B5es=20em=20usu?= =?UTF-8?q?=C3=A1rios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...62-RemoveCpfAndCnpjFieldsFromUsersTable.ts | 24 ++++++++++++++ ...cumentAndDocumentTypeFieldsToUsersTable.ts | 24 ++++++++++++++ src/models/User.ts | 4 +-- src/routes/users.routes.ts | 31 ++++++++++--------- src/services/UpdateUserService.ts | 15 ++++----- 5 files changed, 74 insertions(+), 24 deletions(-) create mode 100644 src/database/migrations/1655711281662-RemoveCpfAndCnpjFieldsFromUsersTable.ts create mode 100644 src/database/migrations/1655711315251-AddDocumentAndDocumentTypeFieldsToUsersTable.ts diff --git a/src/database/migrations/1655711281662-RemoveCpfAndCnpjFieldsFromUsersTable.ts b/src/database/migrations/1655711281662-RemoveCpfAndCnpjFieldsFromUsersTable.ts new file mode 100644 index 0000000..34495bf --- /dev/null +++ b/src/database/migrations/1655711281662-RemoveCpfAndCnpjFieldsFromUsersTable.ts @@ -0,0 +1,24 @@ +import { MigrationInterface, QueryRunner, TableColumn } from 'typeorm'; + +export class RemoveCpfAndCnpjFieldsFromUsersTable1655711281662 + implements MigrationInterface +{ + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.dropColumns('users', ['cnpj', 'cpf']); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.addColumns('users', [ + new TableColumn({ + name: 'cpf', + type: 'varchar', + isNullable: true, + }), + new TableColumn({ + name: 'cnpj', + type: 'varchar', + isNullable: true, + }), + ]); + } +} diff --git a/src/database/migrations/1655711315251-AddDocumentAndDocumentTypeFieldsToUsersTable.ts b/src/database/migrations/1655711315251-AddDocumentAndDocumentTypeFieldsToUsersTable.ts new file mode 100644 index 0000000..d8c0e0a --- /dev/null +++ b/src/database/migrations/1655711315251-AddDocumentAndDocumentTypeFieldsToUsersTable.ts @@ -0,0 +1,24 @@ +import { MigrationInterface, QueryRunner, TableColumn } from 'typeorm'; + +export class AddDocumentAndDocumentTypeFieldsToUsersTable1655711315251 + implements MigrationInterface +{ + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.addColumns('users', [ + new TableColumn({ + name: 'document', + type: 'varchar', + isNullable: true, + }), + new TableColumn({ + name: 'document_type', + type: 'varchar', + isNullable: true, + }), + ]); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropColumns('users', ['document_type', 'document']); + } +} diff --git a/src/models/User.ts b/src/models/User.ts index 99ee735..b5aedee 100644 --- a/src/models/User.ts +++ b/src/models/User.ts @@ -39,10 +39,10 @@ class User { star_rating: number; @Column() - cpf: string; + document_type: string; @Column() - cnpj: string; + document: string; @CreateDateColumn() created_at: Date; diff --git a/src/routes/users.routes.ts b/src/routes/users.routes.ts index ca4b1e7..af37019 100644 --- a/src/routes/users.routes.ts +++ b/src/routes/users.routes.ts @@ -29,16 +29,16 @@ usersRouter.get('/list', async (request, response) => { let usersWithoutSensitiveInfo: userWithoutSensitiveInfo[] = []; - users.map(user => { - usersWithoutSensitiveInfo.push({ - id_user: user.id_user, - name: user.name, - email: user.email, - avatar_image: user.avatar_image, - }); - }); + // users.map(user => { + // usersWithoutSensitiveInfo.push({ + // id_user: user.id_user, + // name: user.name, + // email: user.email, + // avatar_image: user.avatar_image, + // }); + // }); - return response.json({ data: usersWithoutSensitiveInfo }); + return response.json({ data: users }); }); // TODO, criar middleware ensureIsOwnUser é necessário? @@ -64,11 +64,12 @@ usersRouter.get('/:id', ensureAuthenticated, async (request, response) => { name: user.name, lastname: user.lastname, email: user.email, + phone_number: user.phone_number, birth_date: finalDate, avatar_image: user.avatar_image, bio: user.bio, - cpf: user.cpf, - cnpj: user.cnpj, + document_type: user.document_type, + document: user.document // created_at: user.created_at, // updated_at: user.updated_at, }; @@ -100,7 +101,7 @@ usersRouter.post('/', async (request, response) => { }); usersRouter.patch('/edit', ensureAuthenticated, async (request, response) => { - const { name, lastname, username, bio, email, birth_date, cpf, cnpj } = request.body; + const { name, lastname, bio, email, phone_number, birth_date, document_type, document } = request.body; const updateUserService = new UpdateUserService(); @@ -108,12 +109,12 @@ usersRouter.patch('/edit', ensureAuthenticated, async (request, response) => { id_user: request.user.id_user, name, lastname, - username, bio, email, + phone_number, birth_date, - cpf, - cnpj + document_type, + document }); return response.json({ message: 'User info sucessfully updated.' }); diff --git a/src/services/UpdateUserService.ts b/src/services/UpdateUserService.ts index 35f8d40..c147881 100644 --- a/src/services/UpdateUserService.ts +++ b/src/services/UpdateUserService.ts @@ -9,16 +9,16 @@ interface Request { id_user: string; name: string; lastname: string; - username: string; bio: string; email: string; + phone_number: string; birth_date: string; - cpf: string; - cnpj: string; + document_type: string; + document: string; } class UpdateUserService { - public async execute({ id_user, name, lastname, username, bio, email, birth_date, cpf, cnpj }: Request): Promise { + public async execute({ id_user, name, lastname, bio, email, phone_number, birth_date, document_type, document }: Request): Promise { const usersRepository = getRepository(User); const socialRepository = getRepository(Social); @@ -27,16 +27,17 @@ class UpdateUserService { }); if (!user) { - throw new AppError('User does not exist.'); + throw new AppError('O usuário informado não existe.'); }; if (name) user.name = name if (lastname) user.lastname = lastname if (bio) user.bio = bio if (email) user.email = email + if (phone_number) user.phone_number = phone_number - if (cpf) user.cpf = cpf - if (cnpj) user.cnpj = cnpj + if (document_type) user.document_type = document_type + if (document) user.document = document // user.birth_date = new Date(birth_date); // TODO, funciona? From 2f55141bdf337c35dc5c2c471d92e38e6e57eef0 Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Mon, 20 Jun 2022 05:40:56 -0500 Subject: [PATCH 09/14] =?UTF-8?q?Linkando=20van=20com=20usu=C3=A1rio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 108 ++ ...1655720865095-AddUserIdFieldToVansTable.ts | 20 + .../1655720873936-AddFKUserIdToVansTable.ts | 24 + src/models/User.ts | 5 + src/models/Van.ts | 7 + src/routes/users.routes.ts | 2 +- src/routes/vans.routes.ts | 15 +- src/server.ts | 3 +- src/services/CreateVanService.ts | 16 + src/services/FindVanService.ts | 6 +- src/services/FindVansByUserIdService.ts | 33 + src/services/UpdateUserService.ts | 17 +- yarn.lock | 1190 +---------------- 13 files changed, 287 insertions(+), 1159 deletions(-) create mode 100644 src/database/migrations/1655720865095-AddUserIdFieldToVansTable.ts create mode 100644 src/database/migrations/1655720873936-AddFKUserIdToVansTable.ts create mode 100644 src/services/FindVansByUserIdService.ts diff --git a/package-lock.json b/package-lock.json index ce5839d..ad2de22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@types/express": "^4.17.11", "@types/jsonwebtoken": "^8.5.1", "@types/uuid": "^8.3.0", + "axios": "^0.27.2", "bcryptjs": "^2.4.3", "cors": "^2.8.5", "express": "^4.17.1", @@ -211,6 +212,20 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -449,6 +464,17 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -511,6 +537,14 @@ "ms": "2.0.0" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -671,6 +705,38 @@ "node": ">= 0.8" } }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -2150,6 +2216,20 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2314,6 +2394,14 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2364,6 +2452,11 @@ "ms": "2.0.0" } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -2495,6 +2588,21 @@ "unpipe": "~1.0.0" } }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", diff --git a/src/database/migrations/1655720865095-AddUserIdFieldToVansTable.ts b/src/database/migrations/1655720865095-AddUserIdFieldToVansTable.ts new file mode 100644 index 0000000..bfeed73 --- /dev/null +++ b/src/database/migrations/1655720865095-AddUserIdFieldToVansTable.ts @@ -0,0 +1,20 @@ +import { MigrationInterface, QueryRunner, TableColumn } from 'typeorm'; + +export class AddUserIdFieldToVansTable1655720865095 + implements MigrationInterface +{ + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.addColumn( + 'vans', + new TableColumn({ + name: 'user_id', + type: 'uuid', + isNullable: true, + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropColumn('vans', 'user_id'); + } +} diff --git a/src/database/migrations/1655720873936-AddFKUserIdToVansTable.ts b/src/database/migrations/1655720873936-AddFKUserIdToVansTable.ts new file mode 100644 index 0000000..a5cef77 --- /dev/null +++ b/src/database/migrations/1655720873936-AddFKUserIdToVansTable.ts @@ -0,0 +1,24 @@ +import { MigrationInterface, QueryRunner, TableForeignKey } from 'typeorm'; + +export class AddFKUserIdToVansTable1655720873936 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createForeignKey( + 'vans', + new TableForeignKey({ + name: 'UserIdVan', // 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 primeira tabela + referencedTableName: 'users', // nome da tabela que possui a PK + onDelete: 'SET NULL', + onUpdate: 'CASCADE', + }), + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropForeignKey( + 'vans', + 'UserIdVan', + ); + } +} diff --git a/src/models/User.ts b/src/models/User.ts index b5aedee..d9428a3 100644 --- a/src/models/User.ts +++ b/src/models/User.ts @@ -4,7 +4,9 @@ import { PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn, + OneToMany, } from 'typeorm'; +import Van from './Van'; @Entity('users') class User { @@ -44,6 +46,9 @@ class User { @Column() document: string; + @OneToMany(() => Van, van => van.user) + van: Van[]; + @CreateDateColumn() created_at: Date; diff --git a/src/models/Van.ts b/src/models/Van.ts index 4c5735d..e619cdb 100644 --- a/src/models/Van.ts +++ b/src/models/Van.ts @@ -7,7 +7,10 @@ import { JoinColumn, OneToOne, PrimaryColumn, + OneToMany, + ManyToOne, } from 'typeorm'; +import User from './User'; @Entity('vans') class Van { @@ -41,6 +44,10 @@ class Van { @Column() locator_state: string; + @ManyToOne(() => User, user => user.van) + @JoinColumn({ name: 'user_id' }) + user: User; + @CreateDateColumn() created_at: Date; diff --git a/src/routes/users.routes.ts b/src/routes/users.routes.ts index af37019..d9dc904 100644 --- a/src/routes/users.routes.ts +++ b/src/routes/users.routes.ts @@ -117,7 +117,7 @@ usersRouter.patch('/edit', ensureAuthenticated, async (request, response) => { document }); - return response.json({ message: 'User info sucessfully updated.' }); + return response.json({ message: 'Perfil atualizado com sucesso.' }); }); usersRouter.patch('/edit/avatar', ensureAuthenticated, async (request, response) => { diff --git a/src/routes/vans.routes.ts b/src/routes/vans.routes.ts index c30cde8..c8ceca6 100644 --- a/src/routes/vans.routes.ts +++ b/src/routes/vans.routes.ts @@ -8,6 +8,7 @@ import FindVanService from '../services/FindVanService'; import CreateVanService from '../services/CreateVanService'; import UpdateVanService from '../services/UpdateVanService'; import UpdateVanPlateService from '../services/UpdateVanPlateService'; +import FindVanByUserIdService from '../services/FindVansByUserIdService'; const vansRouter = Router(); @@ -19,7 +20,7 @@ vansRouter.get('/list', async (request, response) => { return response.json({ data: vans }); }); -vansRouter.get('/:plate', ensureAuthenticated, async (request, response) => { +vansRouter.get('/plate/:plate', ensureAuthenticated, async (request, response) => { const { plate } = request.params; const findVanService = new FindVanService(); @@ -29,8 +30,19 @@ vansRouter.get('/:plate', ensureAuthenticated, async (request, response) => { return response.json({ data: van }); }); +vansRouter.get('/user/:id_user', ensureAuthenticated, async (request, response) => { + const { id_user } = request.params; + + const findVanByUserIdService = new FindVanByUserIdService(); + + const vans = await findVanByUserIdService.execute(id_user); + + return response.json({ data: vans }); +}); + vansRouter.post('/', async (request, response) => { const { + id_user, plate, brand, model, @@ -45,6 +57,7 @@ vansRouter.post('/', async (request, response) => { const createVanService = new CreateVanService(); const van = await createVanService.execute({ + id_user, plate, brand, model, diff --git a/src/server.ts b/src/server.ts index 7c19981..eec57ca 100644 --- a/src/server.ts +++ b/src/server.ts @@ -20,8 +20,9 @@ createConnection(); app.use((err: Error, request: Request, response: Response, _: NextFunction) => { if (err instanceof AppError) { - return response.status(err.statusCode).json({ + return response.status(202).json({ status: 'error', + httpCode: err.statusCode, message: err.message, }); } diff --git a/src/services/CreateVanService.ts b/src/services/CreateVanService.ts index 7e392b2..c34a5d0 100644 --- a/src/services/CreateVanService.ts +++ b/src/services/CreateVanService.ts @@ -1,10 +1,12 @@ import { getRepository } from 'typeorm'; import AppError from '../errors/AppError'; +import User from '../models/User'; import Van from '../models/Van'; interface Request { + id_user: string; plate: string; brand: string; model: string; @@ -18,6 +20,7 @@ interface Request { class CreateVanService { public async execute({ + id_user, plate, brand, model, @@ -29,6 +32,18 @@ class CreateVanService { locator_state, }: Request): Promise { const vansRepository = getRepository(Van); + const usersRepository = getRepository(User); + + const user = await usersRepository.findOne({ + where: { id_user }, + }); + + if (!user) { + throw new AppError( + 'O usuário informado não foi encontrado.', + 404, + ); + } const vanExists = await vansRepository.findOne({ where: { plate }, @@ -42,6 +57,7 @@ class CreateVanService { } const van = vansRepository.create({ + user, plate, brand, model, diff --git a/src/services/FindVanService.ts b/src/services/FindVanService.ts index d768417..64e454c 100644 --- a/src/services/FindVanService.ts +++ b/src/services/FindVanService.ts @@ -5,15 +5,15 @@ import AppError from '../errors/AppError'; import Van from '../models/Van'; class FindVanService { - public async execute(id_van: string): Promise { + public async execute(plate: string): Promise { const vansRepository = getRepository(Van); const van = await vansRepository.findOne({ - where: { id_van } + where: { plate } }); if (!van) { - throw new AppError('Van does not exist.'); + throw new AppError('A van informada não existe.'); }; return van; diff --git a/src/services/FindVansByUserIdService.ts b/src/services/FindVansByUserIdService.ts new file mode 100644 index 0000000..9a3245c --- /dev/null +++ b/src/services/FindVansByUserIdService.ts @@ -0,0 +1,33 @@ +import { getRepository } from 'typeorm'; + +import AppError from '../errors/AppError'; + +import User from '../models/User'; +import Van from '../models/Van'; + +class FindVanByUserIdService { + public async execute(id_user: string): Promise { + const usersRepository = getRepository(User); + const vansRepository = getRepository(Van); + + const user = await usersRepository.findOne({ + where: { id_user } + }); + + if (!user) { + throw new AppError('O usuário informado não existe.', 404); + }; + + const van = await vansRepository.find({ + where: { user } + }); + + if (!van) { + throw new AppError('Não há nenhuma van cadastrada para esse usuário.'); + }; + + return van; + } +} + +export default FindVanByUserIdService; diff --git a/src/services/UpdateUserService.ts b/src/services/UpdateUserService.ts index c147881..ebc540e 100644 --- a/src/services/UpdateUserService.ts +++ b/src/services/UpdateUserService.ts @@ -23,18 +23,29 @@ class UpdateUserService { const socialRepository = getRepository(Social); const user = await usersRepository.findOne({ - where: { id_user: id_user } + where: { id_user } }); if (!user) { - throw new AppError('O usuário informado não existe.'); + throw new AppError('O usuário informado não existe.', 404); }; if (name) user.name = name if (lastname) user.lastname = lastname if (bio) user.bio = bio if (email) user.email = email - if (phone_number) user.phone_number = phone_number + + if (phone_number) { + const phoneAlreadyExists = await usersRepository.findOne({ + where: { phone_number } + }); + + if (phoneAlreadyExists) { + throw new AppError('O telefone informado já está em uso por outra conta!', 409); + } + } + + user.phone_number = phone_number if (document_type) user.document_type = document_type if (document) user.document = document diff --git a/yarn.lock b/yarn.lock index 793e536..2daef70 100644 --- a/yarn.lock +++ b/yarn.lock @@ -102,1155 +102,6 @@ "version" "8.3.4" "@types/zen-observable@0.8.3": - version "0.8.3" - resolved "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.3.tgz" - integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== - -accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -app-root-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz" - integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw== - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -axios@^0.27.2: - version "0.27.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" - integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== - dependencies: - follow-redirects "^1.14.9" - form-data "^4.0.0" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bcryptjs@^2.4.3: - version "2.4.3" - resolved "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz" - integrity sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms= - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" - integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer-writer@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz" - integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@^3.5.1: - version "3.5.1" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.3.1" - -cli-highlight@^2.1.11: - version "2.1.11" - resolved "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz" - integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== - dependencies: - chalk "^4.0.0" - highlight.js "^10.7.1" - mz "^2.4.0" - parse5 "^5.1.1" - parse5-htmlparser2-tree-adapter "^6.0.0" - yargs "^16.0.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -cors@^2.8.5: - version "2.8.5" - resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -dateformat@~1.0.4-1.2.3: - version "1.0.12" - resolved "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz" - integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= - dependencies: - get-stdin "^4.0.1" - meow "^3.3.0" - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^4.3.1: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dotenv@^8.2.0: - version "8.6.0" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz" - integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== - -dynamic-dedupe@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz" - integrity sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE= - dependencies: - xtend "^4.0.0" - -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -error-ex@^1.2.0: - version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -express-async-errors@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/express-async-errors/-/express-async-errors-3.1.1.tgz" - integrity sha512-h6aK1da4tpqWSbyCa3FxB/V6Ehd4EEB15zyQq9qe75OZBp0krinNKuH4rAY+S/U/2I36vdLAUFSjQJ+TFmODng== - -express@^4.17.1: - version "4.17.1" - resolved "https://registry.npmjs.org/express/-/express-4.17.1.tgz" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -follow-redirects@^1.14.9: - version "1.15.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.0.tgz#06441868281c86d0dda4ad8bdaead2d02dca89d4" - integrity sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ== - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -glob-parent@~5.1.0: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.1.3, glob@^7.1.6: - version "7.1.6" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -graceful-fs@^4.1.2: - version "4.2.6" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -highlight.js@^10.7.1: - version "10.7.3" - resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== - -hosted-git-info@^2.1.4: - version "2.8.8" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== - -http-errors@1.7.2, http-errors@~1.7.2: - version "1.7.2" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.3, inherits@^2.0.1: - version "2.0.3" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-core-module@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== - dependencies: - has "^1.0.3" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -js-yaml@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsonwebtoken@^8.5.1: - version "8.5.1" - resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz" - integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== - dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^5.6.0" - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" - integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" - integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" - integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= - -lodash.once@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" - integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -mime-db@1.47.0: - version "1.47.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz" - integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime-types@~2.1.24: - version "2.1.30" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz" - integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== - dependencies: - mime-db "1.47.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.1.3, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -object-assign@^4, object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -packet-reader@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz" - integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse5-htmlparser2-tree-adapter@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - -parse5@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -pg-connection-string@^2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz" - integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== - -pg-int8@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz" - integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== - -pg-pool@^3.5.1: - version "3.5.1" - resolved "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz" - integrity sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ== - -pg-protocol@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz" - integrity sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ== - -pg-types@^2.1.0: - version "2.2.0" - resolved "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz" - integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== - dependencies: - pg-int8 "1.0.1" - postgres-array "~2.0.0" - postgres-bytea "~1.0.0" - postgres-date "~1.0.4" - postgres-interval "^1.1.0" - -pg@^8.5.1: - version "8.7.3" - resolved "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz" - integrity sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw== - dependencies: - buffer-writer "2.0.0" - packet-reader "1.0.0" - pg-connection-string "^2.5.0" - pg-pool "^3.5.1" - pg-protocol "^1.5.0" - pg-types "^2.1.0" - pgpass "1.x" - -pgpass@1.x: - version "1.0.5" - resolved "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz" - integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== - dependencies: - split2 "^4.1.0" - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -postgres-array@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz" - integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== - -postgres-bytea@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz" - integrity sha1-AntTPAqokOJtFy1Hz5zOzFIazTU= - -postgres-date@~1.0.4: - version "1.0.7" - resolved "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz" - integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== - -postgres-interval@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz" - integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== - dependencies: - xtend "^4.0.0" - -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.9.1" - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== - dependencies: - picomatch "^2.2.1" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -reflect-metadata@^0.1.13: - version "0.1.13" - resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" - integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -resolve@^1.0.0, resolve@^1.10.0: - version "1.20.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -rimraf@^2.6.1: - version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -safe-buffer@5.1.2, safe-buffer@^5.0.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -======= "integrity" "sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==" "resolved" "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.3.tgz" "version" "0.8.3" @@ -1308,6 +159,19 @@ safe-buffer@5.1.2, safe-buffer@^5.0.1: "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" "version" "1.1.1" +"asynckit@^0.4.0": + "integrity" "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + "version" "0.4.0" + +"axios@^0.27.2": + "integrity" "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==" + "resolved" "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz" + "version" "0.27.2" + dependencies: + "follow-redirects" "^1.14.9" + "form-data" "^4.0.0" + "balanced-match@^1.0.0": "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" @@ -1443,6 +307,13 @@ safe-buffer@5.1.2, safe-buffer@^5.0.1: "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" "version" "1.1.4" +"combined-stream@^1.0.8": + "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" + "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + "version" "1.0.8" + dependencies: + "delayed-stream" "~1.0.0" + "concat-map@0.0.1": "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" @@ -1497,6 +368,11 @@ safe-buffer@5.1.2, safe-buffer@^5.0.1: dependencies: "ms" "2.0.0" +"delayed-stream@~1.0.0": + "integrity" "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + "version" "1.0.0" + "depd@~1.1.2": "integrity" "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" @@ -1622,6 +498,20 @@ safe-buffer@5.1.2, safe-buffer@^5.0.1: "statuses" "~1.5.0" "unpipe" "~1.0.0" +"follow-redirects@^1.14.9": + "integrity" "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz" + "version" "1.15.1" + +"form-data@^4.0.0": + "integrity" "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" + "forwarded@0.2.0": "integrity" "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" @@ -1860,7 +750,7 @@ safe-buffer@5.1.2, safe-buffer@^5.0.1: "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" "version" "1.52.0" -"mime-types@~2.1.24", "mime-types@~2.1.34": +"mime-types@^2.1.12", "mime-types@~2.1.24", "mime-types@~2.1.34": "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" "version" "2.1.35" From 1773990d1edfe6ff2400a463aa24564ada69aa80 Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Mon, 20 Jun 2022 05:43:16 -0500 Subject: [PATCH 10/14] =?UTF-8?q?Corre=C3=A7=C3=A3o=20informa=C3=A7=C3=A3o?= =?UTF-8?q?=20id=20user?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/routes/vans.routes.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/routes/vans.routes.ts b/src/routes/vans.routes.ts index c8ceca6..bcbf2b8 100644 --- a/src/routes/vans.routes.ts +++ b/src/routes/vans.routes.ts @@ -42,7 +42,6 @@ vansRouter.get('/user/:id_user', ensureAuthenticated, async (request, response) vansRouter.post('/', async (request, response) => { const { - id_user, plate, brand, model, @@ -57,7 +56,7 @@ vansRouter.post('/', async (request, response) => { const createVanService = new CreateVanService(); const van = await createVanService.execute({ - id_user, + id_user: request.user.id_user, plate, brand, model, From 9c59fe64dedad3d59a4fcbd2a73601a761262650 Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Mon, 20 Jun 2022 05:50:59 -0500 Subject: [PATCH 11/14] =?UTF-8?q?Corre=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/routes/vans.routes.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/routes/vans.routes.ts b/src/routes/vans.routes.ts index bcbf2b8..9203a78 100644 --- a/src/routes/vans.routes.ts +++ b/src/routes/vans.routes.ts @@ -40,7 +40,7 @@ vansRouter.get('/user/:id_user', ensureAuthenticated, async (request, response) return response.json({ data: vans }); }); -vansRouter.post('/', async (request, response) => { +vansRouter.post('/', ensureAuthenticated, async (request, response) => { const { plate, brand, @@ -55,6 +55,9 @@ vansRouter.post('/', async (request, response) => { const createVanService = new CreateVanService(); + console.log('aaaaaaaaaaaaaaa') + console.log(request.user) + const van = await createVanService.execute({ id_user: request.user.id_user, plate, From 8d77f0dae519d931c225978e01312662ba0f2303 Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Mon, 20 Jun 2022 17:27:25 -0500 Subject: [PATCH 12/14] =?UTF-8?q?Adicionando=20rota=20que=20retorna=20se?= =?UTF-8?q?=20usu=C3=A1rio=20=C3=A9=20status=20motorista?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/routes/users.routes.ts | 102 ++++++++++++++-------- src/routes/vans.routes.ts | 36 +++++--- src/services/CheckIfUserHasVansService.ts | 33 +++++++ 3 files changed, 119 insertions(+), 52 deletions(-) create mode 100644 src/services/CheckIfUserHasVansService.ts diff --git a/src/routes/users.routes.ts b/src/routes/users.routes.ts index d9dc904..cf35305 100644 --- a/src/routes/users.routes.ts +++ b/src/routes/users.routes.ts @@ -2,6 +2,8 @@ import { Router } from 'express'; import { getRepository } from 'typeorm'; import User from '../models/User'; +import ensureAuthenticated from '../middlewares/ensureAuthenticated'; + import CreateUserService from '../services/CreateUserService'; import FindUserService from '../services/FindUserService'; import FindUserSocialService from '../services/FindUserSocialService'; @@ -9,9 +11,8 @@ import UpdateUserSocialService from '../services/UpdateUserSocialService'; import UpdateUserService from '../services/UpdateUserService'; import UpdateUserAvatarService from '../services/UpdateUserAvatarService'; import UpdateUserPasswordService from '../services/UpdateUserPasswordService'; -import ensureAuthenticated from '../middlewares/ensureAuthenticated'; -import ensureAdmin from '../middlewares/ensureAdmin'; import AuthenticateUserService from '../services/AuthenticateUserService'; +import CheckIfUserHasVansService from '../services/CheckIfUserHasVansService'; const usersRouter = Router(); @@ -51,13 +52,13 @@ usersRouter.get('/:id', ensureAuthenticated, async (request, response) => { const user = await findUserService.execute(id); // converting ISO 8601 date to normal date - let birth_date = new Date(user.birth_date) + let birth_date = new Date(user.birth_date); - let year = birth_date.getFullYear() - let month = birth_date.getMonth()+1 - let date = birth_date.getDate() + let year = birth_date.getFullYear(); + let month = birth_date.getMonth() + 1; + let date = birth_date.getDate(); - const finalDate = `${date}/${month}/${year}` + const finalDate = `${date}/${month}/${year}`; const userWithoutPassword = { id_user: user.id_user, @@ -69,7 +70,7 @@ usersRouter.get('/:id', ensureAuthenticated, async (request, response) => { avatar_image: user.avatar_image, bio: user.bio, document_type: user.document_type, - document: user.document + document: user.document, // created_at: user.created_at, // updated_at: user.updated_at, }; @@ -101,7 +102,16 @@ usersRouter.post('/', async (request, response) => { }); usersRouter.patch('/edit', ensureAuthenticated, async (request, response) => { - const { name, lastname, bio, email, phone_number, birth_date, document_type, document } = request.body; + const { + name, + lastname, + bio, + email, + phone_number, + birth_date, + document_type, + document, + } = request.body; const updateUserService = new UpdateUserService(); @@ -114,24 +124,44 @@ usersRouter.patch('/edit', ensureAuthenticated, async (request, response) => { phone_number, birth_date, document_type, - document + document, }); return response.json({ message: 'Perfil atualizado com sucesso.' }); }); -usersRouter.patch('/edit/avatar', ensureAuthenticated, async (request, response) => { - const { avatar_image } = request.body; +usersRouter.get( + '/isDriver/:id_user', + // ensureAuthenticated, + async (request, response) => { + const { id_user } = request.params; - const updateUserAvatarService = new UpdateUserAvatarService(); + const checkIfUserHasVansService = new CheckIfUserHasVansService(); - await updateUserAvatarService.execute({ - id_user: request.user.id_user, - avatar_image, - }); + const userHasVans = await checkIfUserHasVansService.execute({ + id_user, + }); - return response.json({ message: 'Avatar atualizado com sucesso !' }); -}); + return response.json({ result: userHasVans }); + }, +); + +usersRouter.patch( + '/edit/avatar', + ensureAuthenticated, + async (request, response) => { + const { avatar_image } = request.body; + + const updateUserAvatarService = new UpdateUserAvatarService(); + + await updateUserAvatarService.execute({ + id_user: request.user.id_user, + avatar_image, + }); + + return response.json({ message: 'Avatar atualizado com sucesso !' }); + }, +); usersRouter.get( '/social/:id', @@ -196,27 +226,23 @@ usersRouter.get( }, ); -usersRouter.patch( - '/social', - ensureAuthenticated, - async (request, response) => { - const { id_user, phone, whatsapp, facebook, telegram } = request.body; +usersRouter.patch('/social', ensureAuthenticated, async (request, response) => { + const { id_user, phone, whatsapp, facebook, telegram } = request.body; - const social_network = { - phone, - whatsapp, - facebook, - telegram - } + const social_network = { + phone, + whatsapp, + facebook, + telegram, + }; - const updateUserSocialService = new UpdateUserSocialService(); - const social = await updateUserSocialService.execute({ - id_user, - social_network - }); + const updateUserSocialService = new UpdateUserSocialService(); + const social = await updateUserSocialService.execute({ + id_user, + social_network, + }); - return response.json({ data: social }); - }, -); + return response.json({ data: social }); +}); export default usersRouter; diff --git a/src/routes/vans.routes.ts b/src/routes/vans.routes.ts index 9203a78..de8ad86 100644 --- a/src/routes/vans.routes.ts +++ b/src/routes/vans.routes.ts @@ -20,25 +20,33 @@ vansRouter.get('/list', async (request, response) => { return response.json({ data: vans }); }); -vansRouter.get('/plate/:plate', ensureAuthenticated, async (request, response) => { - const { plate } = request.params; +vansRouter.get( + '/plate/:plate', + ensureAuthenticated, + async (request, response) => { + const { plate } = request.params; - const findVanService = new FindVanService(); + const findVanService = new FindVanService(); - const van = await findVanService.execute(plate); + const van = await findVanService.execute(plate); - return response.json({ data: van }); -}); + return response.json({ data: van }); + }, +); -vansRouter.get('/user/:id_user', ensureAuthenticated, async (request, response) => { - const { id_user } = request.params; +vansRouter.get( + '/user/:id_user', + // ensureAuthenticated, + async (request, response) => { + const { id_user } = request.params; - const findVanByUserIdService = new FindVanByUserIdService(); + const findVanByUserIdService = new FindVanByUserIdService(); - const vans = await findVanByUserIdService.execute(id_user); + const vans = await findVanByUserIdService.execute(id_user); - return response.json({ data: vans }); -}); + return response.json({ data: vans }); + }, +); vansRouter.post('/', ensureAuthenticated, async (request, response) => { const { @@ -55,8 +63,8 @@ vansRouter.post('/', ensureAuthenticated, async (request, response) => { const createVanService = new CreateVanService(); - console.log('aaaaaaaaaaaaaaa') - console.log(request.user) + console.log('aaaaaaaaaaaaaaa'); + console.log(request.user); const van = await createVanService.execute({ id_user: request.user.id_user, diff --git a/src/services/CheckIfUserHasVansService.ts b/src/services/CheckIfUserHasVansService.ts new file mode 100644 index 0000000..bb89992 --- /dev/null +++ b/src/services/CheckIfUserHasVansService.ts @@ -0,0 +1,33 @@ +import { getRepository } from 'typeorm'; + +import AppError from '../errors/AppError'; + +import User from '../models/User'; +import Van from '../models/Van'; + +interface Request { + id_user: string; +} + +class CheckIfUserHasVansService { + public async execute({ id_user }: Request): Promise { + const usersRepository = getRepository(User); + const vansRepository = getRepository(Van); + + const user = await usersRepository.findOne({ + where: { id_user }, + }); + + if (!user) { + throw new AppError('O usuário informado não foi encontrado.', 404); + } + + const vanExists = await vansRepository.findOne({ + where: { user }, + }); + + return !!vanExists + } +} + +export default CheckIfUserHasVansService; From 836fff8771c52788e2b81cbfd62e2fd938c1600f Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Mon, 20 Jun 2022 17:28:09 -0500 Subject: [PATCH 13/14] =?UTF-8?q?Removendo=20linhas=20de=20coment=C3=A1rio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/routes/users.routes.ts | 2 +- src/routes/vans.routes.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/routes/users.routes.ts b/src/routes/users.routes.ts index cf35305..b27c4e5 100644 --- a/src/routes/users.routes.ts +++ b/src/routes/users.routes.ts @@ -132,7 +132,7 @@ usersRouter.patch('/edit', ensureAuthenticated, async (request, response) => { usersRouter.get( '/isDriver/:id_user', - // ensureAuthenticated, + ensureAuthenticated, async (request, response) => { const { id_user } = request.params; diff --git a/src/routes/vans.routes.ts b/src/routes/vans.routes.ts index de8ad86..f657fbf 100644 --- a/src/routes/vans.routes.ts +++ b/src/routes/vans.routes.ts @@ -36,7 +36,6 @@ vansRouter.get( vansRouter.get( '/user/:id_user', - // ensureAuthenticated, async (request, response) => { const { id_user } = request.params; From 3cbdee7706c0cca17f4f38548549916ad175e293 Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Mon, 20 Jun 2022 17:52:03 -0500 Subject: [PATCH 14/14] Vazio --- src/routes/users.routes.ts | 2 -- src/services/CreateUserService.ts | 4 ---- 2 files changed, 6 deletions(-) diff --git a/src/routes/users.routes.ts b/src/routes/users.routes.ts index b27c4e5..2f5cff4 100644 --- a/src/routes/users.routes.ts +++ b/src/routes/users.routes.ts @@ -42,8 +42,6 @@ usersRouter.get('/list', async (request, response) => { return response.json({ data: users }); }); -// TODO, criar middleware ensureIsOwnUser é necessário? -// usar browserAgent, Encrypted Local Storage ou algo do tipo usersRouter.get('/:id', ensureAuthenticated, async (request, response) => { const { id } = request.params; diff --git a/src/services/CreateUserService.ts b/src/services/CreateUserService.ts index 9ba7ad9..0feffbf 100644 --- a/src/services/CreateUserService.ts +++ b/src/services/CreateUserService.ts @@ -39,10 +39,6 @@ class CreateUserService { await usersRepository.save(user); - // já criar registro na tabela Socials para evitar inconsistências - const social = socialInformationRepository.create({ user, phone: "", whatsapp: "", facebook: "", telegram: "" }); - await socialInformationRepository.save(social); - return user; } }