From 7af05b8b4c756c69fcdcf862dd5592c1c0434a5f Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Sun, 29 Oct 2023 17:50:15 -0300 Subject: [PATCH 001/115] class validator inserido em todas as classes --- src/modules/categorias/categorias.service.ts | 16 +- .../clientes/dto/create-cliente.dto.ts | 76 +++++++-- .../clientes/dto/update-cliente.dto.ts | 78 +++++++-- .../clientes/entities/cliente.entity.ts | 23 ++- .../cotacoes/dto/create-cotacao.dto.ts | 11 ++ .../cotacoes/dto/update-cotacao.dto.ts | 11 ++ .../cotacoes/entities/cotacao.entity.ts | 12 ++ .../fornecedores/dto/create-fornecedor.dto.ts | 151 ++++++++++------- .../fornecedores/dto/update-fornecedor.dto.ts | 152 +++++++++++------- .../entities/fornecedor.entity.ts | 36 ++++- .../dto/create-insumo-produtos-base.dto.ts | 7 + .../dto/update-insumo-produtos-base.dto.ts | 7 + .../entities/insumo-produtos-base.entity.ts | 10 +- src/modules/insumos/dto/create-insumo.dto.ts | 16 +- src/modules/insumos/dto/update-insumo.dto.ts | 18 ++- src/modules/insumos/entities/insumo.entity.ts | 6 + .../dto/create-lista-insumo.dto.ts | 10 +- .../dto/update-lista-insumo.dto.ts | 16 +- .../entities/lista-insumo.entity.ts | 9 +- .../orcamentos/dto/create-orcamento.dto.ts | 28 ++-- .../orcamentos/dto/update-orcamento.dto.ts | 28 ++-- .../orcamentos/entities/orcamento.entity.ts | 19 ++- src/modules/pedidos/dto/create-pedido.dto.ts | 14 +- src/modules/pedidos/dto/update-pedido.dto.ts | 48 +++--- src/modules/pedidos/entities/pedido.entity.ts | 25 +-- src/modules/pedidos/pedidos.service.ts | 26 +-- .../dto/create-produtos-base.dto.ts | 4 + .../dto/update-produtos-base.dto.ts | 6 +- .../entities/produtos-base.entity.ts | 4 + .../produtos/dto/create-produto.dto.ts | 23 ++- .../produtos/dto/update-produto.dto.ts | 19 ++- .../produtos/entities/produto.entity.ts | 10 +- .../usuarios/dto/create-usuario.dto.ts | 14 +- .../usuarios/dto/update-usuario.dto.ts | 16 +- .../usuarios/entities/usuario.entity.ts | 12 ++ 35 files changed, 689 insertions(+), 272 deletions(-) diff --git a/src/modules/categorias/categorias.service.ts b/src/modules/categorias/categorias.service.ts index 36dff85..a7db691 100644 --- a/src/modules/categorias/categorias.service.ts +++ b/src/modules/categorias/categorias.service.ts @@ -7,15 +7,14 @@ import { PrismaService } from '../../databases/prisma.service'; export class CategoriasService { constructor(private readonly prismaService: PrismaService) {} - async findAllWithPagination(page: number, perPage: number) { const skip = (page - 1) * perPage; const categorias = await this.prismaService.categoria.findMany({ - skip, - take: perPage, - }); - const total = await this.prismaService.categoria.count(); - return { categorias }; + skip, + take: perPage, + }); + const total = await this.prismaService.categoria.count(); + return { categorias }; } async findOneByTitle(titulo: string) { @@ -24,9 +23,8 @@ export class CategoriasService { }); } - async countAllCategorias(){ - return await this.prismaService.categoria.count({ - }); + async countAllCategorias() { + return await this.prismaService.categoria.count({}); } async findManyByTitle(titulo: string) { diff --git a/src/modules/clientes/dto/create-cliente.dto.ts b/src/modules/clientes/dto/create-cliente.dto.ts index c592115..c18ad50 100644 --- a/src/modules/clientes/dto/create-cliente.dto.ts +++ b/src/modules/clientes/dto/create-cliente.dto.ts @@ -1,106 +1,152 @@ import { ApiProperty } from '@nestjs/swagger'; import { contaTipo } from '@prisma/client'; +import { + IsEmail, + IsEnum, + IsNotEmpty, + IsNumberString, + IsString, + Matches, +} from 'class-validator'; export class CreateClienteDto { @ApiProperty({ description: 'O email serve para descrever o email do cliente', example: 'email@gmail.com', }) + @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) + @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email: string; @ApiProperty({ - description: 'O telefone serve para descrever o numero de telefone do cliente', + description: + 'O telefone serve para descrever o numero de telefone do cliente', example: '1734112736', }) + @IsNotEmpty({ message: 'O telefone não pode estar vazio' }) + @IsNumberString({}, { message: 'O telefone inserido não é válido' }) telefone: string; @ApiProperty({ description: 'O tipo serve para diferenciar entre pessoa fisica e juridica', example: 'Fisica', }) + @IsNotEmpty({ message: 'O tipo da conta não pode estar vazio' }) + @IsEnum(contaTipo, { + message: 'O tipo da conta não condiz com as opções disponíveis', + }) contaTipo: contaTipo; @ApiProperty({ - description: 'O nome serve para identificar o cliente, caso seja pessoa fisica', + description: + 'O nome serve para identificar o cliente, caso seja pessoa fisica', example: 'João Pedro', }) + @IsString({ message: 'O nome inserido não é válido' }) + @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; @ApiProperty({ - description: 'O CPF serve para identificar o cliente, caso seja pessoa fisica', + description: + 'O CPF serve para identificar o cliente, caso seja pessoa fisica', example: '02370334029', }) + @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; @ApiProperty({ - description: 'O RG serve para identificar o cliente, caso seja pessoa fisica', + description: + 'O RG serve para identificar o cliente, caso seja pessoa fisica', example: '114421225', }) + @IsNumberString({}, { message: 'O RG inserido não é válido' }) rg?: string; @ApiProperty({ - description: 'O nome fantasia serve para identificar o cliente, caso seja pessoa juridica', + description: + 'O nome fantasia serve para identificar o cliente, caso seja pessoa juridica', example: 'ZawnTech', }) + @IsString({ message: 'O nome fantasia inserido não é válido' }) nomeFantasia?: string; @ApiProperty({ - description: 'A razão social serve para identificar o cliente, caso seja pessoa juridica', + description: + 'A razão social serve para identificar o cliente, caso seja pessoa juridica', example: 'Industria mecanica modelo Ltda.', }) + @IsString({ message: 'A razão social inserida não é válida' }) razaoSocial?: string; @ApiProperty({ - description: 'O CNPJ serve para identificar o cliente, caso seja pessoa juridica', + description: + 'O CNPJ serve para identificar o cliente, caso seja pessoa juridica', example: '31895255000193', }) + @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) cnpj?: string; @ApiProperty({ - description: 'O pais serve para identificar a região onde o cliente se encontra', + description: + 'O pais serve para identificar a região onde o cliente se encontra', example: 'Brasil', }) + @IsString({ message: 'O país inserido não é válido' }) pais?: string; @ApiProperty({ - description: 'O CEP serve para identificar a região onde o cliente se encontra', + description: + 'O CEP serve para identificar a região onde o cliente se encontra', example: '69918170', }) + @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; @ApiProperty({ - description: 'O estado serve para identificar a região onde o cliente se encontra', + description: + 'O estado serve para identificar a região onde o cliente se encontra', example: 'SP', }) + @IsString({ message: 'O estado inserido não é válido' }) estado?: string; @ApiProperty({ - description: 'A cidade serve para identificar a região onde o cliente se encontra', + description: + 'A cidade serve para identificar a região onde o cliente se encontra', example: 'Sorocaba', }) + @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; @ApiProperty({ - description: 'O bairro serve para identificar o local onde o cliente se encontra', + description: + 'O bairro serve para identificar o local onde o cliente se encontra', example: 'Vila Barão', }) + @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; @ApiProperty({ - description: 'A rua serve para identificar o local onde o cliente se encontra', + description: + 'A rua serve para identificar o local onde o cliente se encontra', example: 'Rua Manuel Lourenço Rodrigues', }) + @IsString({ message: 'A rua inserida não é válida' }) rua?: string; @ApiProperty({ - description: 'O numero serve para identificar o local onde o cliente se encontra', + description: + 'O numero serve para identificar o local onde o cliente se encontra', example: '44', }) + @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; @ApiProperty({ - description: 'O complemento serve para dar informações adicionais para identificar o local onde o cliente se encontra', + description: + 'O complemento serve para dar informações adicionais para identificar o local onde o cliente se encontra', example: 'apt. 42', }) + @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; } diff --git a/src/modules/clientes/dto/update-cliente.dto.ts b/src/modules/clientes/dto/update-cliente.dto.ts index a7e6ad6..858f775 100644 --- a/src/modules/clientes/dto/update-cliente.dto.ts +++ b/src/modules/clientes/dto/update-cliente.dto.ts @@ -2,107 +2,153 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateClienteDto } from './create-cliente.dto'; import { contaTipo } from '@prisma/client'; import { ApiProperty } from '@nestjs/swagger'; +import { + IsEmail, + IsEnum, + IsNotEmpty, + IsNumberString, + IsString, + Matches, +} from 'class-validator'; export class UpdateClienteDto extends PartialType(CreateClienteDto) { @ApiProperty({ - description: 'O email serve pare descrever o email do cliente', + description: 'O email serve para descrever o email do cliente', example: 'email@gmail.com', }) + @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) + @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email?: string; @ApiProperty({ - description: 'O telefone serve para descrever o numero de telefone do cliente', + description: + 'O telefone serve para descrever o numero de telefone do cliente', example: '1734112736', }) + @IsNotEmpty({ message: 'O telefone não pode estar vazio' }) + @IsNumberString({}, { message: 'O telefone inserido não é válido' }) telefone?: string; @ApiProperty({ description: 'O tipo serve para diferenciar entre pessoa fisica e juridica', example: 'Fisica', }) + @IsNotEmpty({ message: 'O tipo da conta não pode estar vazio' }) + @IsEnum(contaTipo, { + message: 'O tipo da conta não condiz com as opções disponíveis', + }) contaTipo?: contaTipo; @ApiProperty({ - description: 'O nome serve para identificar o cliente, caso seja pessoa fisica', + description: + 'O nome serve para identificar o cliente, caso seja pessoa fisica', example: 'João Pedro', }) + @IsString({ message: 'O nome inserido não é válido' }) + @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; @ApiProperty({ - description: 'O CPF serve para identificar o cliente, caso seja pessoa fisica', + description: + 'O CPF serve para identificar o cliente, caso seja pessoa fisica', example: '02370334029', }) + @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; @ApiProperty({ - description: 'O RG serve para identificar o cliente, caso seja pessoa fisica', + description: + 'O RG serve para identificar o cliente, caso seja pessoa fisica', example: '114421225', }) + @IsNumberString({}, { message: 'O RG inserido não é válido' }) rg?: string; @ApiProperty({ - description: 'O nome fantasia serve para identificar o cliente, caso seja pessoa juridica', + description: + 'O nome fantasia serve para identificar o cliente, caso seja pessoa juridica', example: 'ZawnTech', }) + @IsString({ message: 'O nome fantasia inserido não é válido' }) nomeFantasia?: string; @ApiProperty({ - description: 'A razão social serve para identificar o cliente, caso seja pessoa juridica', + description: + 'A razão social serve para identificar o cliente, caso seja pessoa juridica', example: 'Industria mecanica modelo Ltda.', }) + @IsString({ message: 'A razão social inserida não é válida' }) razaoSocial?: string; @ApiProperty({ - description: 'O CNPJ serve para identificar o cliente, caso seja pessoa juridica', + description: + 'O CNPJ serve para identificar o cliente, caso seja pessoa juridica', example: '31895255000193', }) + @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) cnpj?: string; @ApiProperty({ - description: 'O pais serve para identificar a região onde o cliente se encontra', + description: + 'O pais serve para identificar a região onde o cliente se encontra', example: 'Brasil', }) + @IsString({ message: 'O país inserido não é válido' }) pais?: string; @ApiProperty({ - description: 'O CEP serve para identificar a região onde o cliente se encontra', + description: + 'O CEP serve para identificar a região onde o cliente se encontra', example: '69918170', }) + @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; @ApiProperty({ - description: 'O estado serve para identificar a região onde o cliente se encontra', + description: + 'O estado serve para identificar a região onde o cliente se encontra', example: 'SP', }) + @IsString({ message: 'O estado inserido não é válido' }) estado?: string; @ApiProperty({ - description: 'A cidade serve para identificar a região onde o cliente se encontra', + description: + 'A cidade serve para identificar a região onde o cliente se encontra', example: 'Sorocaba', }) + @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; @ApiProperty({ - description: 'O bairro serve para identificar o local onde o cliente se encontra', + description: + 'O bairro serve para identificar o local onde o cliente se encontra', example: 'Vila Barão', }) + @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; @ApiProperty({ - description: 'A rua serve para identificar o local onde o cliente se encontra', + description: + 'A rua serve para identificar o local onde o cliente se encontra', example: 'Rua Manuel Lourenço Rodrigues', }) + @IsString({ message: 'A rua inserida não é válida' }) rua?: string; @ApiProperty({ - description: 'O numero serve para identificar o local onde o cliente se encontra', + description: + 'O numero serve para identificar o local onde o cliente se encontra', example: '44', }) + @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; @ApiProperty({ - description: 'O complemento serve para dar informações adicionais para identificar o local onde o cliente se encontra', + description: + 'O complemento serve para dar informações adicionais para identificar o local onde o cliente se encontra', example: 'apt. 42', }) + @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; } diff --git a/src/modules/clientes/entities/cliente.entity.ts b/src/modules/clientes/entities/cliente.entity.ts index 99fca25..0104e10 100644 --- a/src/modules/clientes/entities/cliente.entity.ts +++ b/src/modules/clientes/entities/cliente.entity.ts @@ -1,43 +1,54 @@ import { contaTipo } from '@prisma/client'; import { - IsDate, IsEmail, IsEnum, IsNotEmpty, + IsNumberString, IsString, Matches, - ValidateIf, } from 'class-validator'; export class Cliente { id: number; @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) - @IsEmail({}, { message: 'O e-mail não é válido' }) + @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email: string; @IsNotEmpty({ message: 'O telefone não pode estar vazio' }) - @IsString({ message: 'O telefone não é uma string' }) + @IsNumberString({}, { message: 'O telefone inserido não é válido' }) telefone: string; @IsNotEmpty({ message: 'O tipo da conta não pode estar vazio' }) @IsEnum(contaTipo, { message: 'O tipo da conta não condiz com as opções disponíveis', }) contaTipo: contaTipo; + @IsString({ message: 'O nome inserido não é válido' }) @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; + @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; + @IsNumberString({}, { message: 'O RG inserido não é válido' }) rg?: string; - @IsString({ message: 'O nome fantasia não é uma string' }) + @IsString({ message: 'O nome fantasia inserido não é válido' }) nomeFantasia?: string; - @IsString({ message: 'A razão social não é uma string' }) + @IsString({ message: 'A razão social inserida não é válida' }) razaoSocial?: string; + @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) cnpj?: string; + @IsString({ message: 'O país inserido não é válido' }) pais?: string; + @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; + @IsString({ message: 'O estado inserido não é válido' }) estado?: string; + @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; + @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; + @IsString({ message: 'A rua inserida não é válida' }) rua?: string; + @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; + @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; createdAt: Date; updatedAt: Date; diff --git a/src/modules/cotacoes/dto/create-cotacao.dto.ts b/src/modules/cotacoes/dto/create-cotacao.dto.ts index e5fe079..99952d5 100644 --- a/src/modules/cotacoes/dto/create-cotacao.dto.ts +++ b/src/modules/cotacoes/dto/create-cotacao.dto.ts @@ -1,4 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; +import { IsDate, IsNotEmpty, IsNumber, IsString } from 'class-validator'; export class CreateCotacaoDto { @ApiProperty({ @@ -6,6 +7,8 @@ export class CreateCotacaoDto { 'A data serve para descrever quando esta cotação foi realizada', example: '2023-10-23T17:30:44.382Z', }) + @IsNotEmpty({ message: 'A data não pode estar vazia' }) + @IsDate({ message: 'A data inserida não é válida' }) data: Date; @ApiProperty({ @@ -13,6 +16,8 @@ export class CreateCotacaoDto { 'O valor serve para descrever o quanto o insumo de uma cotação especifica esta custando', example: '100', }) + @IsNotEmpty({ message: 'O valor não pode estar vazio' }) + @IsNumber({}, { message: 'O valor inserido não é válido' }) valor: number; @ApiProperty({ @@ -20,6 +25,8 @@ export class CreateCotacaoDto { 'O id do fornecedor serve para descrever com qual fornecedor foi realizada a cotação', example: 'NK Serralheria', }) + @IsNumber({}, { message: 'O fornecedor inserido não é válido' }) + @IsNotEmpty({ message: 'O fornecedor não pode estar vazio' }) idFornecedor: number; @ApiProperty({ @@ -27,7 +34,11 @@ export class CreateCotacaoDto { 'O id do insumo serve para descrever para qual insumo esta cotação foi realizada', example: '1', }) + @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) + @IsNumber({}, { message: 'O insumo inserido não é válido' }) idInsumo: number; + @IsNotEmpty({ message: 'A unidade não pode estar vazia' }) + @IsString({ message: 'A unidade inserida não é válida' }) unidade: string; } diff --git a/src/modules/cotacoes/dto/update-cotacao.dto.ts b/src/modules/cotacoes/dto/update-cotacao.dto.ts index 55772cf..4ae51e7 100644 --- a/src/modules/cotacoes/dto/update-cotacao.dto.ts +++ b/src/modules/cotacoes/dto/update-cotacao.dto.ts @@ -1,6 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateCotacaoDto } from './create-cotacao.dto'; import { ApiProperty } from '@nestjs/swagger'; +import { IsDate, IsNotEmpty, IsNumber, IsString } from 'class-validator'; export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { @ApiProperty({ @@ -8,6 +9,8 @@ export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { 'A data serve para descrever quando esta cotação foi realizada', example: '2023-10-23T17:30:44.382Z', }) + @IsNotEmpty({ message: 'A data não pode estar vazia' }) + @IsDate({ message: 'A data inserida não é válida' }) data?: Date; @ApiProperty({ @@ -15,6 +18,8 @@ export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { 'O valor serve para descrever o quanto o insumo de uma cotação especifica esta custando', example: '100', }) + @IsNotEmpty({ message: 'O valor não pode estar vazio' }) + @IsNumber({}, { message: 'O valor inserido não é válido' }) valor?: number; @ApiProperty({ @@ -22,6 +27,8 @@ export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { 'O id do fornecedor serve para descrever com qual fornecedor foi realizada a cotação', example: 'NK Serralheria', }) + @IsNumber({}, { message: 'O fornecedor inserido não é válido' }) + @IsNotEmpty({ message: 'O fornecedor não pode estar vazio' }) idFornecedor?: number; @ApiProperty({ @@ -29,7 +36,11 @@ export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { 'O id do insumo serve para descrever para qual insumo esta cotação foi realizada', example: '1', }) + @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) + @IsNumber({}, { message: 'O insumo inserido não é válido' }) idInsumo?: number; + @IsNotEmpty({ message: 'A unidade não pode estar vazia' }) + @IsString({ message: 'A unidade inserida não é válida' }) unidade?: string; } diff --git a/src/modules/cotacoes/entities/cotacao.entity.ts b/src/modules/cotacoes/entities/cotacao.entity.ts index 4d28143..a312d56 100644 --- a/src/modules/cotacoes/entities/cotacao.entity.ts +++ b/src/modules/cotacoes/entities/cotacao.entity.ts @@ -1,9 +1,21 @@ +import { IsDate, IsNotEmpty, IsNumber, IsString } from 'class-validator'; + export class Cotacao { id: number; + @IsNotEmpty({ message: 'A data não pode estar vazia' }) + @IsDate({ message: 'A data inserida não é válida' }) data: Date; + @IsNotEmpty({ message: 'O valor não pode estar vazio' }) + @IsNumber({}, { message: 'O valor inserido não é válido' }) valor: number; + @IsNumber({}, { message: 'O fornecedor inserido não é válido' }) + @IsNotEmpty({ message: 'O fornecedor não pode estar vazio' }) idFornecedor: number; + @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) + @IsNumber({}, { message: 'O insumo inserido não é válido' }) idInsumo: number; + @IsNotEmpty({ message: 'A unidade não pode estar vazia' }) + @IsString({ message: 'A unidade inserida não é válida' }) unidade: string; createdAt: Date; updatedAt: Date; diff --git a/src/modules/fornecedores/dto/create-fornecedor.dto.ts b/src/modules/fornecedores/dto/create-fornecedor.dto.ts index 65bca1e..9a99dfa 100644 --- a/src/modules/fornecedores/dto/create-fornecedor.dto.ts +++ b/src/modules/fornecedores/dto/create-fornecedor.dto.ts @@ -1,107 +1,146 @@ import { ApiProperty } from '@nestjs/swagger'; import { contaTipo } from '@prisma/client'; +import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches } from 'class-validator'; export class CreateFornecedorDto { @ApiProperty({ - description: 'O email serve pare descrever o email do fornecedor', + description: 'O email serve para descrever o email do fornecedor', example: 'email@gmail.com', }) + @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) + @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email: string; - + @ApiProperty({ - description: 'O telefone serve para descrever o numero de telefone do fornecedor', + description: + 'O telefone serve para descrever o numero de telefone do fornecedor', example: '1734112736', }) + @IsNotEmpty({ message: 'O telefone não pode estar vazio' }) + @IsNumberString({}, { message: 'O telefone inserido não é válido' }) telefone: string; - + @ApiProperty({ description: 'O tipo serve para diferenciar entre pessoa fisica e juridica', example: 'Fisica', }) + @IsNotEmpty({ message: 'O tipo da conta não pode estar vazio' }) + @IsEnum(contaTipo, { + message: 'O tipo da conta não condiz com as opções disponíveis', + }) contaTipo: contaTipo; - + + @ApiProperty({ + description: + 'O nome serve para identificar o fornecedor, caso seja pessoa fisica', + example: 'João Pedro', + }) + @IsString({ message: 'O nome inserido não é válido' }) + @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) + nome?: string; + @ApiProperty({ - description: 'O pais serve para identificar a região onde o fornecedor se encontra', + description: + 'O CPF serve para identificar o fornecedor, caso seja pessoa fisica', + example: '02370334029', + }) + @IsNumberString({}, { message: 'O CPF inserido não é válido' }) + cpf?: string; + + @ApiProperty({ + description: + 'O RG serve para identificar o fornecedor, caso seja pessoa fisica', + example: '114421225', + }) + @IsNumberString({}, { message: 'O RG inserido não é válido' }) + rg?: string; + + @ApiProperty({ + description: + 'O nome fantasia serve para identificar o fornecedor, caso seja pessoa juridica', + example: 'ZawnTech', + }) + @IsString({ message: 'O nome fantasia inserido não é válido' }) + nomeFantasia?: string; + + @ApiProperty({ + description: + 'A razão social serve para identificar o fornecedor, caso seja pessoa juridica', + example: 'Industria mecanica modelo Ltda.', + }) + @IsString({ message: 'A razão social inserida não é válida' }) + razaoSocial?: string; + + @ApiProperty({ + description: + 'O CNPJ serve para identificar o fornecedor, caso seja pessoa juridica', + example: '31895255000193', + }) + @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) + cnpj?: string; + + @ApiProperty({ + description: + 'O pais serve para identificar a região onde o fornecedor se encontra', example: 'Brasil', }) + @IsString({ message: 'O país inserido não é válido' }) pais?: string; - + @ApiProperty({ - description: 'O CEP serve para identificar a região onde o fornecedor se encontra', + description: + 'O CEP serve para identificar a região onde o fornecedor se encontra', example: '69918170', }) + @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; - + @ApiProperty({ - description: 'O estado serve para identificar a região onde o fornecedor se encontra', + description: + 'O estado serve para identificar a região onde o fornecedor se encontra', example: 'SP', }) + @IsString({ message: 'O estado inserido não é válido' }) estado?: string; - + @ApiProperty({ - description: 'A cidade serve para identificar a região onde o fornecedor se encontra', + description: + 'A cidade serve para identificar a região onde o fornecedor se encontra', example: 'Sorocaba', }) + @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; - + @ApiProperty({ - description: 'O bairro serve para identificar o local onde o fornecedor se encontra', + description: + 'O bairro serve para identificar o local onde o fornecedor se encontra', example: 'Vila Barão', }) + @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; - + @ApiProperty({ - description: 'A rua serve para identificar o local onde o fornecedor se encontra', + description: + 'A rua serve para identificar o local onde o fornecedor se encontra', example: 'Rua Manuel Lourenço Rodrigues', }) + @IsString({ message: 'A rua inserida não é válida' }) rua?: string; - + @ApiProperty({ - description: 'O numero serve para identificar o local onde o fornecedor se encontra', + description: + 'O numero serve para identificar o local onde o fornecedor se encontra', example: '44', }) + @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; - + @ApiProperty({ - description: 'O complemento serve para dar informações adicionais para identificar o local onde o fornecedor se encontra', + description: + 'O complemento serve para dar informações adicionais para identificar o local onde o fornecedor se encontra', example: 'apt. 42', }) + @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; - - @ApiProperty({ - description: 'O nome serve para identificar o fornecedor, caso seja pessoa fisica', - example: 'João Pedro', - }) - nome?: string; - - @ApiProperty({ - description: 'O CPF serve para identificar o fornecedor, caso seja pessoa fisica', - example: '02370334029', - }) - cpf?: string; - - @ApiProperty({ - description: 'O RG serve para identificar o fornecedor, caso seja pessoa fisica', - example: '114421225', - }) - rg?: string; - - @ApiProperty({ - description: 'O nome fantasia serve para identificar o fornecedor, caso seja pessoa juridica', - example: 'ZawnTech', - }) - nomeFantasia?: string; - - @ApiProperty({ - description: 'A razão social serve para identificar o fornecedor, caso seja pessoa juridica', - example: 'Industria mecanica modelo Ltda.', - }) - razaoSocial?: string; - - @ApiProperty({ - description: 'O CNPJ serve para identificar o fornecedor, caso seja pessoa juridica', - example: '31895255000193', - }) - cnpj?: string; } diff --git a/src/modules/fornecedores/dto/update-fornecedor.dto.ts b/src/modules/fornecedores/dto/update-fornecedor.dto.ts index 971fd93..ccc19d9 100644 --- a/src/modules/fornecedores/dto/update-fornecedor.dto.ts +++ b/src/modules/fornecedores/dto/update-fornecedor.dto.ts @@ -2,108 +2,146 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateFornecedorDto } from './create-fornecedor.dto'; import { contaTipo } from '@prisma/client'; import { ApiProperty } from '@nestjs/swagger'; +import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches } from 'class-validator'; export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { @ApiProperty({ - description: 'O email serve pare descrever o email do fornecedor', + description: 'O email serve para descrever o email do fornecedor', example: 'email@gmail.com', }) + @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) + @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email?: string; - + @ApiProperty({ - description: 'O telefone serve para descrever o numero de telefone do fornecedor', + description: + 'O telefone serve para descrever o numero de telefone do fornecedor', example: '1734112736', }) + @IsNotEmpty({ message: 'O telefone não pode estar vazio' }) + @IsNumberString({}, { message: 'O telefone inserido não é válido' }) telefone?: string; - + @ApiProperty({ description: 'O tipo serve para diferenciar entre pessoa fisica e juridica', example: 'Fisica', }) + @IsNotEmpty({ message: 'O tipo da conta não pode estar vazio' }) + @IsEnum(contaTipo, { + message: 'O tipo da conta não condiz com as opções disponíveis', + }) contaTipo?: contaTipo; - + + @ApiProperty({ + description: + 'O nome serve para identificar o fornecedor, caso seja pessoa fisica', + example: 'João Pedro', + }) + @IsString({ message: 'O nome inserido não é válido' }) + @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) + nome?: string; + @ApiProperty({ - description: 'O pais serve para identificar a região onde o fornecedor se encontra', + description: + 'O CPF serve para identificar o fornecedor, caso seja pessoa fisica', + example: '02370334029', + }) + @IsNumberString({}, { message: 'O CPF inserido não é válido' }) + cpf?: string; + + @ApiProperty({ + description: + 'O RG serve para identificar o fornecedor, caso seja pessoa fisica', + example: '114421225', + }) + @IsNumberString({}, { message: 'O RG inserido não é válido' }) + rg?: string; + + @ApiProperty({ + description: + 'O nome fantasia serve para identificar o fornecedor, caso seja pessoa juridica', + example: 'ZawnTech', + }) + @IsString({ message: 'O nome fantasia inserido não é válido' }) + nomeFantasia?: string; + + @ApiProperty({ + description: + 'A razão social serve para identificar o fornecedor, caso seja pessoa juridica', + example: 'Industria mecanica modelo Ltda.', + }) + @IsString({ message: 'A razão social inserida não é válida' }) + razaoSocial?: string; + + @ApiProperty({ + description: + 'O CNPJ serve para identificar o fornecedor, caso seja pessoa juridica', + example: '31895255000193', + }) + @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) + cnpj?: string; + + @ApiProperty({ + description: + 'O pais serve para identificar a região onde o fornecedor se encontra', example: 'Brasil', }) + @IsString({ message: 'O país inserido não é válido' }) pais?: string; - + @ApiProperty({ - description: 'O CEP serve para identificar a região onde o fornecedor se encontra', + description: + 'O CEP serve para identificar a região onde o fornecedor se encontra', example: '69918170', }) + @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; - + @ApiProperty({ - description: 'O estado serve para identificar a região onde o fornecedor se encontra', + description: + 'O estado serve para identificar a região onde o fornecedor se encontra', example: 'SP', }) + @IsString({ message: 'O estado inserido não é válido' }) estado?: string; - + @ApiProperty({ - description: 'A cidade serve para identificar a região onde o fornecedor se encontra', + description: + 'A cidade serve para identificar a região onde o fornecedor se encontra', example: 'Sorocaba', }) + @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; - + @ApiProperty({ - description: 'O bairro serve para identificar o local onde o fornecedor se encontra', + description: + 'O bairro serve para identificar o local onde o fornecedor se encontra', example: 'Vila Barão', }) + @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; - + @ApiProperty({ - description: 'A rua serve para identificar o local onde o fornecedor se encontra', + description: + 'A rua serve para identificar o local onde o fornecedor se encontra', example: 'Rua Manuel Lourenço Rodrigues', }) + @IsString({ message: 'A rua inserida não é válida' }) rua?: string; - + @ApiProperty({ - description: 'O numero serve para identificar o local onde o fornecedor se encontra', + description: + 'O numero serve para identificar o local onde o fornecedor se encontra', example: '44', }) + @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; - + @ApiProperty({ - description: 'O complemento serve para dar informações adicionais para identificar o local onde o fornecedor se encontra', + description: + 'O complemento serve para dar informações adicionais para identificar o local onde o fornecedor se encontra', example: 'apt. 42', }) + @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; - - @ApiProperty({ - description: 'O nome serve para identificar o fornecedor, caso seja pessoa fisica', - example: 'João Pedro', - }) - nome?: string; - - @ApiProperty({ - description: 'O CPF serve para identificar o fornecedor, caso seja pessoa fisica', - example: '02370334029', - }) - cpf?: string; - - @ApiProperty({ - description: 'O RG serve para identificar o fornecedor, caso seja pessoa fisica', - example: '114421225', - }) - rg?: string; - - @ApiProperty({ - description: 'O nome fantasia serve para identificar o fornecedor, caso seja pessoa juridica', - example: 'ZawnTech', - }) - nomeFantasia?: string; - - @ApiProperty({ - description: 'A razão social serve para identificar o fornecedor, caso seja pessoa juridica', - example: 'Industria mecanica modelo Ltda.', - }) - razaoSocial?: string; - - @ApiProperty({ - description: 'O CNPJ serve para identificar o fornecedor, caso seja pessoa juridica', - example: '31895255000193', - }) - cnpj?: string; - } diff --git a/src/modules/fornecedores/entities/fornecedor.entity.ts b/src/modules/fornecedores/entities/fornecedor.entity.ts index 8db2b93..16a2f75 100644 --- a/src/modules/fornecedores/entities/fornecedor.entity.ts +++ b/src/modules/fornecedores/entities/fornecedor.entity.ts @@ -1,24 +1,48 @@ import { contaTipo } from '@prisma/client'; +import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches } from 'class-validator'; export class Fornecedor { id: number; + @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) + @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email: string; + @IsNotEmpty({ message: 'O telefone não pode estar vazio' }) + @IsNumberString({}, { message: 'O telefone inserido não é válido' }) telefone: string; + @IsNotEmpty({ message: 'O tipo da conta não pode estar vazio' }) + @IsEnum(contaTipo, { + message: 'O tipo da conta não condiz com as opções disponíveis', + }) contaTipo: contaTipo; + @IsString({ message: 'O nome inserido não é válido' }) + @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) + nome?: string; + @IsNumberString({}, { message: 'O CPF inserido não é válido' }) + cpf?: string; + @IsNumberString({}, { message: 'O RG inserido não é válido' }) + rg?: string; + @IsString({ message: 'O nome fantasia inserido não é válido' }) + nomeFantasia?: string; + @IsString({ message: 'A razão social inserida não é válida' }) + razaoSocial?: string; + @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) + cnpj?: string; + @IsString({ message: 'O país inserido não é válido' }) pais?: string; + @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; + @IsString({ message: 'O estado inserido não é válido' }) estado?: string; + @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; + @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; + @IsString({ message: 'A rua inserida não é válida' }) rua?: string; + @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; + @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; - nome?: string; - cpf?: string; - rg?: string; - nomeFantasia?: string; - razaoSocial?: string; - cnpj?: string; createdAt: Date; updatedAt: Date; } diff --git a/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts b/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts index d6a9b3a..9505ff7 100644 --- a/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts +++ b/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts @@ -1,4 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsNumber } from 'class-validator'; export class CreateInsumosProdutosBaseDto { @ApiProperty({ @@ -6,6 +7,8 @@ export class CreateInsumosProdutosBaseDto { 'A quantidade serve para descrever quantas unidades deste insumo serão necessárias para produzir o produto', example: '5', }) + @IsNotEmpty({message: 'A quantidade não pode estar vazia'}) + @IsNumber({},{message: 'A quantidade inserida não é válida'}) quantidade: number; @ApiProperty({ @@ -13,6 +16,8 @@ export class CreateInsumosProdutosBaseDto { 'O id do produto base serve para descrever a qual produto base que um determinado insumo pertence', example: '1', }) + @IsNotEmpty({message: 'O produto base não pode estar vazio'}) + @IsNumber({},{message: 'O produto base inserido não é válido'}) idProdutoBase: number; @ApiProperty({ @@ -20,5 +25,7 @@ export class CreateInsumosProdutosBaseDto { 'O id do insumo serve para descrever para qual insumo este insumo produto base aponta', example: '1', }) + @IsNotEmpty({message: 'O insumo não pode estar vazio'}) + @IsNumber({},{message: 'O insumo inserido não é válido'}) idInsumo: number; } diff --git a/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts b/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts index aa0ce13..4eeee70 100644 --- a/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts +++ b/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts @@ -1,6 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateInsumosProdutosBaseDto } from './create-insumo-produtos-base.dto'; import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsNumber } from 'class-validator'; export class UpdateInsumosProdutosBaseDto extends PartialType( CreateInsumosProdutosBaseDto, @@ -10,6 +11,8 @@ export class UpdateInsumosProdutosBaseDto extends PartialType( 'A quantidade serve para descrever quantas unidades deste insumo serão necessárias para produzir o produto', example: '5', }) + @IsNotEmpty({message: 'A quantidade não pode estar vazia'}) + @IsNumber({},{message: 'A quantidade inserida não é válida'}) quantidade?: number; @ApiProperty({ @@ -17,6 +20,8 @@ export class UpdateInsumosProdutosBaseDto extends PartialType( 'O id do produto base serve para descrever a qual produto base que um determinado insumo pertence', example: '1', }) + @IsNotEmpty({message: 'O produto base não pode estar vazio'}) + @IsNumber({},{message: 'O produto base inserido não é válido'}) idProdutoBase?: number; @ApiProperty({ @@ -24,5 +29,7 @@ export class UpdateInsumosProdutosBaseDto extends PartialType( 'O id do insumo serve para descrever para qual insumo este insumo produto base aponta', example: '1', }) + @IsNotEmpty({message: 'O insumo não pode estar vazio'}) + @IsNumber({},{message: 'O insumo inserido não é válido'}) idInsumo?: number; } diff --git a/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts b/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts index aa49ef4..e0bdbdc 100644 --- a/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts +++ b/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts @@ -1,12 +1,18 @@ import { ProdutoBase } from '@prisma/client'; +import { IsNotEmpty, IsNumber, IsString } from 'class-validator'; import { Insumo } from 'src/modules/insumos/entities/insumo.entity'; export class InsumoProdutosBase { id: number; - quantidade?: number; + @IsNotEmpty({message: 'A quantidade não pode estar vazia'}) + @IsNumber({},{message: 'A quantidade inserida não é válida'}) + quantidade: number; + @IsNotEmpty({message: 'O produto base não pode estar vazio'}) + @IsNumber({},{message: 'O produto base inserido não é válido'}) idProdutoBase: number; + @IsNotEmpty({message: 'O insumo não pode estar vazio'}) + @IsNumber({},{message: 'O insumo inserido não é válido'}) idInsumo: number; - unidade: string; produtoBase: ProdutoBase; insumo: Insumo; createdAt: Date; diff --git a/src/modules/insumos/dto/create-insumo.dto.ts b/src/modules/insumos/dto/create-insumo.dto.ts index a3b1a65..c122e67 100644 --- a/src/modules/insumos/dto/create-insumo.dto.ts +++ b/src/modules/insumos/dto/create-insumo.dto.ts @@ -1,31 +1,35 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, Matches } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsString, Matches } from 'class-validator'; export class CreateInsumoDto { @ApiProperty({ description: 'O titulo serve para pesquisar insumos', example: 'Tubo de metalon', }) - @IsNotEmpty({ message: 'O insumo deve ter um titulo' }) - @Matches(/^[a-zA-Z -]*$/, { message: 'O nome do insumo só pode ter letras' }) + @IsNotEmpty({ message: 'O titulo não pode estar vazio' }) + @IsString({ message: 'O titulo inserido não é válido' }) titulo: string; @ApiProperty({ description: 'A descrição serve para detalhar o insumo', example: '20 x 30 x 6.000 mm', }) + @IsString({ message: 'A descrição inserida não é válida' }) descricao?: string; @ApiProperty({ - description: 'A unidade de medida serve para destacar a forma que o insumo é medido', + description: + 'A unidade de medida serve para destacar a forma que o insumo é medido', example: 'mm', }) + @IsString({ message: 'A unidade de medida inserida não é válida' }) unidadeMedida?: string; @ApiProperty({ - description: 'O Id da categoria serve para conectar o insumo a uma categoria', + description: + 'O Id da categoria serve para conectar o insumo a uma categoria', example: '1', }) + @IsNumber({}, { message: 'A categoria inserida não é válida' }) idCategoria?: number; - } diff --git a/src/modules/insumos/dto/update-insumo.dto.ts b/src/modules/insumos/dto/update-insumo.dto.ts index 2d8cff5..d0b67ac 100644 --- a/src/modules/insumos/dto/update-insumo.dto.ts +++ b/src/modules/insumos/dto/update-insumo.dto.ts @@ -1,29 +1,37 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateInsumoDto } from './create-insumo.dto'; import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsNumber, IsString } from 'class-validator'; export class UpdateInsumoDto extends PartialType(CreateInsumoDto) { @ApiProperty({ description: 'O titulo serve para pesquisar insumos', example: 'Tubo de metalon', }) + @IsNotEmpty({ message: 'O titulo não pode estar vazio' }) + @IsString({ message: 'O titulo inserido não é válido' }) titulo?: string; - + @ApiProperty({ description: 'A descrição serve para detalhar o insumo', example: '20 x 30 x 6.000 mm', }) + @IsString({ message: 'A descrição inserida não é válida' }) descricao?: string; - + @ApiProperty({ - description: 'A unidade de medida serve para destacar a forma que o insumo é medido', + description: + 'A unidade de medida serve para destacar a forma que o insumo é medido', example: 'mm', }) + @IsString({ message: 'A unidade de medida inserida não é válida' }) unidadeMedida?: string; - + @ApiProperty({ - description: 'O Id da categoria serve para conectar o insumo a uma categoria', + description: + 'O Id da categoria serve para conectar o insumo a uma categoria', example: '1', }) + @IsNumber({}, { message: 'A categoria inserida não é válida' }) idCategoria?: number; } diff --git a/src/modules/insumos/entities/insumo.entity.ts b/src/modules/insumos/entities/insumo.entity.ts index 3f40fc2..6e570d1 100644 --- a/src/modules/insumos/entities/insumo.entity.ts +++ b/src/modules/insumos/entities/insumo.entity.ts @@ -1,10 +1,16 @@ +import { IsNotEmpty, IsNumber, IsString } from 'class-validator'; import { Categoria } from '../../categorias/entities/categoria.entity'; export class Insumo { id: number; + @IsNotEmpty({message: 'O titulo não pode estar vazio'}) + @IsString({message: 'O titulo inserido não é válido'}) titulo: string; + @IsString({message: 'A descrição inserida não é válida'}) descricao?: string; + @IsString({message: 'A unidade de medida inserida não é válida'}) unidadeMedida?: string; + @IsNumber({},{message: 'A categoria inserida não é válida'}) idCategoria?: number; categoria?: Categoria; createdAt: Date; diff --git a/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts b/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts index 9b1fcad..ac54687 100644 --- a/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts +++ b/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty } from 'class-validator'; +import { IsNotEmpty, IsNumber } from 'class-validator'; export class CreateListaInsumoDto { @ApiProperty({ @@ -7,7 +7,8 @@ export class CreateListaInsumoDto { 'A quantidade serve para descrever quantas unidades deste insumo serão necessárias para produzir o produto', example: '5', }) - @IsNotEmpty({ message: 'O insumo da lista deve ter uma quantidade' }) + @IsNotEmpty({ message: 'A quantidade não pode estar vazia' }) + @IsNumber({}, { message: 'A quantidade inserida não é válida' }) quantidade: number; @ApiProperty({ @@ -15,6 +16,8 @@ export class CreateListaInsumoDto { 'O id do produto serve para descrever a qual produto que um determinado insumo pertence', example: '1', }) + @IsNotEmpty({ message: 'O produto não pode estar vazio' }) + @IsNumber({}, { message: 'O produto inserido não é válido' }) idProduto: number; @ApiProperty({ @@ -22,6 +25,8 @@ export class CreateListaInsumoDto { 'O id do insumo serve para descrever para qual insumo este lista insumo aponta', example: '1', }) + @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) + @IsNumber({}, { message: 'O insumo inserido não é válido' }) idInsumo: number; @ApiProperty({ @@ -29,5 +34,6 @@ export class CreateListaInsumoDto { 'O id da cotação serve para descrever qual a cotação que determinará o custo do insumo', example: '5', }) + @IsNumber({}, { message: 'A cotação inserida não é válida' }) idCotacao?: number; } diff --git a/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts b/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts index b593f30..d9ee346 100644 --- a/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts +++ b/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts @@ -1,7 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateListaInsumoDto } from './create-lista-insumo.dto'; import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty } from 'class-validator'; +import { IsNotEmpty, IsNumber } from 'class-validator'; export class UpdateListaInsumoDto extends PartialType(CreateListaInsumoDto) { @ApiProperty({ @@ -9,27 +9,33 @@ export class UpdateListaInsumoDto extends PartialType(CreateListaInsumoDto) { 'A quantidade serve para descrever quantas unidades deste insumo serão necessárias para produzir o produto', example: '5', }) - quantidade?: number; + @IsNotEmpty({ message: 'A quantidade não pode estar vazia' }) + @IsNumber({}, { message: 'A quantidade inserida não é válida' }) + quantidade: number; @ApiProperty({ description: 'O id do produto serve para descrever a qual produto que um determinado insumo pertence', example: '1', }) - idProduto?: number; + @IsNotEmpty({ message: 'O produto não pode estar vazio' }) + @IsNumber({}, { message: 'O produto inserido não é válido' }) + idProduto: number; @ApiProperty({ description: 'O id do insumo serve para descrever para qual insumo este lista insumo aponta', example: '1', }) - idInsumo?: number; + @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) + @IsNumber({}, { message: 'O insumo inserido não é válido' }) + idInsumo: number; @ApiProperty({ description: 'O id da cotação serve para descrever qual a cotação que determinará o custo do insumo', example: '5', }) + @IsNumber({}, { message: 'A cotação inserida não é válida' }) idCotacao?: number; - } diff --git a/src/modules/lista-insumos/entities/lista-insumo.entity.ts b/src/modules/lista-insumos/entities/lista-insumo.entity.ts index a26768d..fba76c3 100644 --- a/src/modules/lista-insumos/entities/lista-insumo.entity.ts +++ b/src/modules/lista-insumos/entities/lista-insumo.entity.ts @@ -1,14 +1,21 @@ +import { IsNotEmpty, IsNumber } from 'class-validator'; import { Cotacao } from 'src/modules/cotacoes/entities/cotacao.entity'; import { Insumo } from 'src/modules/insumos/entities/insumo.entity'; import { Produto } from 'src/modules/produtos/entities/produto.entity'; export class ListaInsumo { id: number; + @IsNotEmpty({ message: 'A quantidade não pode estar vazia' }) + @IsNumber({}, { message: 'A quantidade inserida não é válida' }) quantidade: number; + @IsNotEmpty({ message: 'O produto não pode estar vazio' }) + @IsNumber({}, { message: 'O produto inserido não é válido' }) idProduto: number; + @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) + @IsNumber({}, { message: 'O insumo inserido não é válido' }) idInsumo: number; + @IsNumber({}, { message: 'A cotação inserida não é válida' }) idCotacao?: number; - unidade?: string; produto: Produto; insumo: Insumo; cotacao?: Cotacao; diff --git a/src/modules/orcamentos/dto/create-orcamento.dto.ts b/src/modules/orcamentos/dto/create-orcamento.dto.ts index 4a3055d..6851e26 100644 --- a/src/modules/orcamentos/dto/create-orcamento.dto.ts +++ b/src/modules/orcamentos/dto/create-orcamento.dto.ts @@ -1,6 +1,12 @@ import { ApiProperty } from '@nestjs/swagger'; import { status as Status } from '@prisma/client'; -import { IsDate, IsNotEmpty, IsNumber, IsString } from 'class-validator'; +import { + IsDate, + IsEnum, + IsNotEmpty, + IsNumber, + IsString, +} from 'class-validator'; export class CreateOrcamentoDto { @ApiProperty({ @@ -8,7 +14,7 @@ export class CreateOrcamentoDto { 'A validade serve para descrever até qual data o orçamento será valido', example: '2023-10-23T17:30:44.382Z', }) - @IsDate({message: 'Validade inserida não é uma data'}) + @IsDate({ message: 'A validade inserida não é válida' }) validade?: Date; @ApiProperty({ @@ -16,7 +22,7 @@ export class CreateOrcamentoDto { 'O total mão de obra serve para descrever o custo total de mão de obra para produzir os itens do orçamento', example: '750', }) - @IsNumber({},{ message: 'Valor total de mão de obra deve ser um numero'}) + @IsNumber({}, { message: 'O valor de mão de obra inserido não é válido' }) totalMaoObra?: number; @ApiProperty({ @@ -24,15 +30,15 @@ export class CreateOrcamentoDto { 'O total materiais serve para descrever o custo total das compras do materiais para produzir os itens do orçamento', example: '700', }) - @IsNumber({},{ message: 'Valor total de materiais deve ser um numero'}) + @IsNumber({}, { message: 'O valor total de materiais inserido não é válido' }) totalMateriais?: number; @ApiProperty({ - description: - 'O status serve para descrever a atual situação do orçamento', + description: 'O status serve para descrever a atual situação do orçamento', example: 'Pendente', }) - @IsNotEmpty({ message: 'Status não pode ser vazio'}) + @IsNotEmpty({ message: 'O status não pode estar vazio' }) + @IsEnum(Status, { message: 'O status inserido não é válido' }) status: Status; @ApiProperty({ @@ -40,7 +46,7 @@ export class CreateOrcamentoDto { 'O prazo estimado de produção serve para descrever uma estimativa de quanto tempo será necessário para concluir o orçamento, descrito em dias', example: '90', }) - @IsNumber({},{ message: 'Prazo estimado deve ser um numero'}) + @IsNumber({}, { message: 'O prazo estimado inserido não é válido' }) prazoEstimadoProducao: number; @ApiProperty({ @@ -48,7 +54,7 @@ export class CreateOrcamentoDto { 'As observações servem para descrever caracteristicas relevantes obre o orçamento', example: '2 portões e 1 grade para janela', }) - @IsString({ message: 'Observação não é de um tipo valido'}) + @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; @ApiProperty({ @@ -56,7 +62,7 @@ export class CreateOrcamentoDto { 'O id do cliente serve para indentificar qual o cliente a quem este orçamento pertence', example: '1', }) - @IsNotEmpty({ message: 'Cliente não pode ser vazio'}) - @IsNumber({},{ message: 'Id do cliente deve ser um numero'}) + @IsNotEmpty({ message: 'O cliente não pode estar vazio' }) + @IsNumber({}, { message: 'O cliente inserido não é válido' }) idCliente: number; } diff --git a/src/modules/orcamentos/dto/update-orcamento.dto.ts b/src/modules/orcamentos/dto/update-orcamento.dto.ts index 8e1a004..cd1b093 100644 --- a/src/modules/orcamentos/dto/update-orcamento.dto.ts +++ b/src/modules/orcamentos/dto/update-orcamento.dto.ts @@ -2,7 +2,13 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateOrcamentoDto } from './create-orcamento.dto'; import { status as Status } from '@prisma/client'; import { ApiProperty } from '@nestjs/swagger'; -import { IsDate, IsNotEmpty, IsNumber, IsString } from 'class-validator'; +import { + IsDate, + IsEnum, + IsNotEmpty, + IsNumber, + IsString, +} from 'class-validator'; export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { @ApiProperty({ @@ -10,7 +16,7 @@ export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { 'A validade serve para descrever até qual data o orçamento será valido', example: '2023-10-23T17:30:44.382Z', }) - @IsDate({message: 'Validade inserida não é uma data'}) + @IsDate({ message: 'A validade inserida não é válida' }) validade?: Date; @ApiProperty({ @@ -18,7 +24,7 @@ export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { 'O total mão de obra serve para descrever o custo total de mão de obra para produzir os itens do orçamento', example: '750', }) - @IsNumber({},{ message: 'Valor total de mao de obra deve ser um numero'}) + @IsNumber({}, { message: 'O valor de mão de obra inserido não é válido' }) totalMaoObra?: number; @ApiProperty({ @@ -26,15 +32,15 @@ export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { 'O total materiais serve para descrever o custo total das compras do materiais para produzir os itens do orçamento', example: '700', }) - @IsNumber({},{ message: 'Valor total de materiais deve ser um numero'}) + @IsNumber({}, { message: 'O valor total de materiais inserido não é válido' }) totalMateriais?: number; @ApiProperty({ - description: - 'O status serve para descrever a atual situação do orçamento', + description: 'O status serve para descrever a atual situação do orçamento', example: 'Pendente', }) - @IsNotEmpty({ message: 'Status não pode ser vazio'}) + @IsNotEmpty({ message: 'O status não pode estar vazio' }) + @IsEnum(Status, { message: 'O status inserido não é válido' }) status?: Status; @ApiProperty({ @@ -42,7 +48,7 @@ export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { 'O prazo estimado de produção serve para descrever uma estimativa de quanto tempo será necessário para concluir o orçamento, descrito em dias', example: '90', }) - @IsNumber({},{ message: 'Prazo estimado deve ser um numero'}) + @IsNumber({}, { message: 'O prazo estimado inserido não é válido' }) prazoEstimadoProducao?: number; @ApiProperty({ @@ -50,7 +56,7 @@ export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { 'As observações servem para descrever caracteristicas relevantes obre o orçamento', example: '2 portões e 1 grade para janela', }) - @IsString({ message: 'Observação não é de um tipo valido'}) + @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; @ApiProperty({ @@ -58,7 +64,7 @@ export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { 'O id do cliente serve para indentificar qual o cliente a quem este orçamento pertence', example: '1', }) - @IsNotEmpty({ message: 'Cliente não pode ser vazio'}) - @IsNumber({},{ message: 'Id do cliente deve ser um numero'}) + @IsNotEmpty({ message: 'O cliente não pode estar vazio' }) + @IsNumber({}, { message: 'O cliente inserido não é válido' }) idCliente?: number; } diff --git a/src/modules/orcamentos/entities/orcamento.entity.ts b/src/modules/orcamentos/entities/orcamento.entity.ts index d86868a..c54a079 100644 --- a/src/modules/orcamentos/entities/orcamento.entity.ts +++ b/src/modules/orcamentos/entities/orcamento.entity.ts @@ -1,18 +1,33 @@ import { Cliente } from 'src/modules/clientes/entities/cliente.entity'; import { Produto } from 'src/modules/produtos/entities/produto.entity'; import { status } from '@prisma/client'; +import { + IsDate, + IsEnum, + IsNotEmpty, + IsNumber, + IsString, +} from 'class-validator'; export class Orcamento { id: Number; + @IsDate({ message: 'A validade inserida não é válida' }) validade?: Date; dataOrcamento: Date; + @IsNumber({}, { message: 'O valor de mão de obra inserido não é válido' }) totalMaoObra?: number; + @IsNumber({}, { message: 'O valor total de materiais inserido não é válido' }) totalMateriais?: number; + @IsNotEmpty({ message: 'O status não pode estar vazio' }) + @IsEnum(status, { message: 'O status inserido não é válido' }) status: status; - prazoEstimadoProducao: number; + @IsNumber({}, { message: 'O prazo estimado inserido não é válido' }) + prazoEstimadoProducao?: number; + @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; + @IsNotEmpty({ message: 'O cliente não pode estar vazio' }) + @IsNumber({}, { message: 'O cliente inserido não é válido' }) idCliente: number; - idPedido?: number; cliente: Cliente; createdAt: Date; updatedAt: Date; diff --git a/src/modules/pedidos/dto/create-pedido.dto.ts b/src/modules/pedidos/dto/create-pedido.dto.ts index 4a3512b..94db963 100644 --- a/src/modules/pedidos/dto/create-pedido.dto.ts +++ b/src/modules/pedidos/dto/create-pedido.dto.ts @@ -1,24 +1,30 @@ import { ApiProperty } from '@nestjs/swagger'; import { status } from '@prisma/client'; +import { IsEnum, IsNotEmpty, IsNumber } from 'class-validator'; export class CreatePedidoDto { @ApiProperty({ description: 'O pagamento serve para descrever o quanto o cliente pagará no total para o orçamento', example: '2400', }) + @IsNotEmpty({ message: 'O pagamento não pode estar vazio' }) + @IsNumber({}, { message: 'O pagamento inserido não é válido' }) pagamento: number; - + @ApiProperty({ - description: - 'O status serve para descrever a atual situação do orçamento', + description: 'O status serve para descrever a atual situação do orçamento', example: 'Concluido', }) + @IsNotEmpty({ message: 'O status não pode estar vazio' }) + @IsEnum(status, { message: 'O status inserido não é válido' }) status: status; - + @ApiProperty({ description: 'O id do orçamento serve para descrever a qual orçamento este pedido pertence', example: '1', }) + @IsNotEmpty({ message: 'O orçamento não pode estar vazio' }) + @IsNumber({}, { message: 'O orçamento inserido não é válido' }) idOrcamento: number; } diff --git a/src/modules/pedidos/dto/update-pedido.dto.ts b/src/modules/pedidos/dto/update-pedido.dto.ts index 996fd5e..6179b7b 100644 --- a/src/modules/pedidos/dto/update-pedido.dto.ts +++ b/src/modules/pedidos/dto/update-pedido.dto.ts @@ -1,26 +1,32 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreatePedidoDto } from './create-pedido.dto'; -import { status } from "@prisma/client"; +import { status } from '@prisma/client'; import { ApiProperty } from '@nestjs/swagger'; +import { IsEnum, IsNotEmpty, IsNumber } from 'class-validator'; export class UpdatePedidoDto extends PartialType(CreatePedidoDto) { - @ApiProperty({ - description: - 'O pagamento serve para descrever o quanto o cliente pagará no total para o orçamento', - example: '2400', - }) - pagamento?: number; - - @ApiProperty({ - description: - 'O status serve para descrever a atual situação do orçamento', - example: 'Concluido', - }) - status?: status; - - @ApiProperty({ - description: - 'O id do orçamento serve para descrever a qual orçamento este pedido pertence', - example: '1', - }) - idOrcamento?: number; + @ApiProperty({ + description: + 'O pagamento serve para descrever o quanto o cliente pagará no total para o orçamento', + example: '2400', + }) + @IsNotEmpty({ message: 'O pagamento não pode estar vazio' }) + @IsNumber({}, { message: 'O pagamento inserido não é válido' }) + pagamento: number; + + @ApiProperty({ + description: 'O status serve para descrever a atual situação do orçamento', + example: 'Concluido', + }) + @IsNotEmpty({ message: 'O status não pode estar vazio' }) + @IsEnum(status, { message: 'O status inserido não é válido' }) + status: status; + + @ApiProperty({ + description: + 'O id do orçamento serve para descrever a qual orçamento este pedido pertence', + example: '1', + }) + @IsNotEmpty({ message: 'O orçamento não pode estar vazio' }) + @IsNumber({}, { message: 'O orçamento inserido não é válido' }) + idOrcamento: number; } diff --git a/src/modules/pedidos/entities/pedido.entity.ts b/src/modules/pedidos/entities/pedido.entity.ts index 568bb5b..d2d6b6e 100644 --- a/src/modules/pedidos/entities/pedido.entity.ts +++ b/src/modules/pedidos/entities/pedido.entity.ts @@ -1,12 +1,19 @@ -import { status } from "@prisma/client"; -import { Orcamento } from "../../orcamentos/entities/orcamento.entity"; +import { status } from '@prisma/client'; +import { Orcamento } from '../../orcamentos/entities/orcamento.entity'; +import { IsEnum, IsNotEmpty, IsNumber } from 'class-validator'; export class Pedido { - id: number; - pagamento: number; - status: status; - idOrcamento: number; - orcamentos: Orcamento; - createdAt: Date; - updatedAt: Date; + id: number; + @IsNotEmpty({ message: 'O pagamento não pode estar vazio' }) + @IsNumber({}, { message: 'O pagamento inserido não é válido' }) + pagamento: number; + @IsNotEmpty({ message: 'O status não pode estar vazio' }) + @IsEnum(status, { message: 'O status inserido não é válido' }) + status: status; + @IsNotEmpty({ message: 'O orçamento não pode estar vazio' }) + @IsNumber({}, { message: 'O orçamento inserido não é válido' }) + idOrcamento: number; + orcamentos: Orcamento; + createdAt: Date; + updatedAt: Date; } diff --git a/src/modules/pedidos/pedidos.service.ts b/src/modules/pedidos/pedidos.service.ts index e4dfaf3..33dbdd7 100644 --- a/src/modules/pedidos/pedidos.service.ts +++ b/src/modules/pedidos/pedidos.service.ts @@ -13,17 +13,25 @@ export class PedidosService { async findAllWithPagination(page: number, perPage: number) { const skip = (page - 1) * perPage; const pedidos = await this.prismaService.pedido.findMany({ - skip, - take: perPage, - }); - return { pedidos }; + skip, + take: perPage, + }); + return { pedidos }; } async create(createPedidoDto: CreatePedidoDto) { - const pedido = await this.findOne(createPedidoDto.idOrcamento); - if (!pedido) { - return await this.prismaService.pedido.create({ - data: createPedidoDto, - }); + const orc = await this.prismaService.orcamento.findFirst({ + where: { + id: createPedidoDto.idOrcamento, + }, + }); + + if (orc.status === 'Concluido') { + const pedidoExists = await this.findOne(createPedidoDto.idOrcamento); + if (!pedidoExists) { + return await this.prismaService.pedido.create({ + data: createPedidoDto, + }); + } } } diff --git a/src/modules/produtos-base/dto/create-produtos-base.dto.ts b/src/modules/produtos-base/dto/create-produtos-base.dto.ts index c07bd4a..3ba1227 100644 --- a/src/modules/produtos-base/dto/create-produtos-base.dto.ts +++ b/src/modules/produtos-base/dto/create-produtos-base.dto.ts @@ -1,4 +1,5 @@ import { ApiProperty } from "@nestjs/swagger"; +import { IsNotEmpty, IsString } from "class-validator"; export class CreateProdutosBaseDto { @ApiProperty({ @@ -6,6 +7,8 @@ export class CreateProdutosBaseDto { 'O titulo serve para identificar e pesquisar o produto base', example: 'Portão', }) + @IsNotEmpty({ message: 'O titulo não pode estar vazio' }) + @IsString({ message: 'O titulo inserido não é válido' }) titulo: string; @ApiProperty({ @@ -13,5 +16,6 @@ export class CreateProdutosBaseDto { 'As observações servem para descrever caracteristicas relevantes sobre o produto base', example: '2" x 6 m', }) + @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; } diff --git a/src/modules/produtos-base/dto/update-produtos-base.dto.ts b/src/modules/produtos-base/dto/update-produtos-base.dto.ts index 5e4489f..047bfc2 100644 --- a/src/modules/produtos-base/dto/update-produtos-base.dto.ts +++ b/src/modules/produtos-base/dto/update-produtos-base.dto.ts @@ -1,6 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateProdutosBaseDto } from './create-produtos-base.dto'; import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsString } from 'class-validator'; export class UpdateProdutosBaseDto extends PartialType(CreateProdutosBaseDto) { @ApiProperty({ @@ -8,12 +9,15 @@ export class UpdateProdutosBaseDto extends PartialType(CreateProdutosBaseDto) { 'O titulo serve para identificar e pesquisar o produto base', example: 'Portão', }) - titulo?: string; + @IsNotEmpty({ message: 'O titulo não pode estar vazio' }) + @IsString({ message: 'O titulo inserido não é válido' }) + titulo: string; @ApiProperty({ description: 'As observações servem para descrever caracteristicas relevantes sobre o produto base', example: '2" x 6 m', }) + @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; } diff --git a/src/modules/produtos-base/entities/produtos-base.entity.ts b/src/modules/produtos-base/entities/produtos-base.entity.ts index 54252e8..6a3a2eb 100644 --- a/src/modules/produtos-base/entities/produtos-base.entity.ts +++ b/src/modules/produtos-base/entities/produtos-base.entity.ts @@ -1,8 +1,12 @@ import { InsumoProdutoBase } from '@prisma/client'; +import { IsNotEmpty, IsString } from 'class-validator'; export class ProdutosBase { id: number; + @IsNotEmpty({ message: 'O titulo não pode estar vazio' }) + @IsString({ message: 'O titulo inserido não é válido' }) titulo: string; + @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; insumosProdutosBase: InsumoProdutoBase[]; createdAt: Date; diff --git a/src/modules/produtos/dto/create-produto.dto.ts b/src/modules/produtos/dto/create-produto.dto.ts index ca3d17c..367c5e7 100644 --- a/src/modules/produtos/dto/create-produto.dto.ts +++ b/src/modules/produtos/dto/create-produto.dto.ts @@ -1,38 +1,45 @@ -import { ApiProperty } from "@nestjs/swagger"; +import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsNumber, IsString } from 'class-validator'; export class CreateProdutoDto { @ApiProperty({ - description: - 'O titulo serve para identificar o produto', + description: 'O titulo serve para identificar o produto', example: 'Portão', }) + @IsNotEmpty({ message: 'O titulo não pode estar vazio' }) + @IsString({ message: 'O titulo inserido não é válido' }) titulo: string; - + @ApiProperty({ description: 'A quantidade serve para descrever quantas unidades deste produto serão necessárias para o orçamento', example: '3', }) - quantidade: number; - + @IsNumber({}, { message: 'A quantidade inserida não é válida' }) + quantidade?: number; + @ApiProperty({ description: 'O valor unitario serve para descrever o valor do produto como uma unica unidade', example: '340', }) + @IsNumber({}, { message: 'O valor unitário inserido não é válido' }) valorUnitario?: number; - + @ApiProperty({ description: 'As observações servem para descrever caracteristicas relevantes sobre o produto', example: '2" x 6 m', }) + @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; - + @ApiProperty({ description: 'O id do orçamento serve para indentificar qual o orçamento a quem este produto pertence', example: '1', }) + @IsNotEmpty({ message: 'O orçamento não pode estar vazio' }) + @IsNumber({}, { message: 'O orçamento inserido não é válido' }) orcamentoId: number; } diff --git a/src/modules/produtos/dto/update-produto.dto.ts b/src/modules/produtos/dto/update-produto.dto.ts index cc1efa9..779753a 100644 --- a/src/modules/produtos/dto/update-produto.dto.ts +++ b/src/modules/produtos/dto/update-produto.dto.ts @@ -1,40 +1,47 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateProdutoDto } from './create-produto.dto'; import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsNumber, IsString } from 'class-validator'; export class UpdateProdutoDto extends PartialType(CreateProdutoDto) { @ApiProperty({ - description: - 'O titulo serve para identificar o produto', + description: 'O titulo serve para identificar o produto', example: 'Portão', }) + @IsNotEmpty({ message: 'O titulo não pode estar vazio' }) + @IsString({ message: 'O titulo inserido não é válido' }) titulo?: string; - + @ApiProperty({ description: 'A quantidade serve para descrever quantas unidades deste produto serão necessárias para o orçamento', example: '3', }) + @IsNumber({}, { message: 'A quantidade inserida não é válida' }) quantidade?: number; - + @ApiProperty({ description: 'O valor unitario serve para descrever o valor do produto como uma unica unidade', example: '340', }) + @IsNumber({}, { message: 'O valor unitário inserido não é válido' }) valorUnitario?: number; - + @ApiProperty({ description: 'As observações servem para descrever caracteristicas relevantes sobre o produto', example: '2" x 6 m', }) + @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; - + @ApiProperty({ description: 'O id do orçamento serve para indentificar qual o orçamento a quem este produto pertence', example: '1', }) + @IsNotEmpty({ message: 'O orçamento não pode estar vazio' }) + @IsNumber({}, { message: 'O orçamento inserido não é válido' }) orcamentoId?: number; } diff --git a/src/modules/produtos/entities/produto.entity.ts b/src/modules/produtos/entities/produto.entity.ts index 85f3b70..40c1981 100644 --- a/src/modules/produtos/entities/produto.entity.ts +++ b/src/modules/produtos/entities/produto.entity.ts @@ -1,15 +1,23 @@ +import { IsNotEmpty, IsNumber, IsString } from 'class-validator'; import { ListaInsumo } from 'src/modules/lista-insumos/entities/lista-insumo.entity'; import { Orcamento } from 'src/modules/orcamentos/entities/orcamento.entity'; export class Produto { id: number; + @IsNotEmpty({ message: 'O titulo não pode estar vazio' }) + @IsString({ message: 'O titulo inserido não é válido' }) titulo: string; + @IsNumber({}, { message: 'A quantidade inserida não é válida' }) quantidade?: number; + @IsNumber({}, { message: 'O valor unitário inserido não é válido' }) valorUnitario?: number; - observacoes: string; + @IsString({ message: 'A observação inserida não é válida' }) + observacoes?: string; listaInsumos: ListaInsumo[]; createdAt: Date; updatedAt: Date; Orcamento?: Orcamento; + @IsNotEmpty({ message: 'O orçamento não pode estar vazio' }) + @IsNumber({}, { message: 'O orçamento inserido não é válido' }) orcamentoId: number; } diff --git a/src/modules/usuarios/dto/create-usuario.dto.ts b/src/modules/usuarios/dto/create-usuario.dto.ts index 357f6c2..1a90035 100644 --- a/src/modules/usuarios/dto/create-usuario.dto.ts +++ b/src/modules/usuarios/dto/create-usuario.dto.ts @@ -1,5 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; import { tipoUsuario } from '@prisma/client'; +import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches } from 'class-validator'; export class CreateUsuarioDto { @ApiProperty({ @@ -7,6 +8,8 @@ export class CreateUsuarioDto { 'O tipo de usuario serve para descrever o nivel de acesso dele', example: 'Vendedor', }) + @IsNotEmpty({message: 'O tipo do usuário não poder estar vazio'}) + @IsEnum(tipoUsuario, {message: 'O tipo de usuário inserido não é válido'}) tipoUsuario: tipoUsuario; @ApiProperty({ @@ -14,18 +17,23 @@ export class CreateUsuarioDto { 'O nome do usuário serve para identificar e pesquisar o usuário', example: 'Sérgio Moraes', }) + @IsString({ message: 'O nome inserido não é válido' }) + @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome: string; @ApiProperty({ description: 'O CPF serve para identificar o usuario', example: '02370334029', }) + @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf: string; @ApiProperty({ description: 'O email serve para descrever o email do usuario', example: 'email@gmail.com', }) + @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) + @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email: string; @ApiProperty({ @@ -33,6 +41,8 @@ export class CreateUsuarioDto { 'O telefone serve para descrever o numero de telefone do usuario', example: '1734112736', }) + @IsNotEmpty({ message: 'O telefone não pode estar vazio' }) + @IsNumberString({}, { message: 'O telefone inserido não é válido' }) telefone: string; @ApiProperty({ @@ -40,7 +50,9 @@ export class CreateUsuarioDto { 'A senha serve para o usuário realizar o acesso dentro da aplicação', example: '1234', }) + @IsString({message: 'A senha inserida não é válida'}) senha: string; - + + @IsString({message: 'O token inserido não é válido'}) token: string; } diff --git a/src/modules/usuarios/dto/update-usuario.dto.ts b/src/modules/usuarios/dto/update-usuario.dto.ts index 052ee80..f4b5efd 100644 --- a/src/modules/usuarios/dto/update-usuario.dto.ts +++ b/src/modules/usuarios/dto/update-usuario.dto.ts @@ -2,6 +2,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateUsuarioDto } from './create-usuario.dto'; import { tipoUsuario } from '@prisma/client'; import { ApiProperty } from '@nestjs/swagger'; +import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches } from 'class-validator'; export class UpdateUsuarioDto extends PartialType(CreateUsuarioDto) { @ApiProperty({ @@ -9,6 +10,8 @@ export class UpdateUsuarioDto extends PartialType(CreateUsuarioDto) { 'O tipo de usuario serve para descrever o nivel de acesso dele', example: 'Vendedor', }) + @IsNotEmpty({message: 'O tipo do usuário não poder estar vazio'}) + @IsEnum(tipoUsuario, {message: 'O tipo de usuário inserido não é válido'}) tipoUsuario?: tipoUsuario; @ApiProperty({ @@ -16,18 +19,23 @@ export class UpdateUsuarioDto extends PartialType(CreateUsuarioDto) { 'O nome do usuário serve para identificar e pesquisar o usuário', example: 'Sérgio Moraes', }) + @IsString({ message: 'O nome inserido não é válido' }) + @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; @ApiProperty({ description: 'O CPF serve para identificar o usuario', example: '02370334029', }) + @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; @ApiProperty({ description: 'O email serve para descrever o email do usuario', example: 'email@gmail.com', }) + @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) + @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email?: string; @ApiProperty({ @@ -35,6 +43,8 @@ export class UpdateUsuarioDto extends PartialType(CreateUsuarioDto) { 'O telefone serve para descrever o numero de telefone do usuario', example: '1734112736', }) + @IsNotEmpty({ message: 'O telefone não pode estar vazio' }) + @IsNumberString({}, { message: 'O telefone inserido não é válido' }) telefone?: string; @ApiProperty({ @@ -42,7 +52,9 @@ export class UpdateUsuarioDto extends PartialType(CreateUsuarioDto) { 'A senha serve para o usuário realizar o acesso dentro da aplicação', example: '1234', }) + @IsString({message: 'A senha inserida não é válida'}) senha?: string; - - token: string; + + @IsString({message: 'O token inserido não é válido'}) + token?: string; } diff --git a/src/modules/usuarios/entities/usuario.entity.ts b/src/modules/usuarios/entities/usuario.entity.ts index acb0217..4c60d55 100644 --- a/src/modules/usuarios/entities/usuario.entity.ts +++ b/src/modules/usuarios/entities/usuario.entity.ts @@ -1,13 +1,25 @@ import { tipoUsuario } from '@prisma/client'; +import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches } from 'class-validator'; export class Usuario { id: number; + @IsNotEmpty({message: 'O tipo do usuário não poder estar vazio'}) + @IsEnum(tipoUsuario, {message: 'O tipo de usuário inserido não é válido'}) tipoUsuario: tipoUsuario; + @IsString({ message: 'O nome inserido não é válido' }) + @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome: string; + @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf: string; + @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) + @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email: string; + @IsNotEmpty({ message: 'O telefone não pode estar vazio' }) + @IsNumberString({}, { message: 'O telefone inserido não é válido' }) telefone: string; + @IsString({message: 'A senha inserida não é válida'}) senha: string; + @IsString({message: 'O token inserido não é válido'}) token: string; createdAt: Date; updatedAt: Date; From 7da9922aa10c9c018aa75dd052d293bb0ae0865a Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Sun, 29 Oct 2023 18:49:46 -0300 Subject: [PATCH 002/115] Corrigidos todos os usepipes --- .../categorias/dto/create-categoria.dto.ts | 3 +- .../categorias/dto/update-categoria.dto.ts | 3 +- .../categorias/entities/categoria.entity.ts | 3 +- src/modules/clientes/clientes.controller.ts | 4 ++- .../clientes/dto/create-cliente.dto.ts | 16 +++++++++- .../clientes/dto/update-cliente.dto.ts | 16 +++++++++- .../clientes/entities/cliente.entity.ts | 15 +++++++++ src/modules/cotacoes/cotacoes.controller.ts | 5 +++ .../cotacoes/entities/cotacao.entity.ts | 2 +- .../fornecedores/dto/create-fornecedor.dto.ts | 16 +++++++++- .../fornecedores/dto/update-fornecedor.dto.ts | 16 +++++++++- .../entities/fornecedor.entity.ts | 16 +++++++++- .../fornecedores/fornecedores.controller.ts | 6 +++- .../insumos-produtos-base.controller.ts | 4 ++- src/modules/insumos/dto/create-insumo.dto.ts | 5 ++- src/modules/insumos/dto/update-insumo.dto.ts | 5 ++- src/modules/insumos/entities/insumo.entity.ts | 7 +++-- src/modules/insumos/insumos.controller.ts | 1 + .../dto/create-lista-insumo.dto.ts | 3 +- .../dto/update-lista-insumo.dto.ts | 3 +- .../entities/lista-insumo.entity.ts | 3 +- .../lista-insumos/lista-insumos.controller.ts | 22 +++++++++++-- .../orcamentos/dto/create-orcamento.dto.ts | 6 ++++ .../orcamentos/dto/update-orcamento.dto.ts | 6 ++++ .../orcamentos/entities/orcamento.entity.ts | 6 ++++ src/modules/pedidos/pedidos.controller.ts | 23 +++++++++++--- .../dto/create-produtos-base.dto.ts | 3 +- .../dto/update-produtos-base.dto.ts | 3 +- .../entities/produtos-base.entity.ts | 3 +- .../produtos-base/produtos-base.controller.ts | 27 +++++++++++++--- .../produtos/dto/create-produto.dto.ts | 5 ++- .../produtos/dto/update-produto.dto.ts | 5 ++- .../produtos/entities/produto.entity.ts | 5 ++- src/modules/produtos/produtos.controller.ts | 31 ++++++++++++++----- .../usuarios/dto/create-usuario.dto.ts | 7 ++++- .../usuarios/dto/update-usuario.dto.ts | 7 ++++- .../usuarios/entities/usuario.entity.ts | 6 +++- src/modules/usuarios/usuarios.controller.ts | 22 +++++++++++-- 38 files changed, 289 insertions(+), 50 deletions(-) diff --git a/src/modules/categorias/dto/create-categoria.dto.ts b/src/modules/categorias/dto/create-categoria.dto.ts index 84aab2f..b2501c8 100644 --- a/src/modules/categorias/dto/create-categoria.dto.ts +++ b/src/modules/categorias/dto/create-categoria.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsString } from 'class-validator'; +import { IsNotEmpty, IsString, ValidateIf } from 'class-validator'; export class CreateCategoriaDto { @ApiProperty({ @@ -22,6 +22,7 @@ export class CreateCategoriaDto { description: 'A descrição serve para detalhar a categoria', example: 'Grupo de materiais de aço, ferro e aluminio', }) + @ValidateIf((object, value) => value !== undefined) @IsString({message: 'A descrição deve ser uma string'}) descricao?: string; } diff --git a/src/modules/categorias/dto/update-categoria.dto.ts b/src/modules/categorias/dto/update-categoria.dto.ts index e7f0893..7df3e81 100644 --- a/src/modules/categorias/dto/update-categoria.dto.ts +++ b/src/modules/categorias/dto/update-categoria.dto.ts @@ -1,7 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateCategoriaDto } from './create-categoria.dto'; import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsString } from 'class-validator'; +import { IsNotEmpty, IsString, ValidateIf } from 'class-validator'; export class UpdateCategoriaDto extends PartialType(CreateCategoriaDto) { @ApiProperty({ @@ -24,6 +24,7 @@ export class UpdateCategoriaDto extends PartialType(CreateCategoriaDto) { description: 'A descrição serve para detalhar a categoria', example: 'Grupo de materiais de aço, ferro e aluminio', }) + @ValidateIf((object, value) => value !== undefined) @IsString({message: 'A descrição deve ser uma string'}) descricao?: string; } diff --git a/src/modules/categorias/entities/categoria.entity.ts b/src/modules/categorias/entities/categoria.entity.ts index d9a4227..7e14eba 100644 --- a/src/modules/categorias/entities/categoria.entity.ts +++ b/src/modules/categorias/entities/categoria.entity.ts @@ -1,4 +1,4 @@ -import { IsInt, IsNotEmpty, IsString } from 'class-validator'; +import { IsInt, IsNotEmpty, IsString, ValidateIf } from 'class-validator'; export class Categoria { id: number; @@ -8,6 +8,7 @@ export class Categoria { @IsNotEmpty({message: 'O titulo não pode estar vázio'}) @IsString({message: 'O titulo deve ser uma string'}) titulo: string; + @ValidateIf((object, value) => value !== undefined) @IsString({message: 'A descrição deve ser uma string'}) descricao?: string; createdAt: Date; diff --git a/src/modules/clientes/clientes.controller.ts b/src/modules/clientes/clientes.controller.ts index 1f7fc20..9206d8a 100644 --- a/src/modules/clientes/clientes.controller.ts +++ b/src/modules/clientes/clientes.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, Query } from '@nestjs/common'; +import { Controller, Get, Post, Body, Patch, Param, Delete, Query, UsePipes, ValidationPipe } from '@nestjs/common'; import { ClientesService } from './clientes.service'; import { CreateClienteDto } from './dto/create-cliente.dto'; import { UpdateClienteDto } from './dto/update-cliente.dto'; @@ -24,6 +24,7 @@ async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPa return this.clientesService.countAllCliente(); } + @UsePipes(ValidationPipe) @Post() create(@Body() createClienteDto: CreateClienteDto) { return this.clientesService.create(createClienteDto); @@ -46,6 +47,7 @@ async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPa return this.clientesService.findOne(+id); } + @UsePipes(ValidationPipe) @Patch(':id') update(@Param('id') id: string, @Body() updateClienteDto: UpdateClienteDto) { return this.clientesService.update(+id, updateClienteDto); diff --git a/src/modules/clientes/dto/create-cliente.dto.ts b/src/modules/clientes/dto/create-cliente.dto.ts index c18ad50..2977adf 100644 --- a/src/modules/clientes/dto/create-cliente.dto.ts +++ b/src/modules/clientes/dto/create-cliente.dto.ts @@ -7,6 +7,7 @@ import { IsNumberString, IsString, Matches, + ValidateIf, } from 'class-validator'; export class CreateClienteDto { @@ -42,8 +43,8 @@ export class CreateClienteDto { 'O nome serve para identificar o cliente, caso seja pessoa fisica', example: 'João Pedro', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome inserido não é válido' }) - @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; @ApiProperty({ @@ -51,6 +52,7 @@ export class CreateClienteDto { 'O CPF serve para identificar o cliente, caso seja pessoa fisica', example: '02370334029', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; @@ -59,6 +61,7 @@ export class CreateClienteDto { 'O RG serve para identificar o cliente, caso seja pessoa fisica', example: '114421225', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O RG inserido não é válido' }) rg?: string; @@ -67,6 +70,7 @@ export class CreateClienteDto { 'O nome fantasia serve para identificar o cliente, caso seja pessoa juridica', example: 'ZawnTech', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome fantasia inserido não é válido' }) nomeFantasia?: string; @@ -75,6 +79,7 @@ export class CreateClienteDto { 'A razão social serve para identificar o cliente, caso seja pessoa juridica', example: 'Industria mecanica modelo Ltda.', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A razão social inserida não é válida' }) razaoSocial?: string; @@ -83,6 +88,7 @@ export class CreateClienteDto { 'O CNPJ serve para identificar o cliente, caso seja pessoa juridica', example: '31895255000193', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) cnpj?: string; @@ -91,6 +97,7 @@ export class CreateClienteDto { 'O pais serve para identificar a região onde o cliente se encontra', example: 'Brasil', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O país inserido não é válido' }) pais?: string; @@ -99,6 +106,7 @@ export class CreateClienteDto { 'O CEP serve para identificar a região onde o cliente se encontra', example: '69918170', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; @@ -107,6 +115,7 @@ export class CreateClienteDto { 'O estado serve para identificar a região onde o cliente se encontra', example: 'SP', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O estado inserido não é válido' }) estado?: string; @@ -115,6 +124,7 @@ export class CreateClienteDto { 'A cidade serve para identificar a região onde o cliente se encontra', example: 'Sorocaba', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; @@ -123,6 +133,7 @@ export class CreateClienteDto { 'O bairro serve para identificar o local onde o cliente se encontra', example: 'Vila Barão', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; @@ -131,6 +142,7 @@ export class CreateClienteDto { 'A rua serve para identificar o local onde o cliente se encontra', example: 'Rua Manuel Lourenço Rodrigues', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A rua inserida não é válida' }) rua?: string; @@ -139,6 +151,7 @@ export class CreateClienteDto { 'O numero serve para identificar o local onde o cliente se encontra', example: '44', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; @@ -147,6 +160,7 @@ export class CreateClienteDto { 'O complemento serve para dar informações adicionais para identificar o local onde o cliente se encontra', example: 'apt. 42', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; } diff --git a/src/modules/clientes/dto/update-cliente.dto.ts b/src/modules/clientes/dto/update-cliente.dto.ts index 858f775..3bef00c 100644 --- a/src/modules/clientes/dto/update-cliente.dto.ts +++ b/src/modules/clientes/dto/update-cliente.dto.ts @@ -9,6 +9,7 @@ import { IsNumberString, IsString, Matches, + ValidateIf, } from 'class-validator'; export class UpdateClienteDto extends PartialType(CreateClienteDto) { @@ -44,8 +45,8 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O nome serve para identificar o cliente, caso seja pessoa fisica', example: 'João Pedro', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome inserido não é válido' }) - @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; @ApiProperty({ @@ -53,6 +54,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O CPF serve para identificar o cliente, caso seja pessoa fisica', example: '02370334029', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; @@ -61,6 +63,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O RG serve para identificar o cliente, caso seja pessoa fisica', example: '114421225', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O RG inserido não é válido' }) rg?: string; @@ -69,6 +72,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O nome fantasia serve para identificar o cliente, caso seja pessoa juridica', example: 'ZawnTech', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome fantasia inserido não é válido' }) nomeFantasia?: string; @@ -77,6 +81,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'A razão social serve para identificar o cliente, caso seja pessoa juridica', example: 'Industria mecanica modelo Ltda.', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A razão social inserida não é válida' }) razaoSocial?: string; @@ -85,6 +90,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O CNPJ serve para identificar o cliente, caso seja pessoa juridica', example: '31895255000193', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) cnpj?: string; @@ -93,6 +99,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O pais serve para identificar a região onde o cliente se encontra', example: 'Brasil', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O país inserido não é válido' }) pais?: string; @@ -101,6 +108,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O CEP serve para identificar a região onde o cliente se encontra', example: '69918170', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; @@ -109,6 +117,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O estado serve para identificar a região onde o cliente se encontra', example: 'SP', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O estado inserido não é válido' }) estado?: string; @@ -117,6 +126,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'A cidade serve para identificar a região onde o cliente se encontra', example: 'Sorocaba', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; @@ -125,6 +135,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O bairro serve para identificar o local onde o cliente se encontra', example: 'Vila Barão', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; @@ -133,6 +144,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'A rua serve para identificar o local onde o cliente se encontra', example: 'Rua Manuel Lourenço Rodrigues', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A rua inserida não é válida' }) rua?: string; @@ -141,6 +153,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O numero serve para identificar o local onde o cliente se encontra', example: '44', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; @@ -149,6 +162,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O complemento serve para dar informações adicionais para identificar o local onde o cliente se encontra', example: 'apt. 42', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; } diff --git a/src/modules/clientes/entities/cliente.entity.ts b/src/modules/clientes/entities/cliente.entity.ts index 0104e10..2042254 100644 --- a/src/modules/clientes/entities/cliente.entity.ts +++ b/src/modules/clientes/entities/cliente.entity.ts @@ -6,6 +6,7 @@ import { IsNumberString, IsString, Matches, + ValidateIf, } from 'class-validator'; export class Cliente { @@ -21,33 +22,47 @@ export class Cliente { message: 'O tipo da conta não condiz com as opções disponíveis', }) contaTipo: contaTipo; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome inserido não é válido' }) @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O RG inserido não é válido' }) rg?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome fantasia inserido não é válido' }) nomeFantasia?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A razão social inserida não é válida' }) razaoSocial?: string; + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) cnpj?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O país inserido não é válido' }) pais?: string; + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O estado inserido não é válido' }) estado?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A rua inserida não é válida' }) rua?: string; + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; createdAt: Date; diff --git a/src/modules/cotacoes/cotacoes.controller.ts b/src/modules/cotacoes/cotacoes.controller.ts index 83194d3..13d58ff 100644 --- a/src/modules/cotacoes/cotacoes.controller.ts +++ b/src/modules/cotacoes/cotacoes.controller.ts @@ -7,6 +7,8 @@ import { Param, Delete, Query, + UsePipes, + ValidationPipe, } from '@nestjs/common'; import { CotacoesService } from './cotacoes.service'; import { CreateCotacaoDto } from './dto/create-cotacao.dto'; @@ -31,6 +33,8 @@ async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPa countAll() { return this.cotacoesService.countAllCotacaos(); } + + @UsePipes(ValidationPipe) @Post() create(@Body() createCotacaoDto: CreateCotacaoDto) { return this.cotacoesService.create(createCotacaoDto); @@ -46,6 +50,7 @@ async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPa return await this.cotacoesService.findOne(+id); } + @UsePipes(ValidationPipe) @Patch(':id') update(@Param('id') id: string, @Body() updateCotacaoDto: UpdateCotacaoDto) { return this.cotacoesService.update(+id, updateCotacaoDto); diff --git a/src/modules/cotacoes/entities/cotacao.entity.ts b/src/modules/cotacoes/entities/cotacao.entity.ts index a312d56..bd36cc6 100644 --- a/src/modules/cotacoes/entities/cotacao.entity.ts +++ b/src/modules/cotacoes/entities/cotacao.entity.ts @@ -8,8 +8,8 @@ export class Cotacao { @IsNotEmpty({ message: 'O valor não pode estar vazio' }) @IsNumber({}, { message: 'O valor inserido não é válido' }) valor: number; - @IsNumber({}, { message: 'O fornecedor inserido não é válido' }) @IsNotEmpty({ message: 'O fornecedor não pode estar vazio' }) + @IsNumber({}, { message: 'O fornecedor inserido não é válido' }) idFornecedor: number; @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) @IsNumber({}, { message: 'O insumo inserido não é válido' }) diff --git a/src/modules/fornecedores/dto/create-fornecedor.dto.ts b/src/modules/fornecedores/dto/create-fornecedor.dto.ts index 9a99dfa..bec4e40 100644 --- a/src/modules/fornecedores/dto/create-fornecedor.dto.ts +++ b/src/modules/fornecedores/dto/create-fornecedor.dto.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; import { contaTipo } from '@prisma/client'; -import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches } from 'class-validator'; +import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches, ValidateIf } from 'class-validator'; export class CreateFornecedorDto { @ApiProperty({ @@ -35,6 +35,7 @@ export class CreateFornecedorDto { 'O nome serve para identificar o fornecedor, caso seja pessoa fisica', example: 'João Pedro', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome inserido não é válido' }) @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; @@ -44,6 +45,7 @@ export class CreateFornecedorDto { 'O CPF serve para identificar o fornecedor, caso seja pessoa fisica', example: '02370334029', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; @@ -52,6 +54,7 @@ export class CreateFornecedorDto { 'O RG serve para identificar o fornecedor, caso seja pessoa fisica', example: '114421225', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O RG inserido não é válido' }) rg?: string; @@ -60,6 +63,7 @@ export class CreateFornecedorDto { 'O nome fantasia serve para identificar o fornecedor, caso seja pessoa juridica', example: 'ZawnTech', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome fantasia inserido não é válido' }) nomeFantasia?: string; @@ -68,6 +72,7 @@ export class CreateFornecedorDto { 'A razão social serve para identificar o fornecedor, caso seja pessoa juridica', example: 'Industria mecanica modelo Ltda.', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A razão social inserida não é válida' }) razaoSocial?: string; @@ -76,6 +81,7 @@ export class CreateFornecedorDto { 'O CNPJ serve para identificar o fornecedor, caso seja pessoa juridica', example: '31895255000193', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) cnpj?: string; @@ -84,6 +90,7 @@ export class CreateFornecedorDto { 'O pais serve para identificar a região onde o fornecedor se encontra', example: 'Brasil', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O país inserido não é válido' }) pais?: string; @@ -92,6 +99,7 @@ export class CreateFornecedorDto { 'O CEP serve para identificar a região onde o fornecedor se encontra', example: '69918170', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; @@ -100,6 +108,7 @@ export class CreateFornecedorDto { 'O estado serve para identificar a região onde o fornecedor se encontra', example: 'SP', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O estado inserido não é válido' }) estado?: string; @@ -108,6 +117,7 @@ export class CreateFornecedorDto { 'A cidade serve para identificar a região onde o fornecedor se encontra', example: 'Sorocaba', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; @@ -116,6 +126,7 @@ export class CreateFornecedorDto { 'O bairro serve para identificar o local onde o fornecedor se encontra', example: 'Vila Barão', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; @@ -124,6 +135,7 @@ export class CreateFornecedorDto { 'A rua serve para identificar o local onde o fornecedor se encontra', example: 'Rua Manuel Lourenço Rodrigues', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A rua inserida não é válida' }) rua?: string; @@ -132,6 +144,7 @@ export class CreateFornecedorDto { 'O numero serve para identificar o local onde o fornecedor se encontra', example: '44', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; @@ -140,6 +153,7 @@ export class CreateFornecedorDto { 'O complemento serve para dar informações adicionais para identificar o local onde o fornecedor se encontra', example: 'apt. 42', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; } diff --git a/src/modules/fornecedores/dto/update-fornecedor.dto.ts b/src/modules/fornecedores/dto/update-fornecedor.dto.ts index ccc19d9..c3aaff4 100644 --- a/src/modules/fornecedores/dto/update-fornecedor.dto.ts +++ b/src/modules/fornecedores/dto/update-fornecedor.dto.ts @@ -2,7 +2,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateFornecedorDto } from './create-fornecedor.dto'; import { contaTipo } from '@prisma/client'; import { ApiProperty } from '@nestjs/swagger'; -import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches } from 'class-validator'; +import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches, ValidateIf } from 'class-validator'; export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { @ApiProperty({ @@ -37,6 +37,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O nome serve para identificar o fornecedor, caso seja pessoa fisica', example: 'João Pedro', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome inserido não é válido' }) @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; @@ -46,6 +47,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O CPF serve para identificar o fornecedor, caso seja pessoa fisica', example: '02370334029', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; @@ -54,6 +56,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O RG serve para identificar o fornecedor, caso seja pessoa fisica', example: '114421225', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O RG inserido não é válido' }) rg?: string; @@ -62,6 +65,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O nome fantasia serve para identificar o fornecedor, caso seja pessoa juridica', example: 'ZawnTech', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome fantasia inserido não é válido' }) nomeFantasia?: string; @@ -70,6 +74,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'A razão social serve para identificar o fornecedor, caso seja pessoa juridica', example: 'Industria mecanica modelo Ltda.', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A razão social inserida não é válida' }) razaoSocial?: string; @@ -78,6 +83,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O CNPJ serve para identificar o fornecedor, caso seja pessoa juridica', example: '31895255000193', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) cnpj?: string; @@ -86,6 +92,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O pais serve para identificar a região onde o fornecedor se encontra', example: 'Brasil', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O país inserido não é válido' }) pais?: string; @@ -94,6 +101,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O CEP serve para identificar a região onde o fornecedor se encontra', example: '69918170', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; @@ -102,6 +110,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O estado serve para identificar a região onde o fornecedor se encontra', example: 'SP', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O estado inserido não é válido' }) estado?: string; @@ -110,6 +119,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'A cidade serve para identificar a região onde o fornecedor se encontra', example: 'Sorocaba', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; @@ -118,6 +128,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O bairro serve para identificar o local onde o fornecedor se encontra', example: 'Vila Barão', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; @@ -126,6 +137,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'A rua serve para identificar o local onde o fornecedor se encontra', example: 'Rua Manuel Lourenço Rodrigues', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A rua inserida não é válida' }) rua?: string; @@ -134,6 +146,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O numero serve para identificar o local onde o fornecedor se encontra', example: '44', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; @@ -142,6 +155,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O complemento serve para dar informações adicionais para identificar o local onde o fornecedor se encontra', example: 'apt. 42', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; } diff --git a/src/modules/fornecedores/entities/fornecedor.entity.ts b/src/modules/fornecedores/entities/fornecedor.entity.ts index 16a2f75..948e3a4 100644 --- a/src/modules/fornecedores/entities/fornecedor.entity.ts +++ b/src/modules/fornecedores/entities/fornecedor.entity.ts @@ -1,5 +1,5 @@ import { contaTipo } from '@prisma/client'; -import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches } from 'class-validator'; +import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches, ValidateIf } from 'class-validator'; export class Fornecedor { id: number; @@ -14,33 +14,47 @@ export class Fornecedor { message: 'O tipo da conta não condiz com as opções disponíveis', }) contaTipo: contaTipo; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome inserido não é válido' }) @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O RG inserido não é válido' }) rg?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome fantasia inserido não é válido' }) nomeFantasia?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A razão social inserida não é válida' }) razaoSocial?: string; + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) cnpj?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O país inserido não é válido' }) pais?: string; + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O estado inserido não é válido' }) estado?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A rua inserida não é válida' }) rua?: string; + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; createdAt: Date; diff --git a/src/modules/fornecedores/fornecedores.controller.ts b/src/modules/fornecedores/fornecedores.controller.ts index be9c130..8a346a2 100644 --- a/src/modules/fornecedores/fornecedores.controller.ts +++ b/src/modules/fornecedores/fornecedores.controller.ts @@ -7,6 +7,8 @@ import { Param, Delete, Query, + UsePipes, + ValidationPipe, } from '@nestjs/common'; import { FornecedoresService } from './fornecedores.service'; import { CreateFornecedorDto } from './dto/create-fornecedor.dto'; @@ -31,6 +33,7 @@ async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPa return this.fornecedoresService.countAllFornecedor(); } + @UsePipes(ValidationPipe) @Post() create(@Body() CreateFornecedoresDto: CreateFornecedorDto) { return this.fornecedoresService.create(CreateFornecedoresDto); @@ -45,7 +48,8 @@ async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPa async findOne(@Param('id') id: string) { return await this.fornecedoresService.findOne(+id); } - + + @UsePipes(ValidationPipe) @Patch(':id') update( @Param('id') id: string, diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts index bb219c1..fc4ccd7 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, Query } from '@nestjs/common'; +import { Controller, Get, Post, Body, Patch, Param, Delete, Query, UsePipes, ValidationPipe } from '@nestjs/common'; import { InsumosProdutosBaseService } from './insumos-produtos-base.service'; import { CreateInsumosProdutosBaseDto } from './dto/create-insumo-produtos-base.dto'; import { UpdateInsumosProdutosBaseDto } from './dto/update-insumo-produtos-base.dto'; @@ -28,6 +28,7 @@ async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPa return this.insumosProdutosBaseService.findInsumoProdBase(+id); } + @UsePipes(ValidationPipe) @Post() create(@Body() createInsumosProdutosBaseDto: CreateInsumosProdutosBaseDto) { return this.insumosProdutosBaseService.create(createInsumosProdutosBaseDto); @@ -43,6 +44,7 @@ async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPa return this.insumosProdutosBaseService.findOne(+id); } + @UsePipes(ValidationPipe) @Patch(':id') update(@Param('id') id: string, @Body() updateInsumosProdutosBaseDto: UpdateInsumosProdutosBaseDto) { return this.insumosProdutosBaseService.update(+id, updateInsumosProdutosBaseDto); diff --git a/src/modules/insumos/dto/create-insumo.dto.ts b/src/modules/insumos/dto/create-insumo.dto.ts index c122e67..b6ff960 100644 --- a/src/modules/insumos/dto/create-insumo.dto.ts +++ b/src/modules/insumos/dto/create-insumo.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber, IsString, Matches } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsString, Matches, ValidateIf } from 'class-validator'; export class CreateInsumoDto { @ApiProperty({ @@ -14,6 +14,7 @@ export class CreateInsumoDto { description: 'A descrição serve para detalhar o insumo', example: '20 x 30 x 6.000 mm', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A descrição inserida não é válida' }) descricao?: string; @@ -22,6 +23,7 @@ export class CreateInsumoDto { 'A unidade de medida serve para destacar a forma que o insumo é medido', example: 'mm', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A unidade de medida inserida não é válida' }) unidadeMedida?: string; @@ -30,6 +32,7 @@ export class CreateInsumoDto { 'O Id da categoria serve para conectar o insumo a uma categoria', example: '1', }) + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'A categoria inserida não é válida' }) idCategoria?: number; } diff --git a/src/modules/insumos/dto/update-insumo.dto.ts b/src/modules/insumos/dto/update-insumo.dto.ts index d0b67ac..02a0174 100644 --- a/src/modules/insumos/dto/update-insumo.dto.ts +++ b/src/modules/insumos/dto/update-insumo.dto.ts @@ -1,7 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateInsumoDto } from './create-insumo.dto'; import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber, IsString } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; export class UpdateInsumoDto extends PartialType(CreateInsumoDto) { @ApiProperty({ @@ -16,6 +16,7 @@ export class UpdateInsumoDto extends PartialType(CreateInsumoDto) { description: 'A descrição serve para detalhar o insumo', example: '20 x 30 x 6.000 mm', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A descrição inserida não é válida' }) descricao?: string; @@ -24,6 +25,7 @@ export class UpdateInsumoDto extends PartialType(CreateInsumoDto) { 'A unidade de medida serve para destacar a forma que o insumo é medido', example: 'mm', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A unidade de medida inserida não é válida' }) unidadeMedida?: string; @@ -32,6 +34,7 @@ export class UpdateInsumoDto extends PartialType(CreateInsumoDto) { 'O Id da categoria serve para conectar o insumo a uma categoria', example: '1', }) + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'A categoria inserida não é válida' }) idCategoria?: number; } diff --git a/src/modules/insumos/entities/insumo.entity.ts b/src/modules/insumos/entities/insumo.entity.ts index 6e570d1..91af0b0 100644 --- a/src/modules/insumos/entities/insumo.entity.ts +++ b/src/modules/insumos/entities/insumo.entity.ts @@ -1,4 +1,4 @@ -import { IsNotEmpty, IsNumber, IsString } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; import { Categoria } from '../../categorias/entities/categoria.entity'; export class Insumo { @@ -6,11 +6,14 @@ export class Insumo { @IsNotEmpty({message: 'O titulo não pode estar vazio'}) @IsString({message: 'O titulo inserido não é válido'}) titulo: string; + @ValidateIf((object, value) => value !== undefined) @IsString({message: 'A descrição inserida não é válida'}) descricao?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({message: 'A unidade de medida inserida não é válida'}) unidadeMedida?: string; - @IsNumber({},{message: 'A categoria inserida não é válida'}) + @ValidateIf((object, value) => value !== undefined) + @IsNumber({}, { message: 'A categoria inserida não é válida' }) idCategoria?: number; categoria?: Categoria; createdAt: Date; diff --git a/src/modules/insumos/insumos.controller.ts b/src/modules/insumos/insumos.controller.ts index 6b5dc19..801bc61 100644 --- a/src/modules/insumos/insumos.controller.ts +++ b/src/modules/insumos/insumos.controller.ts @@ -50,6 +50,7 @@ async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPa return await this.insumosService.findOne(+id); } + @UsePipes(ValidationPipe) @Patch(':id') update(@Param('id') id: string, @Body() updateInsumoDto: UpdateInsumoDto) { return this.insumosService.update(+id, updateInsumoDto); diff --git a/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts b/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts index ac54687..0ecd2df 100644 --- a/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts +++ b/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber } from 'class-validator'; +import { IsNotEmpty, IsNumber, ValidateIf } from 'class-validator'; export class CreateListaInsumoDto { @ApiProperty({ @@ -34,6 +34,7 @@ export class CreateListaInsumoDto { 'O id da cotação serve para descrever qual a cotação que determinará o custo do insumo', example: '5', }) + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'A cotação inserida não é válida' }) idCotacao?: number; } diff --git a/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts b/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts index d9ee346..5e81b89 100644 --- a/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts +++ b/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts @@ -1,7 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateListaInsumoDto } from './create-lista-insumo.dto'; import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber } from 'class-validator'; +import { IsNotEmpty, IsNumber, ValidateIf } from 'class-validator'; export class UpdateListaInsumoDto extends PartialType(CreateListaInsumoDto) { @ApiProperty({ @@ -36,6 +36,7 @@ export class UpdateListaInsumoDto extends PartialType(CreateListaInsumoDto) { 'O id da cotação serve para descrever qual a cotação que determinará o custo do insumo', example: '5', }) + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'A cotação inserida não é válida' }) idCotacao?: number; } diff --git a/src/modules/lista-insumos/entities/lista-insumo.entity.ts b/src/modules/lista-insumos/entities/lista-insumo.entity.ts index fba76c3..61770ae 100644 --- a/src/modules/lista-insumos/entities/lista-insumo.entity.ts +++ b/src/modules/lista-insumos/entities/lista-insumo.entity.ts @@ -1,4 +1,4 @@ -import { IsNotEmpty, IsNumber } from 'class-validator'; +import { IsNotEmpty, IsNumber, ValidateIf } from 'class-validator'; import { Cotacao } from 'src/modules/cotacoes/entities/cotacao.entity'; import { Insumo } from 'src/modules/insumos/entities/insumo.entity'; import { Produto } from 'src/modules/produtos/entities/produto.entity'; @@ -14,6 +14,7 @@ export class ListaInsumo { @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) @IsNumber({}, { message: 'O insumo inserido não é válido' }) idInsumo: number; + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'A cotação inserida não é válida' }) idCotacao?: number; produto: Produto; diff --git a/src/modules/lista-insumos/lista-insumos.controller.ts b/src/modules/lista-insumos/lista-insumos.controller.ts index 59b64a9..237f978 100644 --- a/src/modules/lista-insumos/lista-insumos.controller.ts +++ b/src/modules/lista-insumos/lista-insumos.controller.ts @@ -1,9 +1,20 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, ValidationPipe, UsePipes, Query } from '@nestjs/common'; +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + ValidationPipe, + UsePipes, + Query, +} from '@nestjs/common'; import { ListaInsumosService } from './lista-insumos.service'; import { CreateListaInsumoDto } from './dto/create-lista-insumo.dto'; import { UpdateListaInsumoDto } from './dto/update-lista-insumo.dto'; import { ApiTags } from '@nestjs/swagger'; -import {response as res} from 'express'; +import { response as res } from 'express'; @ApiTags('lista-insumos') @Controller('lista-insumos') @@ -11,13 +22,17 @@ export class ListaInsumosController { constructor(private readonly listaInsumosService: ListaInsumosService) {} @Get('paginate') - async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { + async findAllWithPagination( + @Query('page') page: number, + @Query('perPage') perPage: number, + ) { page = page; perPage = perPage; const totalcount = await this.listaInsumosService.countAll(); res.set('x-total-count', totalcount.toString()); return await this.listaInsumosService.findAllWithPagination(page, perPage); } + @UsePipes(ValidationPipe) @Post() create(@Body() createListaInsumoDto: CreateListaInsumoDto) { @@ -39,6 +54,7 @@ export class ListaInsumosController { return this.listaInsumosService.findOne(+id); } + @UsePipes(ValidationPipe) @Patch(':id') update( @Param('id') id: string, diff --git a/src/modules/orcamentos/dto/create-orcamento.dto.ts b/src/modules/orcamentos/dto/create-orcamento.dto.ts index 6851e26..889cbe5 100644 --- a/src/modules/orcamentos/dto/create-orcamento.dto.ts +++ b/src/modules/orcamentos/dto/create-orcamento.dto.ts @@ -6,6 +6,7 @@ import { IsNotEmpty, IsNumber, IsString, + ValidateIf, } from 'class-validator'; export class CreateOrcamentoDto { @@ -14,6 +15,7 @@ export class CreateOrcamentoDto { 'A validade serve para descrever até qual data o orçamento será valido', example: '2023-10-23T17:30:44.382Z', }) + @ValidateIf((object, value) => value !== undefined) @IsDate({ message: 'A validade inserida não é válida' }) validade?: Date; @@ -22,6 +24,7 @@ export class CreateOrcamentoDto { 'O total mão de obra serve para descrever o custo total de mão de obra para produzir os itens do orçamento', example: '750', }) + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'O valor de mão de obra inserido não é válido' }) totalMaoObra?: number; @@ -30,6 +33,7 @@ export class CreateOrcamentoDto { 'O total materiais serve para descrever o custo total das compras do materiais para produzir os itens do orçamento', example: '700', }) + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'O valor total de materiais inserido não é válido' }) totalMateriais?: number; @@ -46,6 +50,7 @@ export class CreateOrcamentoDto { 'O prazo estimado de produção serve para descrever uma estimativa de quanto tempo será necessário para concluir o orçamento, descrito em dias', example: '90', }) + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'O prazo estimado inserido não é válido' }) prazoEstimadoProducao: number; @@ -54,6 +59,7 @@ export class CreateOrcamentoDto { 'As observações servem para descrever caracteristicas relevantes obre o orçamento', example: '2 portões e 1 grade para janela', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; diff --git a/src/modules/orcamentos/dto/update-orcamento.dto.ts b/src/modules/orcamentos/dto/update-orcamento.dto.ts index cd1b093..f6a438a 100644 --- a/src/modules/orcamentos/dto/update-orcamento.dto.ts +++ b/src/modules/orcamentos/dto/update-orcamento.dto.ts @@ -8,6 +8,7 @@ import { IsNotEmpty, IsNumber, IsString, + ValidateIf, } from 'class-validator'; export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { @@ -16,6 +17,7 @@ export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { 'A validade serve para descrever até qual data o orçamento será valido', example: '2023-10-23T17:30:44.382Z', }) + @ValidateIf((object, value) => value !== undefined) @IsDate({ message: 'A validade inserida não é válida' }) validade?: Date; @@ -24,6 +26,7 @@ export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { 'O total mão de obra serve para descrever o custo total de mão de obra para produzir os itens do orçamento', example: '750', }) + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'O valor de mão de obra inserido não é válido' }) totalMaoObra?: number; @@ -32,6 +35,7 @@ export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { 'O total materiais serve para descrever o custo total das compras do materiais para produzir os itens do orçamento', example: '700', }) + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'O valor total de materiais inserido não é válido' }) totalMateriais?: number; @@ -48,6 +52,7 @@ export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { 'O prazo estimado de produção serve para descrever uma estimativa de quanto tempo será necessário para concluir o orçamento, descrito em dias', example: '90', }) + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'O prazo estimado inserido não é válido' }) prazoEstimadoProducao?: number; @@ -56,6 +61,7 @@ export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { 'As observações servem para descrever caracteristicas relevantes obre o orçamento', example: '2 portões e 1 grade para janela', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; diff --git a/src/modules/orcamentos/entities/orcamento.entity.ts b/src/modules/orcamentos/entities/orcamento.entity.ts index c54a079..4d11698 100644 --- a/src/modules/orcamentos/entities/orcamento.entity.ts +++ b/src/modules/orcamentos/entities/orcamento.entity.ts @@ -7,22 +7,28 @@ import { IsNotEmpty, IsNumber, IsString, + ValidateIf, } from 'class-validator'; export class Orcamento { id: Number; + @ValidateIf((object, value) => value !== undefined) @IsDate({ message: 'A validade inserida não é válida' }) validade?: Date; dataOrcamento: Date; + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'O valor de mão de obra inserido não é válido' }) totalMaoObra?: number; + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'O valor total de materiais inserido não é válido' }) totalMateriais?: number; @IsNotEmpty({ message: 'O status não pode estar vazio' }) @IsEnum(status, { message: 'O status inserido não é válido' }) status: status; + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'O prazo estimado inserido não é válido' }) prazoEstimadoProducao?: number; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; @IsNotEmpty({ message: 'O cliente não pode estar vazio' }) diff --git a/src/modules/pedidos/pedidos.controller.ts b/src/modules/pedidos/pedidos.controller.ts index 47c377f..662c3a2 100644 --- a/src/modules/pedidos/pedidos.controller.ts +++ b/src/modules/pedidos/pedidos.controller.ts @@ -1,9 +1,20 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, UsePipes, ValidationPipe, Query } from '@nestjs/common'; +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + UsePipes, + ValidationPipe, + Query, +} from '@nestjs/common'; import { PedidosService } from './pedidos.service'; import { CreatePedidoDto } from './dto/create-pedido.dto'; import { UpdatePedidoDto } from './dto/update-pedido.dto'; import { ApiTags } from '@nestjs/swagger'; -import {response as res} from 'express'; +import { response as res } from 'express'; @ApiTags('pedidos') @Controller('pedidos') export class PedidosController { @@ -15,13 +26,17 @@ export class PedidosController { } @Get('paginate') - async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { + async findAllWithPagination( + @Query('page') page: number, + @Query('perPage') perPage: number, + ) { page = page; perPage = perPage; const totalcount = await this.pedidosService.countAll(); res.set('x-total-count', totalcount.toString()); return await this.pedidosService.findAllWithPagination(page, perPage); } + @UsePipes(ValidationPipe) @Post() create(@Body() createPedidoDto: CreatePedidoDto) { @@ -37,7 +52,7 @@ export class PedidosController { findOne(@Param('id') id: string) { return this.pedidosService.findOne(+id); } - + @UsePipes(ValidationPipe) @Patch(':id') update(@Param('id') id: string, @Body() updatePedidoDto: UpdatePedidoDto) { diff --git a/src/modules/produtos-base/dto/create-produtos-base.dto.ts b/src/modules/produtos-base/dto/create-produtos-base.dto.ts index 3ba1227..43c1784 100644 --- a/src/modules/produtos-base/dto/create-produtos-base.dto.ts +++ b/src/modules/produtos-base/dto/create-produtos-base.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty } from "@nestjs/swagger"; -import { IsNotEmpty, IsString } from "class-validator"; +import { IsNotEmpty, IsString, ValidateIf } from "class-validator"; export class CreateProdutosBaseDto { @ApiProperty({ @@ -16,6 +16,7 @@ export class CreateProdutosBaseDto { 'As observações servem para descrever caracteristicas relevantes sobre o produto base', example: '2" x 6 m', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; } diff --git a/src/modules/produtos-base/dto/update-produtos-base.dto.ts b/src/modules/produtos-base/dto/update-produtos-base.dto.ts index 047bfc2..2f90850 100644 --- a/src/modules/produtos-base/dto/update-produtos-base.dto.ts +++ b/src/modules/produtos-base/dto/update-produtos-base.dto.ts @@ -1,7 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateProdutosBaseDto } from './create-produtos-base.dto'; import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsString } from 'class-validator'; +import { IsNotEmpty, IsString, ValidateIf } from 'class-validator'; export class UpdateProdutosBaseDto extends PartialType(CreateProdutosBaseDto) { @ApiProperty({ @@ -18,6 +18,7 @@ export class UpdateProdutosBaseDto extends PartialType(CreateProdutosBaseDto) { 'As observações servem para descrever caracteristicas relevantes sobre o produto base', example: '2" x 6 m', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; } diff --git a/src/modules/produtos-base/entities/produtos-base.entity.ts b/src/modules/produtos-base/entities/produtos-base.entity.ts index 6a3a2eb..639234d 100644 --- a/src/modules/produtos-base/entities/produtos-base.entity.ts +++ b/src/modules/produtos-base/entities/produtos-base.entity.ts @@ -1,11 +1,12 @@ import { InsumoProdutoBase } from '@prisma/client'; -import { IsNotEmpty, IsString } from 'class-validator'; +import { IsNotEmpty, IsString, ValidateIf } from 'class-validator'; export class ProdutosBase { id: number; @IsNotEmpty({ message: 'O titulo não pode estar vazio' }) @IsString({ message: 'O titulo inserido não é válido' }) titulo: string; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; insumosProdutosBase: InsumoProdutoBase[]; diff --git a/src/modules/produtos-base/produtos-base.controller.ts b/src/modules/produtos-base/produtos-base.controller.ts index e5f6428..6c93b07 100644 --- a/src/modules/produtos-base/produtos-base.controller.ts +++ b/src/modules/produtos-base/produtos-base.controller.ts @@ -1,16 +1,30 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, ValidationPipe, UsePipes, Query } from '@nestjs/common'; +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + ValidationPipe, + UsePipes, + Query, +} from '@nestjs/common'; import { ProdutosBaseService } from './produtos-base.service'; import { CreateProdutosBaseDto } from './dto/create-produtos-base.dto'; import { UpdateProdutosBaseDto } from './dto/update-produtos-base.dto'; import { ApiTags } from '@nestjs/swagger'; -import {response as res} from 'express'; +import { response as res } from 'express'; @ApiTags('produtos-base') @Controller('produtos-base') export class ProdutosBaseController { constructor(private readonly produtosBaseService: ProdutosBaseService) {} @Get('paginate') - async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { + async findAllWithPagination( + @Query('page') page: number, + @Query('perPage') perPage: number, + ) { page = page; perPage = perPage; const totalcount = await this.produtosBaseService.countAll(); @@ -21,6 +35,7 @@ export class ProdutosBaseController { countAll() { return this.produtosBaseService.countAll(); } + @UsePipes(ValidationPipe) @Post() create(@Body() createProdutosBaseDto: CreateProdutosBaseDto) { @@ -36,9 +51,13 @@ export class ProdutosBaseController { findOne(@Param('id') id: string) { return this.produtosBaseService.findOne(+id); } + @UsePipes(ValidationPipe) @Patch(':id') - update(@Param('id') id: string, @Body() updateProdutosBaseDto: UpdateProdutosBaseDto) { + update( + @Param('id') id: string, + @Body() updateProdutosBaseDto: UpdateProdutosBaseDto, + ) { return this.produtosBaseService.update(+id, updateProdutosBaseDto); } diff --git a/src/modules/produtos/dto/create-produto.dto.ts b/src/modules/produtos/dto/create-produto.dto.ts index 367c5e7..bc7264e 100644 --- a/src/modules/produtos/dto/create-produto.dto.ts +++ b/src/modules/produtos/dto/create-produto.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber, IsString } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; export class CreateProdutoDto { @ApiProperty({ @@ -15,6 +15,7 @@ export class CreateProdutoDto { 'A quantidade serve para descrever quantas unidades deste produto serão necessárias para o orçamento', example: '3', }) + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'A quantidade inserida não é válida' }) quantidade?: number; @@ -23,6 +24,7 @@ export class CreateProdutoDto { 'O valor unitario serve para descrever o valor do produto como uma unica unidade', example: '340', }) + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'O valor unitário inserido não é válido' }) valorUnitario?: number; @@ -31,6 +33,7 @@ export class CreateProdutoDto { 'As observações servem para descrever caracteristicas relevantes sobre o produto', example: '2" x 6 m', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; diff --git a/src/modules/produtos/dto/update-produto.dto.ts b/src/modules/produtos/dto/update-produto.dto.ts index 779753a..53f3be3 100644 --- a/src/modules/produtos/dto/update-produto.dto.ts +++ b/src/modules/produtos/dto/update-produto.dto.ts @@ -1,7 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateProdutoDto } from './create-produto.dto'; import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber, IsString } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; export class UpdateProdutoDto extends PartialType(CreateProdutoDto) { @ApiProperty({ @@ -17,6 +17,7 @@ export class UpdateProdutoDto extends PartialType(CreateProdutoDto) { 'A quantidade serve para descrever quantas unidades deste produto serão necessárias para o orçamento', example: '3', }) + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'A quantidade inserida não é válida' }) quantidade?: number; @@ -25,6 +26,7 @@ export class UpdateProdutoDto extends PartialType(CreateProdutoDto) { 'O valor unitario serve para descrever o valor do produto como uma unica unidade', example: '340', }) + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'O valor unitário inserido não é válido' }) valorUnitario?: number; @@ -33,6 +35,7 @@ export class UpdateProdutoDto extends PartialType(CreateProdutoDto) { 'As observações servem para descrever caracteristicas relevantes sobre o produto', example: '2" x 6 m', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; diff --git a/src/modules/produtos/entities/produto.entity.ts b/src/modules/produtos/entities/produto.entity.ts index 40c1981..52ec69a 100644 --- a/src/modules/produtos/entities/produto.entity.ts +++ b/src/modules/produtos/entities/produto.entity.ts @@ -1,4 +1,4 @@ -import { IsNotEmpty, IsNumber, IsString } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; import { ListaInsumo } from 'src/modules/lista-insumos/entities/lista-insumo.entity'; import { Orcamento } from 'src/modules/orcamentos/entities/orcamento.entity'; @@ -7,10 +7,13 @@ export class Produto { @IsNotEmpty({ message: 'O titulo não pode estar vazio' }) @IsString({ message: 'O titulo inserido não é válido' }) titulo: string; + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'A quantidade inserida não é válida' }) quantidade?: number; + @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'O valor unitário inserido não é válido' }) valorUnitario?: number; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; listaInsumos: ListaInsumo[]; diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index 19f33ac..b1a9266 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -1,4 +1,15 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, UsePipes, ValidationPipe, Query } from '@nestjs/common'; +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + UsePipes, + ValidationPipe, + Query, +} from '@nestjs/common'; import { ProdutosService } from './produtos.service'; import { CreateProdutoDto } from './dto/create-produto.dto'; import { UpdateProdutoDto } from './dto/update-produto.dto'; @@ -10,7 +21,10 @@ export class ProdutosController { constructor(private readonly produtosService: ProdutosService) {} @Get('paginate') - async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { + async findAllWithPagination( + @Query('page') page: number, + @Query('perPage') perPage: number, + ) { page = page; perPage = perPage; const totalcount = await this.produtosService.countAll(); @@ -18,7 +32,7 @@ export class ProdutosController { return await this.produtosService.findAllWithPagination(page, perPage); } @Get('count') - countAll(){ + countAll() { return this.produtosService.countAll(); } @@ -29,19 +43,20 @@ export class ProdutosController { } @Post(':idProdBase/:idOrc') - createProdFromBase(@Param('idProdBase') idProdBase: number, @Param('idOrc') idOrc: number) { + createProdFromBase( + @Param('idProdBase') idProdBase: number, + @Param('idOrc') idOrc: number, + ) { return this.produtosService.pullProdBase(+idProdBase, +idOrc); } @Get('prodOrc/:id') - findProdutoOrc(@Param('id') id: number) - { + findProdutoOrc(@Param('id') id: number) { return this.produtosService.findProdutoOrc(+id); } @Get(':busca') - findManyByTitle(@Param('titulo') buscaparam: string) - { + findManyByTitle(@Param('titulo') buscaparam: string) { return this.produtosService.findManyByTitle(buscaparam); } diff --git a/src/modules/usuarios/dto/create-usuario.dto.ts b/src/modules/usuarios/dto/create-usuario.dto.ts index 1a90035..4b2b3f2 100644 --- a/src/modules/usuarios/dto/create-usuario.dto.ts +++ b/src/modules/usuarios/dto/create-usuario.dto.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; import { tipoUsuario } from '@prisma/client'; -import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches } from 'class-validator'; +import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches, ValidateIf } from 'class-validator'; export class CreateUsuarioDto { @ApiProperty({ @@ -17,6 +17,7 @@ export class CreateUsuarioDto { 'O nome do usuário serve para identificar e pesquisar o usuário', example: 'Sérgio Moraes', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome inserido não é válido' }) @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome: string; @@ -25,6 +26,7 @@ export class CreateUsuarioDto { description: 'O CPF serve para identificar o usuario', example: '02370334029', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf: string; @@ -32,6 +34,7 @@ export class CreateUsuarioDto { description: 'O email serve para descrever o email do usuario', example: 'email@gmail.com', }) + @ValidateIf((object, value) => value !== undefined) @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email: string; @@ -50,9 +53,11 @@ export class CreateUsuarioDto { 'A senha serve para o usuário realizar o acesso dentro da aplicação', example: '1234', }) + @ValidateIf((object, value) => value !== undefined) @IsString({message: 'A senha inserida não é válida'}) senha: string; + @ValidateIf((object, value) => value !== undefined) @IsString({message: 'O token inserido não é válido'}) token: string; } diff --git a/src/modules/usuarios/dto/update-usuario.dto.ts b/src/modules/usuarios/dto/update-usuario.dto.ts index f4b5efd..5716c7d 100644 --- a/src/modules/usuarios/dto/update-usuario.dto.ts +++ b/src/modules/usuarios/dto/update-usuario.dto.ts @@ -2,7 +2,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateUsuarioDto } from './create-usuario.dto'; import { tipoUsuario } from '@prisma/client'; import { ApiProperty } from '@nestjs/swagger'; -import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches } from 'class-validator'; +import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches, ValidateIf } from 'class-validator'; export class UpdateUsuarioDto extends PartialType(CreateUsuarioDto) { @ApiProperty({ @@ -19,6 +19,7 @@ export class UpdateUsuarioDto extends PartialType(CreateUsuarioDto) { 'O nome do usuário serve para identificar e pesquisar o usuário', example: 'Sérgio Moraes', }) + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome inserido não é válido' }) @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; @@ -27,6 +28,7 @@ export class UpdateUsuarioDto extends PartialType(CreateUsuarioDto) { description: 'O CPF serve para identificar o usuario', example: '02370334029', }) + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; @@ -34,6 +36,7 @@ export class UpdateUsuarioDto extends PartialType(CreateUsuarioDto) { description: 'O email serve para descrever o email do usuario', example: 'email@gmail.com', }) + @ValidateIf((object, value) => value !== undefined) @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email?: string; @@ -52,9 +55,11 @@ export class UpdateUsuarioDto extends PartialType(CreateUsuarioDto) { 'A senha serve para o usuário realizar o acesso dentro da aplicação', example: '1234', }) + @ValidateIf((object, value) => value !== undefined) @IsString({message: 'A senha inserida não é válida'}) senha?: string; + @ValidateIf((object, value) => value !== undefined) @IsString({message: 'O token inserido não é válido'}) token?: string; } diff --git a/src/modules/usuarios/entities/usuario.entity.ts b/src/modules/usuarios/entities/usuario.entity.ts index 4c60d55..cba665a 100644 --- a/src/modules/usuarios/entities/usuario.entity.ts +++ b/src/modules/usuarios/entities/usuario.entity.ts @@ -1,14 +1,16 @@ import { tipoUsuario } from '@prisma/client'; -import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches } from 'class-validator'; +import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches, ValidateIf } from 'class-validator'; export class Usuario { id: number; @IsNotEmpty({message: 'O tipo do usuário não poder estar vazio'}) @IsEnum(tipoUsuario, {message: 'O tipo de usuário inserido não é válido'}) tipoUsuario: tipoUsuario; + @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome inserido não é válido' }) @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome: string; + @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf: string; @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) @@ -17,8 +19,10 @@ export class Usuario { @IsNotEmpty({ message: 'O telefone não pode estar vazio' }) @IsNumberString({}, { message: 'O telefone inserido não é válido' }) telefone: string; + @ValidateIf((object, value) => value !== undefined) @IsString({message: 'A senha inserida não é válida'}) senha: string; + @ValidateIf((object, value) => value !== undefined) @IsString({message: 'O token inserido não é válido'}) token: string; createdAt: Date; diff --git a/src/modules/usuarios/usuarios.controller.ts b/src/modules/usuarios/usuarios.controller.ts index bfdfbe4..653b232 100644 --- a/src/modules/usuarios/usuarios.controller.ts +++ b/src/modules/usuarios/usuarios.controller.ts @@ -1,16 +1,30 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, ValidationPipe,UsePipes, Query } from '@nestjs/common'; +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + ValidationPipe, + UsePipes, + Query, +} from '@nestjs/common'; import { UsuariosService } from './usuarios.service'; import { CreateUsuarioDto } from './dto/create-usuario.dto'; import { UpdateUsuarioDto } from './dto/update-usuario.dto'; import { ApiTags } from '@nestjs/swagger'; -import { response as res } from "express"; +import { response as res } from 'express'; @ApiTags('usuarios') @Controller('usuarios') export class UsuariosController { constructor(private readonly usuariosService: UsuariosService) {} @Get('paginate') - async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { + async findAllWithPagination( + @Query('page') page: number, + @Query('perPage') perPage: number, + ) { page = page; perPage = perPage; const totalcount = await this.usuariosService.countAll(); @@ -22,6 +36,7 @@ export class UsuariosController { countAll() { return this.usuariosService.countAll(); } + @UsePipes(ValidationPipe) @Post() create(@Body() createUsuarioDto: CreateUsuarioDto) { @@ -38,6 +53,7 @@ export class UsuariosController { return this.usuariosService.findOne(+id); } + @UsePipes(ValidationPipe) @Patch(':id') update(@Param('id') id: string, @Body() updateUsuarioDto: UpdateUsuarioDto) { return this.usuariosService.update(+id, updateUsuarioDto); From 11406b344110fd9d63094db3c100b24ef87d5b95 Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Sun, 29 Oct 2023 21:04:25 -0300 Subject: [PATCH 003/115] =?UTF-8?q?Or=C3=A7amento=20pedido=20corrigido?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../categorias/categorias.controller.ts | 24 +++++----- src/modules/categorias/categorias.service.ts | 29 ++++++++++-- .../orcamentos/dto/create-orcamento.dto.ts | 4 +- .../orcamentos/dto/update-orcamento.dto.ts | 4 +- .../orcamentos/entities/orcamento.entity.ts | 4 +- src/modules/orcamentos/orcamentos.service.ts | 46 +++++++++++++------ src/modules/pedidos/pedidos.service.ts | 2 + src/modules/produtos/produtos.controller.ts | 31 ++++--------- 8 files changed, 82 insertions(+), 62 deletions(-) diff --git a/src/modules/categorias/categorias.controller.ts b/src/modules/categorias/categorias.controller.ts index 3b4d9c4..f1ed03a 100644 --- a/src/modules/categorias/categorias.controller.ts +++ b/src/modules/categorias/categorias.controller.ts @@ -17,22 +17,11 @@ import { UpdateCategoriaDto } from './dto/update-categoria.dto'; import { ApiTags } from '@nestjs/swagger'; import { response as res } from 'express'; - @ApiTags('categorias') @Controller('categorias') export class CategoriasController { constructor(private readonly categoriasService: CategoriasService) {} - @Get('paginate') - async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { - page = page; - perPage = perPage; - const totalcount = await this.categoriasService.countAllCategorias(); - - res.set('x-total-count', totalcount.toString()); - return await this.categoriasService.findAllWithPagination(page, Number(perPage)); -} - @Get('count') countAll() { return this.categoriasService.countAllCategorias(); @@ -44,9 +33,18 @@ export class CategoriasController { } @Get() - findAll() { - return this.categoriasService.findAll(); + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,) { + page = page; + perPage = perPage; + const totalcount = await this.categoriasService.countAllCategorias(); + + res.set('x-total-count', totalcount.toString()); + return await this.categoriasService.findAllWithPagination( + page, + Number(perPage), + ); } + @Get(':id') async findOne(@Param('id') id: string) { return await this.categoriasService.findOne(+id); diff --git a/src/modules/categorias/categorias.service.ts b/src/modules/categorias/categorias.service.ts index a7db691..38bd656 100644 --- a/src/modules/categorias/categorias.service.ts +++ b/src/modules/categorias/categorias.service.ts @@ -52,13 +52,32 @@ export class CategoriasService { } async update(id: number, updateCategoriaDto: UpdateCategoriaDto) { - return await this.prismaService.categoria.update({ - where: { id }, - data: updateCategoriaDto, - }); + const categoriaExists = await this.findOne(id); + if (categoriaExists) { + const categoriaRepeated = await this.prismaService.categoria.findFirst({ + where: { + titulo: updateCategoriaDto.titulo, + NOT: { + id: id, + }, + }, + }); + if (!categoriaRepeated) { + return await this.prismaService.categoria.update({ + where: { id }, + data: updateCategoriaDto, + }); + } + return { data: { message: 'Categoria com titulo repetido' } }; + } + return { data: { message: 'Categoria não existe' } }; } async remove(id: number) { - return await this.prismaService.categoria.delete({ where: { id } }); + const categoria = await this.findOne(id); + if (categoria) { + return await this.prismaService.categoria.delete({ where: { id } }); + } + return { data: { message: 'Categoria não existe' } }; } } diff --git a/src/modules/orcamentos/dto/create-orcamento.dto.ts b/src/modules/orcamentos/dto/create-orcamento.dto.ts index 889cbe5..1c30572 100644 --- a/src/modules/orcamentos/dto/create-orcamento.dto.ts +++ b/src/modules/orcamentos/dto/create-orcamento.dto.ts @@ -1,7 +1,7 @@ import { ApiProperty } from '@nestjs/swagger'; import { status as Status } from '@prisma/client'; import { - IsDate, + IsDateString, IsEnum, IsNotEmpty, IsNumber, @@ -16,7 +16,7 @@ export class CreateOrcamentoDto { example: '2023-10-23T17:30:44.382Z', }) @ValidateIf((object, value) => value !== undefined) - @IsDate({ message: 'A validade inserida não é válida' }) + @IsDateString({},{ message: 'A validade inserida não é válida' }) validade?: Date; @ApiProperty({ diff --git a/src/modules/orcamentos/dto/update-orcamento.dto.ts b/src/modules/orcamentos/dto/update-orcamento.dto.ts index f6a438a..03ba5bb 100644 --- a/src/modules/orcamentos/dto/update-orcamento.dto.ts +++ b/src/modules/orcamentos/dto/update-orcamento.dto.ts @@ -3,7 +3,7 @@ import { CreateOrcamentoDto } from './create-orcamento.dto'; import { status as Status } from '@prisma/client'; import { ApiProperty } from '@nestjs/swagger'; import { - IsDate, + IsDateString, IsEnum, IsNotEmpty, IsNumber, @@ -18,7 +18,7 @@ export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { example: '2023-10-23T17:30:44.382Z', }) @ValidateIf((object, value) => value !== undefined) - @IsDate({ message: 'A validade inserida não é válida' }) + @IsDateString({},{ message: 'A validade inserida não é válida' }) validade?: Date; @ApiProperty({ diff --git a/src/modules/orcamentos/entities/orcamento.entity.ts b/src/modules/orcamentos/entities/orcamento.entity.ts index 4d11698..886e539 100644 --- a/src/modules/orcamentos/entities/orcamento.entity.ts +++ b/src/modules/orcamentos/entities/orcamento.entity.ts @@ -2,7 +2,7 @@ import { Cliente } from 'src/modules/clientes/entities/cliente.entity'; import { Produto } from 'src/modules/produtos/entities/produto.entity'; import { status } from '@prisma/client'; import { - IsDate, + IsDateString, IsEnum, IsNotEmpty, IsNumber, @@ -13,7 +13,7 @@ import { export class Orcamento { id: Number; @ValidateIf((object, value) => value !== undefined) - @IsDate({ message: 'A validade inserida não é válida' }) + @IsDateString({},{ message: 'A validade inserida não é válida' }) validade?: Date; dataOrcamento: Date; @ValidateIf((object, value) => value !== undefined) diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index 2d31b64..313cba1 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -6,7 +6,10 @@ import { ProdutosService } from '../produtos/produtos.service'; @Injectable() export class OrcamentosService { - constructor(private readonly prismaService: PrismaService, private readonly produtoService: ProdutosService) {} + constructor( + private readonly prismaService: PrismaService, + private readonly produtoService: ProdutosService, + ) {} async countAll() { return await this.prismaService.cliente.count({}); } @@ -18,10 +21,10 @@ export class OrcamentosService { async findAllWithPagination(page: number, perPage: number) { const skip = (page - 1) * perPage; const orcamentos = await this.prismaService.orcamento.findMany({ - skip, - take: perPage, - }); - return { orcamentos }; + skip, + take: perPage, + }); + return { orcamentos }; } async create(createOrcamentoDto: CreateOrcamentoDto) { @@ -47,16 +50,29 @@ export class OrcamentosService { } async update(id: number, updateOrcamentoDto: UpdateOrcamentoDto) { - const orcamento = await this.prismaService.orcamento.update({ - where: { id }, - data: updateOrcamentoDto, - }); - - if (orcamento) { - return orcamento; + const orcamentoExists = await this.findOne(id); + if (orcamentoExists) { + const clienteExists = await this.findCliente( + updateOrcamentoDto.idCliente, + ); + if (clienteExists) { + if (orcamentoExists.status === 'Concluido') { + return await this.prismaService.orcamento.update({ + where: { id }, + data: { + status: updateOrcamentoDto.status, + }, + }); + } + console.log(orcamentoExists.status); + return await this.prismaService.orcamento.update({ + where: { id }, + data: updateOrcamentoDto, + }); + } + return { data: { message: 'Cliente não existe' } }; } - - return { data: { message: 'Ocorreu um erro ao atualizar o orcamento' } }; + return { data: { message: 'Orçamento não existe' } }; } async remove(id: number) { @@ -66,7 +82,7 @@ export class OrcamentosService { }, }); for (const produto of produtos) { - await this.produtoService.remove(produto.id) + await this.produtoService.remove(produto.id); } const removeOrcamento = await this.prismaService.orcamento.delete({ where: { id }, diff --git a/src/modules/pedidos/pedidos.service.ts b/src/modules/pedidos/pedidos.service.ts index 33dbdd7..e402d02 100644 --- a/src/modules/pedidos/pedidos.service.ts +++ b/src/modules/pedidos/pedidos.service.ts @@ -32,7 +32,9 @@ export class PedidosService { data: createPedidoDto, }); } + return {data: { message: 'Pedido já existe'}} } + return {data: { message: 'Orçamento ainda não foi concluido'}} } async findAll() { diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index b1a9266..19f33ac 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -1,15 +1,4 @@ -import { - Controller, - Get, - Post, - Body, - Patch, - Param, - Delete, - UsePipes, - ValidationPipe, - Query, -} from '@nestjs/common'; +import { Controller, Get, Post, Body, Patch, Param, Delete, UsePipes, ValidationPipe, Query } from '@nestjs/common'; import { ProdutosService } from './produtos.service'; import { CreateProdutoDto } from './dto/create-produto.dto'; import { UpdateProdutoDto } from './dto/update-produto.dto'; @@ -21,10 +10,7 @@ export class ProdutosController { constructor(private readonly produtosService: ProdutosService) {} @Get('paginate') - async findAllWithPagination( - @Query('page') page: number, - @Query('perPage') perPage: number, - ) { + async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { page = page; perPage = perPage; const totalcount = await this.produtosService.countAll(); @@ -32,7 +18,7 @@ export class ProdutosController { return await this.produtosService.findAllWithPagination(page, perPage); } @Get('count') - countAll() { + countAll(){ return this.produtosService.countAll(); } @@ -43,20 +29,19 @@ export class ProdutosController { } @Post(':idProdBase/:idOrc') - createProdFromBase( - @Param('idProdBase') idProdBase: number, - @Param('idOrc') idOrc: number, - ) { + createProdFromBase(@Param('idProdBase') idProdBase: number, @Param('idOrc') idOrc: number) { return this.produtosService.pullProdBase(+idProdBase, +idOrc); } @Get('prodOrc/:id') - findProdutoOrc(@Param('id') id: number) { + findProdutoOrc(@Param('id') id: number) + { return this.produtosService.findProdutoOrc(+id); } @Get(':busca') - findManyByTitle(@Param('titulo') buscaparam: string) { + findManyByTitle(@Param('titulo') buscaparam: string) + { return this.produtosService.findManyByTitle(buscaparam); } From 9a1229457077a085b5107995203ffd05ab58501d Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Mon, 30 Oct 2023 14:13:59 -0300 Subject: [PATCH 004/115] =?UTF-8?q?subindo=20altera=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 1 + .../dto/create-insumo-produtos-base.dto.ts | 2 ++ .../dto/update-insumo-produtos-base.dto.ts | 2 ++ src/modules/produtos/produtos.controller.ts | 3 ++- src/modules/produtos/produtos.service.ts | 8 +++++++- 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 28aaf1a..694ea48 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -195,6 +195,7 @@ model InsumoProdutoBase { quantidade Float @default(1) idProdutoBase Int idInsumo Int + unidade String produtoBase ProdutoBase? @relation(fields: [idProdutoBase], references: [id]) insumos Insumo? @relation(fields: [idInsumo], references: [id]) createdAt DateTime @default(now()) diff --git a/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts b/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts index d6a9b3a..8198c42 100644 --- a/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts +++ b/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts @@ -21,4 +21,6 @@ export class CreateInsumosProdutosBaseDto { example: '1', }) idInsumo: number; + + unidade:string; } diff --git a/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts b/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts index aa0ce13..ad6c87e 100644 --- a/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts +++ b/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts @@ -25,4 +25,6 @@ export class UpdateInsumosProdutosBaseDto extends PartialType( example: '1', }) idInsumo?: number; + + unidade?: string; } diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index 3c7fb22..5147629 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -20,9 +20,10 @@ import { addProdutoBaseDto } from './dto/addProdutoBase.dto'; @Controller('produtos') export class ProdutosController { constructor(private readonly produtosService: ProdutosService) {} - + @Post('addProdutoBase') createProdFromBase(@Body() addProdutoBaseDto: addProdutoBaseDto) { + console.log('Entrou no controller'); return this.produtosService.pullProdBase(addProdutoBaseDto); } diff --git a/src/modules/produtos/produtos.service.ts b/src/modules/produtos/produtos.service.ts index 5bbcd13..47c1196 100644 --- a/src/modules/produtos/produtos.service.ts +++ b/src/modules/produtos/produtos.service.ts @@ -84,10 +84,12 @@ export class ProdutosService { } async pullProdBase(addProdutoBaseDto: addProdutoBaseDto) { + console.log("banana2") const prodBase = await this.produtosBaseService.findOne( addProdutoBaseDto.id, ); + console.log("banana1") const insumosBase = await this.insumosProdutosBaseService.findInsumoProdBase( addProdutoBaseDto.id, @@ -101,13 +103,17 @@ export class ProdutosService { quantidade: addProdutoBaseDto.quantidade, }, }); - + + console.log("banana") + for (const insumoBase of insumosBase) { + await this.prismaService.listaInsumo.create({ data: { quantidade: insumoBase.quantidade, idInsumo: insumoBase.idInsumo, idProduto: copyProd.id, + unidade: insumoBase.unidade, }, }); } From 02f7a5cbda90dbd310ecf459ee4bcdfdfe380c07 Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Mon, 30 Oct 2023 17:40:29 -0300 Subject: [PATCH 005/115] =?UTF-8?q?Valida=C3=A7=C3=B5es=20parcialmente=20f?= =?UTF-8?q?eitas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 2 +- src/modules/categorias/categorias.service.ts | 4 +- src/modules/clientes/clientes.service.ts | 117 ++++++++++++++---- src/modules/cotacoes/cotacoes.service.ts | 24 +++- .../cotacoes/dto/create-cotacao.dto.ts | 13 +- .../cotacoes/dto/update-cotacao.dto.ts | 11 +- .../cotacoes/entities/cotacao.entity.ts | 4 +- .../fornecedores/dto/create-fornecedor.dto.ts | 1 - .../fornecedores/dto/update-fornecedor.dto.ts | 1 - .../fornecedores/fornecedores.service.ts | 93 ++++++++++++-- .../lista-insumos/lista-insumos.controller.ts | 8 +- .../lista-insumos/lista-insumos.service.ts | 27 +++- src/modules/orcamentos/orcamentos.service.ts | 27 ++-- .../usuarios/dto/create-usuario.dto.ts | 1 - .../usuarios/dto/update-usuario.dto.ts | 1 - 15 files changed, 259 insertions(+), 75 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index a5aef3c..e81efa4 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -51,7 +51,7 @@ model Fornecedor { nome String? cpf String? @unique rg String? @unique - nomeFantasia String? @unique + nomeFantasia String? razaoSocial String? @unique cnpj String? @unique cotacaos Cotacao[] diff --git a/src/modules/categorias/categorias.service.ts b/src/modules/categorias/categorias.service.ts index 38bd656..1cb912a 100644 --- a/src/modules/categorias/categorias.service.ts +++ b/src/modules/categorias/categorias.service.ts @@ -74,8 +74,8 @@ export class CategoriasService { } async remove(id: number) { - const categoria = await this.findOne(id); - if (categoria) { + const categoriaExists = await this.findOne(id); + if (categoriaExists) { return await this.prismaService.categoria.delete({ where: { id } }); } return { data: { message: 'Categoria não existe' } }; diff --git a/src/modules/clientes/clientes.service.ts b/src/modules/clientes/clientes.service.ts index f383aa1..02f683f 100644 --- a/src/modules/clientes/clientes.service.ts +++ b/src/modules/clientes/clientes.service.ts @@ -10,26 +10,72 @@ export class ClientesService { async findAllWithPagination(page: number, perPage: number) { const skip = (page - 1) * perPage; const clientes = await this.prismaService.cliente.findMany({ - skip, - take: perPage, - }); - return { clientes}; - } - - async findOneByCliente(nome: string, email: string, telefone: string) { - return await this.prismaService.cliente.findFirst({ - where: { nome, email, telefone }, + skip, + take: perPage, }); + return { clientes }; } + async findExistingCliente(id: number, termo: string) { + const emailExists = await this.prismaService.cliente.findUnique({ + where: { + email: termo, + NOT: { + id: id, + }, + }, + }); + const cpfExists = await this.prismaService.cliente.findUnique({ + where: { + cpf: termo, + NOT: { + id: id, + }, + }, + }); + const rgExists = await this.prismaService.cliente.findUnique({ + where: { + rg: termo, + NOT: { + id: id, + }, + }, + }); + const cnpjExists = await this.prismaService.cliente.findUnique({ + where: { + cnpj: termo, + NOT: { + id: id, + }, + }, + }); + const razaoExists = await this.prismaService.cliente.findUnique({ + where: { + razaoSocial: termo, + NOT: { + id: id, + }, + }, + }); + if ( + !emailExists && + !cpfExists && + !rgExists && + !cnpjExists && + !razaoExists + ) { + return await 0; + } + return await 1; + } async findManyCliente(termo: string) { return await this.prismaService.cliente.findMany({ where: { OR: [ - {nome: {contains: termo}}, - {email: {contains: termo}}, - {telefone: {contains: termo}}, + { nome: { contains: termo } }, + { email: { contains: termo } }, + { telefone: { contains: termo } }, ], }, }); @@ -40,17 +86,19 @@ export class ClientesService { } async create(createClienteDto: CreateClienteDto) { - const cliente = await this.findOneByCliente( - createClienteDto.nome, - createClienteDto.email, - createClienteDto.telefone, - ); - if (!cliente) { + if ( + !(await this.findExistingCliente(undefined, createClienteDto.email)) && + !(await this.findExistingCliente(undefined, createClienteDto.cpf)) && + !(await this.findExistingCliente(undefined, createClienteDto.rg)) && + !(await this.findExistingCliente(undefined, createClienteDto.cnpj)) && + !(await this.findExistingCliente(undefined, createClienteDto.razaoSocial)) + ) { return await this.prismaService.cliente.create({ data: createClienteDto, }); } - return { data: { message: 'Cliente ja cadastrado' } }; + + return { data: { message: 'cliente com dados repetidos' } }; } async findAll() { @@ -62,13 +110,30 @@ export class ClientesService { } async update(id: number, updateClienteDto: UpdateClienteDto) { - return await this.prismaService.cliente.update({ - where: { id }, - data: updateClienteDto, - }); + const clienteExists = await this.findOne(id); + if (clienteExists) { + if ( + !(await this.findExistingCliente(clienteExists.id, updateClienteDto.email)) && + !(await this.findExistingCliente(clienteExists.id, updateClienteDto.cpf)) && + !(await this.findExistingCliente(clienteExists.id, updateClienteDto.rg)) && + !(await this.findExistingCliente(clienteExists.id, updateClienteDto.cnpj)) && + !(await this.findExistingCliente(clienteExists.id, updateClienteDto.razaoSocial)) + ) { + return await this.prismaService.cliente.update({ + where: { id }, + data: updateClienteDto, + }); + } + return { data: { message: 'cliente com dados repetidos' } }; + } + return { data: { message: 'cliente não existe' } }; } - + async remove(id: number) { - return await this.prismaService.cliente.delete({ where: { id } }); + const clienteExists = await this.findOne(id); + if (clienteExists) { + return await this.prismaService.cliente.delete({ where: { id } }); + } + return { data: { message: 'cliente não existe' } }; } -} +} diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index 23456c3..dedba79 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -10,18 +10,30 @@ export class CotacoesService { async findAllWithPagination(page: number, perPage: number) { const skip = (page - 1) * perPage; const cotacoes = await this.prismaService.cotacao.findMany({ - skip, - take: perPage, - }); - return { cotacoes }; + skip, + take: perPage, + }); + return { cotacoes }; } async countAllCotacaos() { return await this.prismaService.cotacao.count({}); } async create(createCotacaoDto: CreateCotacaoDto) { - return await this.prismaService.cotacao.create({ - data: createCotacaoDto, + const fornecedorExists = await this.prismaService.fornecedor.findFirst({ + where: { id: createCotacaoDto.idFornecedor }, }); + if (fornecedorExists) { + const insumoExists = await this.prismaService.insumo.findFirst({ + where: { id: createCotacaoDto.idInsumo }, + }); + if (insumoExists) { + return await this.prismaService.cotacao.create({ + data: createCotacaoDto, + }); + } + return { data: { message: 'Insumo não existe' } } + } + return { data: { message: 'Fornecedor não existe' } }; } async findAll() { diff --git a/src/modules/cotacoes/dto/create-cotacao.dto.ts b/src/modules/cotacoes/dto/create-cotacao.dto.ts index 99952d5..a777eeb 100644 --- a/src/modules/cotacoes/dto/create-cotacao.dto.ts +++ b/src/modules/cotacoes/dto/create-cotacao.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsDate, IsNotEmpty, IsNumber, IsString } from 'class-validator'; +import { IsDateString, IsNotEmpty, IsNumber, IsString } from 'class-validator'; export class CreateCotacaoDto { @ApiProperty({ @@ -8,7 +8,7 @@ export class CreateCotacaoDto { example: '2023-10-23T17:30:44.382Z', }) @IsNotEmpty({ message: 'A data não pode estar vazia' }) - @IsDate({ message: 'A data inserida não é válida' }) + @IsDateString({},{ message: 'A data inserida não é válida' }) data: Date; @ApiProperty({ @@ -23,7 +23,7 @@ export class CreateCotacaoDto { @ApiProperty({ description: 'O id do fornecedor serve para descrever com qual fornecedor foi realizada a cotação', - example: 'NK Serralheria', + example: '1', }) @IsNumber({}, { message: 'O fornecedor inserido não é válido' }) @IsNotEmpty({ message: 'O fornecedor não pode estar vazio' }) @@ -37,7 +37,12 @@ export class CreateCotacaoDto { @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) @IsNumber({}, { message: 'O insumo inserido não é válido' }) idInsumo: number; - + + @ApiProperty({ + description: + 'A unidade serve para descrever as dimensões do insumo', + example: '1M', + }) @IsNotEmpty({ message: 'A unidade não pode estar vazia' }) @IsString({ message: 'A unidade inserida não é válida' }) unidade: string; diff --git a/src/modules/cotacoes/dto/update-cotacao.dto.ts b/src/modules/cotacoes/dto/update-cotacao.dto.ts index 4ae51e7..e145347 100644 --- a/src/modules/cotacoes/dto/update-cotacao.dto.ts +++ b/src/modules/cotacoes/dto/update-cotacao.dto.ts @@ -1,7 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateCotacaoDto } from './create-cotacao.dto'; import { ApiProperty } from '@nestjs/swagger'; -import { IsDate, IsNotEmpty, IsNumber, IsString } from 'class-validator'; +import { IsDateString, IsNotEmpty, IsNumber, IsString } from 'class-validator'; export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { @ApiProperty({ @@ -10,7 +10,7 @@ export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { example: '2023-10-23T17:30:44.382Z', }) @IsNotEmpty({ message: 'A data não pode estar vazia' }) - @IsDate({ message: 'A data inserida não é válida' }) + @IsDateString({},{ message: 'A data inserida não é válida' }) data?: Date; @ApiProperty({ @@ -25,7 +25,7 @@ export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { @ApiProperty({ description: 'O id do fornecedor serve para descrever com qual fornecedor foi realizada a cotação', - example: 'NK Serralheria', + example: '1', }) @IsNumber({}, { message: 'O fornecedor inserido não é válido' }) @IsNotEmpty({ message: 'O fornecedor não pode estar vazio' }) @@ -40,6 +40,11 @@ export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { @IsNumber({}, { message: 'O insumo inserido não é válido' }) idInsumo?: number; + @ApiProperty({ + description: + 'A unidade serve para descrever as dimensões do insumo', + example: '1M', + }) @IsNotEmpty({ message: 'A unidade não pode estar vazia' }) @IsString({ message: 'A unidade inserida não é válida' }) unidade?: string; diff --git a/src/modules/cotacoes/entities/cotacao.entity.ts b/src/modules/cotacoes/entities/cotacao.entity.ts index bd36cc6..29257f3 100644 --- a/src/modules/cotacoes/entities/cotacao.entity.ts +++ b/src/modules/cotacoes/entities/cotacao.entity.ts @@ -1,9 +1,9 @@ -import { IsDate, IsNotEmpty, IsNumber, IsString } from 'class-validator'; +import { IsDateString, IsNotEmpty, IsNumber, IsString } from 'class-validator'; export class Cotacao { id: number; @IsNotEmpty({ message: 'A data não pode estar vazia' }) - @IsDate({ message: 'A data inserida não é válida' }) + @IsDateString({},{ message: 'A data inserida não é válida' }) data: Date; @IsNotEmpty({ message: 'O valor não pode estar vazio' }) @IsNumber({}, { message: 'O valor inserido não é válido' }) diff --git a/src/modules/fornecedores/dto/create-fornecedor.dto.ts b/src/modules/fornecedores/dto/create-fornecedor.dto.ts index bec4e40..7e6989f 100644 --- a/src/modules/fornecedores/dto/create-fornecedor.dto.ts +++ b/src/modules/fornecedores/dto/create-fornecedor.dto.ts @@ -37,7 +37,6 @@ export class CreateFornecedorDto { }) @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome inserido não é válido' }) - @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; @ApiProperty({ diff --git a/src/modules/fornecedores/dto/update-fornecedor.dto.ts b/src/modules/fornecedores/dto/update-fornecedor.dto.ts index c3aaff4..494edbd 100644 --- a/src/modules/fornecedores/dto/update-fornecedor.dto.ts +++ b/src/modules/fornecedores/dto/update-fornecedor.dto.ts @@ -39,7 +39,6 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { }) @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome inserido não é válido' }) - @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; @ApiProperty({ diff --git a/src/modules/fornecedores/fornecedores.service.ts b/src/modules/fornecedores/fornecedores.service.ts index 5a143ee..a7446ac 100644 --- a/src/modules/fornecedores/fornecedores.service.ts +++ b/src/modules/fornecedores/fornecedores.service.ts @@ -30,14 +30,74 @@ export class FornecedoresService { return await this.prismaService.fornecedor.count({ }); } + + async findExistingFornecedor(id: number, termo: string) { + const emailExists = await this.prismaService.fornecedor.findUnique({ + where: { + email: termo, + NOT: { + id: id, + }, + }, + }); + const cpfExists = await this.prismaService.fornecedor.findUnique({ + where: { + cpf: termo, + NOT: { + id: id, + }, + }, + }); + const rgExists = await this.prismaService.fornecedor.findUnique({ + where: { + rg: termo, + NOT: { + id: id, + }, + }, + }); + const cnpjExists = await this.prismaService.fornecedor.findUnique({ + where: { + cnpj: termo, + NOT: { + id: id, + }, + }, + }); + const razaoExists = await this.prismaService.fornecedor.findUnique({ + where: { + razaoSocial: termo, + NOT: { + id: id, + }, + }, + }); + if ( + !emailExists && + !cpfExists && + !rgExists && + !cnpjExists && + !razaoExists + ) { + return await 0; + } + return await 1; + } + async create(createFornecedoresDto: CreateFornecedorDto) { - const cliente = await this.findOneByFornecedor(createFornecedoresDto.nome,createFornecedoresDto.email,createFornecedoresDto.telefone); - if (!cliente) { + if ( + !(await this.findExistingFornecedor(undefined, createFornecedoresDto.email)) && + !(await this.findExistingFornecedor(undefined, createFornecedoresDto.cpf)) && + !(await this.findExistingFornecedor(undefined, createFornecedoresDto.rg)) && + !(await this.findExistingFornecedor(undefined, createFornecedoresDto.cnpj)) && + !(await this.findExistingFornecedor(undefined, createFornecedoresDto.razaoSocial)) + ) { return await this.prismaService.fornecedor.create({ data: createFornecedoresDto, }); } - return { data: { message: 'Cliente ja cadastrado' } }; + + return { data: { message: 'fornecedor com dados repetidos' } }; } async findAll() { @@ -49,13 +109,30 @@ export class FornecedoresService { } async update(id: number, updateFornecedoresDto: UpdateFornecedorDto) { - return await this.prismaService.fornecedor.update({ - where: {id}, - data: updateFornecedoresDto, - }) + const fornecedorExists = await this.findOne(id); + if (fornecedorExists) { + if ( + !(await this.findExistingFornecedor(fornecedorExists.id, updateFornecedoresDto.email)) && + !(await this.findExistingFornecedor(fornecedorExists.id, updateFornecedoresDto.cpf)) && + !(await this.findExistingFornecedor(fornecedorExists.id, updateFornecedoresDto.rg)) && + !(await this.findExistingFornecedor(fornecedorExists.id, updateFornecedoresDto.cnpj)) && + !(await this.findExistingFornecedor(fornecedorExists.id, updateFornecedoresDto.razaoSocial)) + ) { + return await this.prismaService.fornecedor.update({ + where: { id }, + data: updateFornecedoresDto, + }); + } + return { data: { message: 'fornecedor com dados repetidos' } }; + } + return { data: { message: 'fornecedor não existe' } }; } async remove(id: number) { - return await this.prismaService.fornecedor.delete({where: {id}}) + const fornecedorExists = await this.findOne(id); + if (fornecedorExists) { + return await this.prismaService.fornecedor.delete({ where: { id } }); + } + return { data: { message: 'fornecedor não existe' } }; } } diff --git a/src/modules/lista-insumos/lista-insumos.controller.ts b/src/modules/lista-insumos/lista-insumos.controller.ts index 237f978..6e5ed78 100644 --- a/src/modules/lista-insumos/lista-insumos.controller.ts +++ b/src/modules/lista-insumos/lista-insumos.controller.ts @@ -13,7 +13,7 @@ import { import { ListaInsumosService } from './lista-insumos.service'; import { CreateListaInsumoDto } from './dto/create-lista-insumo.dto'; import { UpdateListaInsumoDto } from './dto/update-lista-insumo.dto'; -import { ApiTags } from '@nestjs/swagger'; +import { ApiBody, ApiTags } from '@nestjs/swagger'; import { response as res } from 'express'; @ApiTags('lista-insumos') @@ -39,6 +39,12 @@ export class ListaInsumosController { return this.listaInsumosService.create(createListaInsumoDto); } + @Post(':id/cotar') + @ApiBody({}) + AttachCotacao(@Param('id') idListaInsumo: number, @Body() requestBody: { idCot: number }) { + return this.listaInsumosService.AttachCotacao(+idListaInsumo, +requestBody.idCot); + } + @Get() findAll() { return this.listaInsumosService.findAll(); diff --git a/src/modules/lista-insumos/lista-insumos.service.ts b/src/modules/lista-insumos/lista-insumos.service.ts index ab90037..7d7c7ec 100644 --- a/src/modules/lista-insumos/lista-insumos.service.ts +++ b/src/modules/lista-insumos/lista-insumos.service.ts @@ -10,23 +10,38 @@ export class ListaInsumosService { async findAllWithPagination(page: number, perPage: number) { const skip = (page - 1) * perPage; const listaInsumos = await this.prismaService.listaInsumo.findMany({ - skip, - take: perPage, - }); + skip, + take: perPage, + }); - return { listaInsumos }; + return { listaInsumos }; } - async countAll(){ + async countAll() { return await this.prismaService.insumoProdutoBase.count(); } - + async create(createListaInsumoDto: CreateListaInsumoDto) { return await this.prismaService.listaInsumo.create({ data: createListaInsumoDto, }); } + async AttachCotacao(idItemListaInsumo: number, idCotacao: number) { + const listaInsumo = await this.findOne(idItemListaInsumo); + if (listaInsumo) { + listaInsumo.idCotacao = idCotacao; + + return { + data: { + idItemlistaInsumo: listaInsumo.id, + idCotacao: listaInsumo.idCotacao, + }, + }; + } + return { data: { message: 'O insumo da lista não existe' } }; + } + async findInsumoProd(id: number) { const listaInsumosProd = await this.prismaService.listaInsumo.findMany({ where: { diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index 313cba1..f5b0cdf 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -64,7 +64,6 @@ export class OrcamentosService { }, }); } - console.log(orcamentoExists.status); return await this.prismaService.orcamento.update({ where: { id }, data: updateOrcamentoDto, @@ -76,17 +75,21 @@ export class OrcamentosService { } async remove(id: number) { - const produtos = await this.prismaService.produto.findMany({ - where: { - orcamentoId: id, - }, - }); - for (const produto of produtos) { - await this.produtoService.remove(produto.id); + const orcamentoExists = await this.findOne(id); + if (orcamentoExists) { + const produtos = await this.prismaService.produto.findMany({ + where: { + orcamentoId: id, + }, + }); + for (const produto of produtos) { + await this.produtoService.remove(produto.id); + } + const removeOrcamento = await this.prismaService.orcamento.delete({ + where: { id }, + }); + return { removeOrcamento }; } - const removeOrcamento = await this.prismaService.orcamento.delete({ - where: { id }, - }); - return { removeOrcamento }; + return { data: { message: 'Orçamento não existe' } }; } } diff --git a/src/modules/usuarios/dto/create-usuario.dto.ts b/src/modules/usuarios/dto/create-usuario.dto.ts index 4b2b3f2..9613279 100644 --- a/src/modules/usuarios/dto/create-usuario.dto.ts +++ b/src/modules/usuarios/dto/create-usuario.dto.ts @@ -19,7 +19,6 @@ export class CreateUsuarioDto { }) @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome inserido não é válido' }) - @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome: string; @ApiProperty({ diff --git a/src/modules/usuarios/dto/update-usuario.dto.ts b/src/modules/usuarios/dto/update-usuario.dto.ts index 5716c7d..cf24d72 100644 --- a/src/modules/usuarios/dto/update-usuario.dto.ts +++ b/src/modules/usuarios/dto/update-usuario.dto.ts @@ -21,7 +21,6 @@ export class UpdateUsuarioDto extends PartialType(CreateUsuarioDto) { }) @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome inserido não é válido' }) - @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; @ApiProperty({ From 512511bcbc29f01bc7b616f02e3ed8bbf22f8862 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Mon, 30 Oct 2023 20:40:01 -0300 Subject: [PATCH 006/115] =?UTF-8?q?Subindo=20fun=C3=A7=C3=A3o=20selecionar?= =?UTF-8?q?=20cota=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 1 + .../dto/create-lista-insumo.dto.ts | 7 ++++ .../dto/update-lista-insumo.dto.ts | 7 ++++ .../entities/lista-insumo.entity.ts | 1 + .../lista-insumos/lista-insumos.controller.ts | 8 +++- .../lista-insumos/lista-insumos.module.ts | 3 +- .../lista-insumos/lista-insumos.service.ts | 37 +++++++++++++++---- 7 files changed, 55 insertions(+), 9 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 694ea48..0878cb4 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -155,6 +155,7 @@ model ListaInsumo { idInsumo Int idCotacao Int? unidade String? + valorUnitario Float? produto Produto? @relation(fields: [idProduto], references: [id]) insumo Insumo? @relation(fields: [idInsumo], references: [id]) cotacao Cotacao? @relation(fields: [idCotacao], references: [id]) diff --git a/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts b/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts index 504fb4f..47efe9e 100644 --- a/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts +++ b/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts @@ -32,4 +32,11 @@ export class CreateListaInsumoDto { idCotacao?: number; unidade?: string; + + @ApiProperty({ + description: + 'O valor unitario serve para descrever qual é o valor do insumo', + example: '100,00', + }) + valorUnitario?: number; } diff --git a/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts b/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts index f99cd59..03e124d 100644 --- a/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts +++ b/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts @@ -34,4 +34,11 @@ export class UpdateListaInsumoDto extends PartialType(CreateListaInsumoDto) { unidade?:string; + @ApiProperty({ + description: + 'O valor unitario serve para descrever qual é o valor do insumo', + example: '100,00', + }) + valorUnitario?: number; + } diff --git a/src/modules/lista-insumos/entities/lista-insumo.entity.ts b/src/modules/lista-insumos/entities/lista-insumo.entity.ts index f0dd313..6b04e72 100644 --- a/src/modules/lista-insumos/entities/lista-insumo.entity.ts +++ b/src/modules/lista-insumos/entities/lista-insumo.entity.ts @@ -9,6 +9,7 @@ export class ListaInsumo { idInsumo: number; idCotacao?: number; unidade?: string; + valorUnitario?: number; produto?: Produto; insumo?: Insumo; cotacao?: Cotacao; diff --git a/src/modules/lista-insumos/lista-insumos.controller.ts b/src/modules/lista-insumos/lista-insumos.controller.ts index 59b64a9..6dbc8ea 100644 --- a/src/modules/lista-insumos/lista-insumos.controller.ts +++ b/src/modules/lista-insumos/lista-insumos.controller.ts @@ -2,7 +2,7 @@ import { Controller, Get, Post, Body, Patch, Param, Delete, ValidationPipe, UseP import { ListaInsumosService } from './lista-insumos.service'; import { CreateListaInsumoDto } from './dto/create-lista-insumo.dto'; import { UpdateListaInsumoDto } from './dto/update-lista-insumo.dto'; -import { ApiTags } from '@nestjs/swagger'; +import { ApiBody, ApiTags } from '@nestjs/swagger'; import {response as res} from 'express'; @ApiTags('lista-insumos') @@ -51,4 +51,10 @@ export class ListaInsumosController { remove(@Param('id') id: string) { return this.listaInsumosService.remove(+id); } + + @Post(':id/cotar') + @ApiBody({}) + selectCotacao(@Param('id') idListaInsumo: number, @Body() requestBody: { idCot: number }) { + return this.listaInsumosService.selectCotacao(+idListaInsumo, +requestBody.idCot); + } } diff --git a/src/modules/lista-insumos/lista-insumos.module.ts b/src/modules/lista-insumos/lista-insumos.module.ts index 20a58c1..d35bf2d 100644 --- a/src/modules/lista-insumos/lista-insumos.module.ts +++ b/src/modules/lista-insumos/lista-insumos.module.ts @@ -2,9 +2,10 @@ import { Module } from '@nestjs/common'; import { ListaInsumosService } from './lista-insumos.service'; import { ListaInsumosController } from './lista-insumos.controller'; import { PrismaService } from 'src/databases/prisma.service'; +import { CotacoesService } from '../cotacoes/cotacoes.service'; @Module({ controllers: [ListaInsumosController], - providers: [ListaInsumosService, PrismaService], + providers: [ListaInsumosService,CotacoesService, PrismaService], }) export class ListaInsumosModule {} diff --git a/src/modules/lista-insumos/lista-insumos.service.ts b/src/modules/lista-insumos/lista-insumos.service.ts index ab90037..60aa473 100644 --- a/src/modules/lista-insumos/lista-insumos.service.ts +++ b/src/modules/lista-insumos/lista-insumos.service.ts @@ -2,25 +2,29 @@ import { Injectable } from '@nestjs/common'; import { CreateListaInsumoDto } from './dto/create-lista-insumo.dto'; import { UpdateListaInsumoDto } from './dto/update-lista-insumo.dto'; import { PrismaService } from 'src/databases/prisma.service'; +import { CotacoesService } from '../cotacoes/cotacoes.service'; @Injectable() export class ListaInsumosService { - constructor(private readonly prismaService: PrismaService) {} + constructor( + private readonly prismaService: PrismaService, + private readonly cotacaoServices: CotacoesService, + ) {} async findAllWithPagination(page: number, perPage: number) { const skip = (page - 1) * perPage; const listaInsumos = await this.prismaService.listaInsumo.findMany({ - skip, - take: perPage, - }); + skip, + take: perPage, + }); - return { listaInsumos }; + return { listaInsumos }; } - async countAll(){ + async countAll() { return await this.prismaService.insumoProdutoBase.count(); } - + async create(createListaInsumoDto: CreateListaInsumoDto) { return await this.prismaService.listaInsumo.create({ data: createListaInsumoDto, @@ -60,4 +64,23 @@ export class ListaInsumosService { async remove(id: number) { return await this.prismaService.listaInsumo.delete({ where: { id } }); } + + async selectCotacao(idListaInsumo: number, idCot: number) { + const cotacao = await this.cotacaoServices.findOne(idCot); + if (!cotacao) { + return { data: { message: 'Essa cotação não existe' } }; + } + + const lista = await this.prismaService.listaInsumo.findFirst({ + where: { id: idListaInsumo }, + }); + if (!lista == null) { + return { data: { message: 'Esse insumo não existe' } }; + } + lista.valorUnitario = cotacao.valor; + + lista.idCotacao = cotacao.id; + + return await this.update(lista.id, lista); + } } From a30be22e7d7bf49a1ee70c10c4e748fed0c1998a Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Mon, 30 Oct 2023 21:37:11 -0300 Subject: [PATCH 007/115] =?UTF-8?q?altera=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/cotacoes/cotacoes.service.ts | 2 ++ .../lista-insumos/lista-insumos.controller.ts | 25 +++++++++++++++---- .../lista-insumos/lista-insumos.service.ts | 11 +++++--- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index 23456c3..c260380 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -41,6 +41,8 @@ export class CotacoesService { } async findOne(id: number) { + + return await this.prismaService.cotacao.findFirst({ where: { id, diff --git a/src/modules/lista-insumos/lista-insumos.controller.ts b/src/modules/lista-insumos/lista-insumos.controller.ts index 6dbc8ea..42aa5fe 100644 --- a/src/modules/lista-insumos/lista-insumos.controller.ts +++ b/src/modules/lista-insumos/lista-insumos.controller.ts @@ -1,9 +1,20 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, ValidationPipe, UsePipes, Query } from '@nestjs/common'; +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + ValidationPipe, + UsePipes, + Query, +} from '@nestjs/common'; import { ListaInsumosService } from './lista-insumos.service'; import { CreateListaInsumoDto } from './dto/create-lista-insumo.dto'; import { UpdateListaInsumoDto } from './dto/update-lista-insumo.dto'; import { ApiBody, ApiTags } from '@nestjs/swagger'; -import {response as res} from 'express'; +import { response as res } from 'express'; @ApiTags('lista-insumos') @Controller('lista-insumos') @@ -11,7 +22,10 @@ export class ListaInsumosController { constructor(private readonly listaInsumosService: ListaInsumosService) {} @Get('paginate') - async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { + async findAllWithPagination( + @Query('page') page: number, + @Query('perPage') perPage: number, + ) { page = page; perPage = perPage; const totalcount = await this.listaInsumosService.countAll(); @@ -36,6 +50,7 @@ export class ListaInsumosController { @Get(':id') findOne(@Param('id') id: string) { + console.log(this.listaInsumosService.findOne(+id)) return this.listaInsumosService.findOne(+id); } @@ -54,7 +69,7 @@ export class ListaInsumosController { @Post(':id/cotar') @ApiBody({}) - selectCotacao(@Param('id') idListaInsumo: number, @Body() requestBody: { idCot: number }) { - return this.listaInsumosService.selectCotacao(+idListaInsumo, +requestBody.idCot); + selectCotacao(@Param('id') idItemListaInsumo: number, @Body() body) { + return this.listaInsumosService.selectCotacao(+idItemListaInsumo, +body.idCotacao); } } diff --git a/src/modules/lista-insumos/lista-insumos.service.ts b/src/modules/lista-insumos/lista-insumos.service.ts index 60aa473..1837ae9 100644 --- a/src/modules/lista-insumos/lista-insumos.service.ts +++ b/src/modules/lista-insumos/lista-insumos.service.ts @@ -51,6 +51,8 @@ export class ListaInsumosService { } async findOne(id: number) { + console.log(id) + console.log(this.prismaService.listaInsumo.findFirst({ where: { id } })); return await this.prismaService.listaInsumo.findFirst({ where: { id } }); } @@ -65,14 +67,17 @@ export class ListaInsumosService { return await this.prismaService.listaInsumo.delete({ where: { id } }); } - async selectCotacao(idListaInsumo: number, idCot: number) { - const cotacao = await this.cotacaoServices.findOne(idCot); + async selectCotacao(idItemListaInsumo: number, idCotacao: number) { + console.log(idItemListaInsumo, idCotacao); + const cotacao = await this.cotacaoServices.findOne(idCotacao); + + console.log(idItemListaInsumo, idCotacao); if (!cotacao) { return { data: { message: 'Essa cotação não existe' } }; } const lista = await this.prismaService.listaInsumo.findFirst({ - where: { id: idListaInsumo }, + where: { id: idItemListaInsumo }, }); if (!lista == null) { return { data: { message: 'Esse insumo não existe' } }; From b1407ebdad1c7cacd0cf95029876e8643a87e750 Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Tue, 31 Oct 2023 16:57:11 -0300 Subject: [PATCH 008/115] =?UTF-8?q?Valida=C3=A7=C3=B5es=20quase=20completa?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 4 +- src/modules/clientes/clientes.service.ts | 125 ++++++++------ src/modules/cotacoes/cotacoes.service.ts | 24 ++- .../fornecedores/fornecedores.service.ts | 157 +++++++++++------- .../insumos-produtos-base.service.ts | 72 +++++--- src/modules/insumos/insumos.service.ts | 70 ++++++-- .../lista-insumos/lista-insumos.controller.ts | 6 - .../lista-insumos/lista-insumos.service.ts | 71 +++++--- src/modules/pedidos/pedidos.service.ts | 46 +++-- .../produtos-base/produtos-base.service.ts | 44 +++-- src/modules/produtos/produtos.service.ts | 62 ++++--- .../usuarios/dto/create-usuario.dto.ts | 5 + .../usuarios/dto/update-usuario.dto.ts | 6 +- src/modules/usuarios/usuarios.service.ts | 90 +++++++--- 14 files changed, 532 insertions(+), 250 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index e81efa4..6fb44d8 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -154,8 +154,8 @@ model ListaInsumo { idProduto Int idInsumo Int idCotacao Int? - produto Produto? @relation(fields: [idProduto], references: [id]) - insumo Insumo? @relation(fields: [idInsumo], references: [id]) + produto Produto @relation(fields: [idProduto], references: [id]) + insumo Insumo @relation(fields: [idInsumo], references: [id]) cotacao Cotacao? @relation(fields: [idCotacao], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/src/modules/clientes/clientes.service.ts b/src/modules/clientes/clientes.service.ts index 02f683f..661869f 100644 --- a/src/modules/clientes/clientes.service.ts +++ b/src/modules/clientes/clientes.service.ts @@ -17,46 +17,56 @@ export class ClientesService { } async findExistingCliente(id: number, termo: string) { - const emailExists = await this.prismaService.cliente.findUnique({ - where: { - email: termo, - NOT: { - id: id, + if (!termo === undefined) { + var emailExists = await this.prismaService.cliente.findUnique({ + where: { + email: termo, + NOT: { + id: id, + }, }, - }, - }); - const cpfExists = await this.prismaService.cliente.findUnique({ - where: { - cpf: termo, - NOT: { - id: id, + }); + } + if (!termo === undefined) { + var cpfExists = await this.prismaService.cliente.findUnique({ + where: { + cpf: termo, + NOT: { + id: id, + }, }, - }, - }); - const rgExists = await this.prismaService.cliente.findUnique({ - where: { - rg: termo, - NOT: { - id: id, + }); + } + if (!termo === undefined) { + var rgExists = await this.prismaService.cliente.findUnique({ + where: { + rg: termo, + NOT: { + id: id, + }, }, - }, - }); - const cnpjExists = await this.prismaService.cliente.findUnique({ - where: { - cnpj: termo, - NOT: { - id: id, + }); + } + if (!termo === undefined) { + var cnpjExists = await this.prismaService.cliente.findUnique({ + where: { + cnpj: termo, + NOT: { + id: id, + }, }, - }, - }); - const razaoExists = await this.prismaService.cliente.findUnique({ - where: { - razaoSocial: termo, - NOT: { - id: id, + }); + } + if (!termo === undefined) { + var razaoExists = await this.prismaService.cliente.findUnique({ + where: { + razaoSocial: termo, + NOT: { + id: id, + }, }, - }, - }); + }); + } if ( !emailExists && !cpfExists && @@ -98,7 +108,7 @@ export class ClientesService { }); } - return { data: { message: 'cliente com dados repetidos' } }; + return { data: { message: 'Cliente com dados repetidos' } }; } async findAll() { @@ -113,27 +123,48 @@ export class ClientesService { const clienteExists = await this.findOne(id); if (clienteExists) { if ( - !(await this.findExistingCliente(clienteExists.id, updateClienteDto.email)) && - !(await this.findExistingCliente(clienteExists.id, updateClienteDto.cpf)) && - !(await this.findExistingCliente(clienteExists.id, updateClienteDto.rg)) && - !(await this.findExistingCliente(clienteExists.id, updateClienteDto.cnpj)) && - !(await this.findExistingCliente(clienteExists.id, updateClienteDto.razaoSocial)) + !(await this.findExistingCliente( + clienteExists.id, + updateClienteDto.email, + )) && + !(await this.findExistingCliente( + clienteExists.id, + updateClienteDto.cpf, + )) && + !(await this.findExistingCliente( + clienteExists.id, + updateClienteDto.rg, + )) && + !(await this.findExistingCliente( + clienteExists.id, + updateClienteDto.cnpj, + )) && + !(await this.findExistingCliente( + clienteExists.id, + updateClienteDto.razaoSocial, + )) ) { return await this.prismaService.cliente.update({ where: { id }, data: updateClienteDto, }); } - return { data: { message: 'cliente com dados repetidos' } }; + return { data: { message: 'Cliente com dados repetidos' } }; } - return { data: { message: 'cliente não existe' } }; + return { data: { message: 'Cliente não existe' } }; } - + async remove(id: number) { const clienteExists = await this.findOne(id); if (clienteExists) { - return await this.prismaService.cliente.delete({ where: { id } }); + const clienteOrcs = await this.prismaService.orcamento.findFirst({ + where: { idCliente: id }, + }); + if (!clienteOrcs) { + return await this.prismaService.cliente.delete({ where: { id } }); + } + return { data: { message: 'Cliente possui orçamentos' } }; } - return { data: { message: 'cliente não existe' } }; + return { data: { message: 'Cliente não existe' } }; } -} +} diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index dedba79..0c99f6b 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -61,13 +61,29 @@ export class CotacoesService { } async update(id: number, updateCotacaoDto: UpdateCotacaoDto) { - return this.prismaService.cotacao.update({ - where: { id }, - data: updateCotacaoDto, + const fornecedorExists = await this.prismaService.fornecedor.findFirst({ + where: { id: updateCotacaoDto.idFornecedor }, }); + if (fornecedorExists) { + const insumoExists = await this.prismaService.insumo.findFirst({ + where: { id: updateCotacaoDto.idInsumo }, + }); + if (insumoExists) { + return await this.prismaService.cotacao.update({ + where: { id }, + data: updateCotacaoDto, + }); + } + return { data: { message: 'Insumo não existe' } } + } + return { data: { message: 'Fornecedor não existe' } }; } async remove(id: number) { - return await this.prismaService.cotacao.delete({ where: { id } }); + const cotacaoExists = await this.findOne(id); + if (cotacaoExists) { + return await this.prismaService.cotacao.delete({ where: { id } }); + } + return { data: { message: 'Cotação não existe' } }; } } diff --git a/src/modules/fornecedores/fornecedores.service.ts b/src/modules/fornecedores/fornecedores.service.ts index a7446ac..a7a9743 100644 --- a/src/modules/fornecedores/fornecedores.service.ts +++ b/src/modules/fornecedores/fornecedores.service.ts @@ -6,72 +6,81 @@ import { PrismaService } from '../../databases/prisma.service'; @Injectable() export class FornecedoresService { constructor(private readonly prismaService: PrismaService) {} - + async findAllWithPagination(page: number, perPage: number) { const skip = (page - 1) * perPage; const fornecedores = await this.prismaService.fornecedor.findMany({ - skip, - take: perPage, - }); - return { fornecedores }; + skip, + take: perPage, + }); + return { fornecedores }; } - async findOneByFornecedor(nome: string,email: string,telefone:string) { + async findOneByFornecedor(nome: string, email: string, telefone: string) { return await this.prismaService.fornecedor.findFirst({ - where: { nome,email,telefone }, + where: { nome, email, telefone }, }); } - async findManyByFornecedor(nome: string,email: string,telefone:string){ + async findManyByFornecedor(nome: string, email: string, telefone: string) { return await this.prismaService.fornecedor.findMany({ - where: {nome,email,telefone} - }) - } - async countAllFornecedor(){ - return await this.prismaService.fornecedor.count({ + where: { nome, email, telefone }, }); } + async countAllFornecedor() { + return await this.prismaService.fornecedor.count({}); + } async findExistingFornecedor(id: number, termo: string) { - const emailExists = await this.prismaService.fornecedor.findUnique({ - where: { - email: termo, - NOT: { - id: id, + if (!termo === undefined) { + var emailExists = await this.prismaService.fornecedor.findUnique({ + where: { + email: termo, + NOT: { + id: id, + }, }, - }, - }); - const cpfExists = await this.prismaService.fornecedor.findUnique({ - where: { - cpf: termo, - NOT: { - id: id, + }); + } + if (!termo === undefined) { + var cpfExists = await this.prismaService.fornecedor.findUnique({ + where: { + cpf: termo, + NOT: { + id: id, + }, }, - }, - }); - const rgExists = await this.prismaService.fornecedor.findUnique({ - where: { - rg: termo, - NOT: { - id: id, + }); + } + if (!termo === undefined) { + var rgExists = await this.prismaService.fornecedor.findUnique({ + where: { + rg: termo, + NOT: { + id: id, + }, }, - }, - }); - const cnpjExists = await this.prismaService.fornecedor.findUnique({ - where: { - cnpj: termo, - NOT: { - id: id, + }); + } + if (!termo === undefined) { + var cnpjExists = await this.prismaService.fornecedor.findUnique({ + where: { + cnpj: termo, + NOT: { + id: id, + }, }, - }, - }); - const razaoExists = await this.prismaService.fornecedor.findUnique({ - where: { - razaoSocial: termo, - NOT: { - id: id, + }); + } + if (!termo === undefined) { + var razaoExists = await this.prismaService.fornecedor.findUnique({ + where: { + razaoSocial: termo, + NOT: { + id: id, + }, }, - }, - }); + }); + } if ( !emailExists && !cpfExists && @@ -86,11 +95,26 @@ export class FornecedoresService { async create(createFornecedoresDto: CreateFornecedorDto) { if ( - !(await this.findExistingFornecedor(undefined, createFornecedoresDto.email)) && - !(await this.findExistingFornecedor(undefined, createFornecedoresDto.cpf)) && - !(await this.findExistingFornecedor(undefined, createFornecedoresDto.rg)) && - !(await this.findExistingFornecedor(undefined, createFornecedoresDto.cnpj)) && - !(await this.findExistingFornecedor(undefined, createFornecedoresDto.razaoSocial)) + !(await this.findExistingFornecedor( + undefined, + createFornecedoresDto.email, + )) && + !(await this.findExistingFornecedor( + undefined, + createFornecedoresDto.cpf, + )) && + !(await this.findExistingFornecedor( + undefined, + createFornecedoresDto.rg, + )) && + !(await this.findExistingFornecedor( + undefined, + createFornecedoresDto.cnpj, + )) && + !(await this.findExistingFornecedor( + undefined, + createFornecedoresDto.razaoSocial, + )) ) { return await this.prismaService.fornecedor.create({ data: createFornecedoresDto, @@ -105,18 +129,33 @@ export class FornecedoresService { } async findOne(id: number) { - return await this.prismaService.fornecedor.findFirst({where: {id}}) + return await this.prismaService.fornecedor.findFirst({ where: { id } }); } async update(id: number, updateFornecedoresDto: UpdateFornecedorDto) { const fornecedorExists = await this.findOne(id); if (fornecedorExists) { if ( - !(await this.findExistingFornecedor(fornecedorExists.id, updateFornecedoresDto.email)) && - !(await this.findExistingFornecedor(fornecedorExists.id, updateFornecedoresDto.cpf)) && - !(await this.findExistingFornecedor(fornecedorExists.id, updateFornecedoresDto.rg)) && - !(await this.findExistingFornecedor(fornecedorExists.id, updateFornecedoresDto.cnpj)) && - !(await this.findExistingFornecedor(fornecedorExists.id, updateFornecedoresDto.razaoSocial)) + !(await this.findExistingFornecedor( + fornecedorExists.id, + updateFornecedoresDto.email, + )) && + !(await this.findExistingFornecedor( + fornecedorExists.id, + updateFornecedoresDto.cpf, + )) && + !(await this.findExistingFornecedor( + fornecedorExists.id, + updateFornecedoresDto.rg, + )) && + !(await this.findExistingFornecedor( + fornecedorExists.id, + updateFornecedoresDto.cnpj, + )) && + !(await this.findExistingFornecedor( + fornecedorExists.id, + updateFornecedoresDto.razaoSocial, + )) ) { return await this.prismaService.fornecedor.update({ where: { id }, diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts index dd6bee5..78b4158 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts @@ -6,33 +6,44 @@ import { PrismaService } from '../../databases/prisma.service'; @Injectable() export class InsumosProdutosBaseService { constructor(private readonly prismaService: PrismaService) {} - + async findAllWithPagination(page: number, perPage: number) { const skip = (page - 1) * perPage; - const insumosProdutosBase = await this.prismaService.insumoProdutoBase.findMany({ - skip, - take: perPage, - }); + const insumosProdutosBase = + await this.prismaService.insumoProdutoBase.findMany({ + skip, + take: perPage, + }); - return { insumosProdutosBase }; + return { insumosProdutosBase }; } async create(createInsumosProdutosBaseDto: CreateInsumosProdutosBaseDto) { - return await this.prismaService.insumoProdutoBase.create({ - data: createInsumosProdutosBaseDto, + const insumoExists = await this.prismaService.insumo.findFirst({ + where: { id: createInsumosProdutosBaseDto.idInsumo }, }); + if (insumoExists) { + const produtoBaseExists = await this.prismaService.produtoBase.findFirst({ + where: { id: createInsumosProdutosBaseDto.idProdutoBase }, + }); + if (produtoBaseExists) { + return await this.prismaService.insumoProdutoBase.create({ + data: createInsumosProdutosBaseDto, + }); + } + return { data: { message: 'Produto base não existe' } }; + } + return { data: { message: 'Insumo não existe' } }; } - async countAll(){ + async countAll() { return await this.prismaService.insumoProdutoBase.count(); } async findInsumoProdBase(id: number) { return await this.prismaService.insumoProdutoBase.findMany({ where: { - OR: [ - {idProdutoBase: {equals: id}} - ], + OR: [{ idProdutoBase: { equals: id } }], }, }); } @@ -42,17 +53,40 @@ export class InsumosProdutosBaseService { } async findOne(id: number) { - return await this.prismaService.insumoProdutoBase.findFirst({ where: { id } }); + return await this.prismaService.insumoProdutoBase.findFirst({ + where: { id }, + }); } - async update(id: number, updateInsumosProdutosBaseDto: UpdateInsumosProdutosBaseDto) { - return await this.prismaService.insumoProdutoBase.update({ - where: { id }, - data: updateInsumosProdutosBaseDto, - }) + async update( + id: number, + updateInsumosProdutosBaseDto: UpdateInsumosProdutosBaseDto, + ) { + const insumoExists = await this.prismaService.insumo.findFirst({ + where: { id: updateInsumosProdutosBaseDto.idInsumo }, + }); + if (insumoExists) { + const produtoBaseExists = await this.prismaService.produtoBase.findFirst({ + where: { id: updateInsumosProdutosBaseDto.idProdutoBase }, + }); + if (produtoBaseExists) { + return await this.prismaService.insumoProdutoBase.update({ + where: { id }, + data: updateInsumosProdutosBaseDto, + }); + } + return { data: { message: 'Produto base não existe' } }; + } + return { data: { message: 'Insumo não existe' } }; } async remove(id: number) { - return await this.prismaService.insumoProdutoBase.delete({ where: { id } }) + const insumoBaseExists = await this.findOne(id); + if (insumoBaseExists) { + return await this.prismaService.insumoProdutoBase.delete({ + where: { id }, + }); + } + return { data: { message: 'Insumo Base não existe' } }; } } diff --git a/src/modules/insumos/insumos.service.ts b/src/modules/insumos/insumos.service.ts index 6ea433e..82f7899 100644 --- a/src/modules/insumos/insumos.service.ts +++ b/src/modules/insumos/insumos.service.ts @@ -10,11 +10,11 @@ export class InsumosService { async findAllWithPagination(page: number, perPage: number) { const skip = (page - 1) * perPage; const insumos = await this.prismaService.insumo.findMany({ - skip, - take: perPage, - }); + skip, + take: perPage, + }); - return { insumos}; + return { insumos }; } async findOneByTitle(titulo: string) { @@ -24,11 +24,22 @@ export class InsumosService { } async create(createInsumoDto: CreateInsumoDto) { - const insumo = await this.findOneByTitle(createInsumoDto.titulo); - if (!insumo) { - return await this.prismaService.insumo.create({ - data: createInsumoDto, - }); + const insumoRepetido = await this.findOneByTitle(createInsumoDto.titulo); + if (!insumoRepetido) { + if (createInsumoDto.idCategoria !== undefined) { + var categoriaExists = await this.prismaService.categoria.findFirst({ + where: { id: createInsumoDto.idCategoria }, + }); + } + if ( + (createInsumoDto.idCategoria && categoriaExists) || + (!createInsumoDto.idCategoria && !categoriaExists) + ) { + return await this.prismaService.insumo.create({ + data: createInsumoDto, + }); + } + return { data: { message: 'Categoria não existe' } }; } return { data: { message: 'Titulo ja cadastrado' } }; } @@ -48,13 +59,44 @@ export class InsumosService { } async update(id: number, updateInsumoDto: UpdateInsumoDto) { - return await this.prismaService.insumo.update({ - where: { id }, - data: updateInsumoDto, - }); + const insumoRepetido = await this.findOneByTitle(updateInsumoDto.titulo); + if (!insumoRepetido) { + if (updateInsumoDto.idCategoria !== undefined) { + var categoriaExists = await this.prismaService.categoria.findFirst({ + where: { id: updateInsumoDto.idCategoria }, + }); + } + if ( + (updateInsumoDto.idCategoria && categoriaExists) || + (!updateInsumoDto.idCategoria && !categoriaExists) + ) { + return await this.prismaService.insumo.update({ + where: { id }, + data: updateInsumoDto, + }); + } + return { data: { message: 'Categoria não existe' } }; + } + return { data: { message: 'Titulo ja cadastrado' } }; } async remove(id: number) { - return await this.prismaService.insumo.delete({ where: { id } }); + const insumoExists = await this.findOne(id); + if (insumoExists) { + const insumoProds = await this.prismaService.listaInsumo.findFirst({ + where: { idInsumo: id }, + }); + const insumoProdsBase = await this.prismaService.insumoProdutoBase.findFirst({ + where: { idInsumo: id }, + }); + const insumoCota = await this.prismaService.cotacao.findFirst({ + where: { idInsumo: id }, + }); + if (!insumoProds && !insumoProdsBase && !insumoCota) { + return await this.prismaService.insumo.delete({ where: { id } }); + } + return { data: { message: 'Insumo está sendo utilizado em outro local' } }; + } + return { data: { message: 'Insumo não existe' } }; } } diff --git a/src/modules/lista-insumos/lista-insumos.controller.ts b/src/modules/lista-insumos/lista-insumos.controller.ts index 6e5ed78..4977203 100644 --- a/src/modules/lista-insumos/lista-insumos.controller.ts +++ b/src/modules/lista-insumos/lista-insumos.controller.ts @@ -39,12 +39,6 @@ export class ListaInsumosController { return this.listaInsumosService.create(createListaInsumoDto); } - @Post(':id/cotar') - @ApiBody({}) - AttachCotacao(@Param('id') idListaInsumo: number, @Body() requestBody: { idCot: number }) { - return this.listaInsumosService.AttachCotacao(+idListaInsumo, +requestBody.idCot); - } - @Get() findAll() { return this.listaInsumosService.findAll(); diff --git a/src/modules/lista-insumos/lista-insumos.service.ts b/src/modules/lista-insumos/lista-insumos.service.ts index 7d7c7ec..f0e0322 100644 --- a/src/modules/lista-insumos/lista-insumos.service.ts +++ b/src/modules/lista-insumos/lista-insumos.service.ts @@ -22,24 +22,29 @@ export class ListaInsumosService { } async create(createListaInsumoDto: CreateListaInsumoDto) { - return await this.prismaService.listaInsumo.create({ - data: createListaInsumoDto, + const insumoExists = await this.prismaService.insumo.findFirst({ + where: { id: createListaInsumoDto.idInsumo }, }); - } - - async AttachCotacao(idItemListaInsumo: number, idCotacao: number) { - const listaInsumo = await this.findOne(idItemListaInsumo); - if (listaInsumo) { - listaInsumo.idCotacao = idCotacao; - - return { - data: { - idItemlistaInsumo: listaInsumo.id, - idCotacao: listaInsumo.idCotacao, - }, - }; + if (insumoExists) { + const produtoExists = await this.prismaService.produto.findFirst({ + where: { id: createListaInsumoDto.idProduto }, + }); + if (produtoExists) { + if (createListaInsumoDto.idCotacao) { + var cotacaoExists = await this.prismaService.cotacao.findFirst({ + where: { id: createListaInsumoDto.idCotacao }, + }); + } + if (cotacaoExists || !createListaInsumoDto.idCotacao) { + return await this.prismaService.listaInsumo.create({ + data: createListaInsumoDto, + }); + } + return { data: { message: 'Cotação não existe' } }; + } + return { data: { message: 'Produto não existe' } }; } - return { data: { message: 'O insumo da lista não existe' } }; + return { data: { message: 'Insumo não existe' } }; } async findInsumoProd(id: number) { @@ -66,13 +71,39 @@ export class ListaInsumosService { } async update(id: number, updateListaInsumoDto: UpdateListaInsumoDto) { - return await this.prismaService.listaInsumo.update({ - where: { id }, - data: updateListaInsumoDto, + const insumoExists = await this.prismaService.insumo.findFirst({ + where: { id: updateListaInsumoDto.idInsumo }, }); + if (insumoExists) { + const produtoExists = await this.prismaService.produto.findFirst({ + where: { id: updateListaInsumoDto.idProduto }, + }); + if (produtoExists) { + if (updateListaInsumoDto.idCotacao) { + var cotacaoExists = await this.prismaService.cotacao.findFirst({ + where: { id: updateListaInsumoDto.idCotacao }, + }); + } + if (cotacaoExists || !updateListaInsumoDto.idCotacao) { + return await this.prismaService.listaInsumo.update({ + where: { id }, + data: updateListaInsumoDto, + }); + } + return { data: { message: 'Cotação não existe' } }; + } + return { data: { message: 'Produto não existe' } }; + } + return { data: { message: 'Insumo não existe' } }; } async remove(id: number) { - return await this.prismaService.listaInsumo.delete({ where: { id } }); + const listaInsumoExists = await this.findOne(id); + if (listaInsumoExists) { + return await this.prismaService.listaInsumo.delete({ + where: { id }, + }); + } + return { data: { message: 'Insumo da lista não existe' } }; } } diff --git a/src/modules/pedidos/pedidos.service.ts b/src/modules/pedidos/pedidos.service.ts index e402d02..cbfdd2b 100644 --- a/src/modules/pedidos/pedidos.service.ts +++ b/src/modules/pedidos/pedidos.service.ts @@ -19,22 +19,24 @@ export class PedidosService { return { pedidos }; } async create(createPedidoDto: CreatePedidoDto) { - const orc = await this.prismaService.orcamento.findFirst({ + const orcamentoExists = await this.prismaService.orcamento.findFirst({ where: { id: createPedidoDto.idOrcamento, }, }); - - if (orc.status === 'Concluido') { - const pedidoExists = await this.findOne(createPedidoDto.idOrcamento); - if (!pedidoExists) { - return await this.prismaService.pedido.create({ - data: createPedidoDto, - }); + if (orcamentoExists) { + if (orcamentoExists.status === 'Concluido') { + const pedidoExists = await this.findOne(createPedidoDto.idOrcamento); + if (!pedidoExists) { + return await this.prismaService.pedido.create({ + data: createPedidoDto, + }); + } + return { data: { message: 'Pedido já existe' } }; } - return {data: { message: 'Pedido já existe'}} + return { data: { message: 'Orçamento ainda não foi concluido' } }; } - return {data: { message: 'Orçamento ainda não foi concluido'}} + return { data: { message: 'Orçamento não existe' } }; } async findAll() { @@ -46,13 +48,29 @@ export class PedidosService { } async update(id: number, updatePedidoDto: UpdatePedidoDto) { - return await this.prismaService.pedido.update({ - where: { id }, - data: updatePedidoDto, + const orcamentoExists = await this.prismaService.orcamento.findFirst({ + where: { + id: updatePedidoDto.idOrcamento, + }, }); + if (orcamentoExists) { + const pedidoExists = await this.findOne(updatePedidoDto.idOrcamento); + if (pedidoExists) { + return await this.prismaService.pedido.update({ + where: { id }, + data: updatePedidoDto, + }); + } + return { data: { message: 'Pedido não existe' } }; + } + return { data: { message: 'Orçamento não existe' } }; } async remove(id: number) { - return await this.prismaService.pedido.delete({ where: { id } }); + const pedidoExists = await this.findOne(id); + if (pedidoExists) { + return await this.prismaService.pedido.delete({ where: { id } }); + } + return { data: { message: 'Pedido não existe' } }; } } diff --git a/src/modules/produtos-base/produtos-base.service.ts b/src/modules/produtos-base/produtos-base.service.ts index a89fec1..fa11681 100644 --- a/src/modules/produtos-base/produtos-base.service.ts +++ b/src/modules/produtos-base/produtos-base.service.ts @@ -10,10 +10,10 @@ export class ProdutosBaseService { async findAllWithPagination(page: number, perPage: number) { const skip = (page - 1) * perPage; const produtosBase = await this.prismaService.produtoBase.findMany({ - skip, - take: perPage, - }); - return { produtosBase }; + skip, + take: perPage, + }); + return { produtosBase }; } async findOneByTitle(titulo: string) { @@ -47,22 +47,32 @@ export class ProdutosBaseService { } async update(id: number, updateProdutosBaseDto: UpdateProdutosBaseDto) { - return await this.prismaService.produtoBase.update({ - where: { id }, - data: updateProdutosBaseDto, - }); + const produtoBaseExists = await this.findOneByTitle( + updateProdutosBaseDto.titulo, + ); + if (!produtoBaseExists) { + return await this.prismaService.produtoBase.update({ + where: { id }, + data: updateProdutosBaseDto, + }); + } + return { data: { message: 'Titulo ja cadastrado' } }; } async remove(id: number) { - const removeInsumosBase = await this.prismaService.insumoProdutoBase.deleteMany({ - where: { - idProdutoBase: id, - }, - }); - const removeProdutoBase = await this.prismaService.produtoBase.delete({ - where: { id }, - }); + const produtoBaseExists = await this.findOne(id); + if (produtoBaseExists) { + const removeInsumosBase = + await this.prismaService.insumoProdutoBase.deleteMany({ + where: { + idProdutoBase: id, + }, + }); + const removeProdutoBase = await this.prismaService.produtoBase.delete({ + where: { id }, + }); - return{ removeProdutoBase, removeInsumosBase} + return { removeProdutoBase, removeInsumosBase }; + } } } diff --git a/src/modules/produtos/produtos.service.ts b/src/modules/produtos/produtos.service.ts index 32dad55..2dd3bb1 100644 --- a/src/modules/produtos/produtos.service.ts +++ b/src/modules/produtos/produtos.service.ts @@ -16,10 +16,10 @@ export class ProdutosService { async findAllWithPagination(page: number, perPage: number) { const skip = (page - 1) * perPage; const produtos = await this.prismaService.produto.findMany({ - skip, - take: perPage, - }); - return { produtos }; + skip, + take: perPage, + }); + return { produtos }; } async findOneByTitle(titulo: string) { return await this.prismaService.produto.findFirst({ @@ -34,12 +34,19 @@ export class ProdutosService { } async create(createProdutoDto: CreateProdutoDto) { - const produtoExiste = await this.findOneByTitle(createProdutoDto.titulo); - if (!produtoExiste) { - return await this.prismaService.produto.create({ - data: createProdutoDto, - }); + const orcamentoExists = await this.prismaService.orcamento.findFirst({ + where: { id: createProdutoDto.orcamentoId }, + }); + if (orcamentoExists) { + const produtoExiste = await this.findOneByTitle(createProdutoDto.titulo); + if (!produtoExiste) { + return await this.prismaService.produto.create({ + data: createProdutoDto, + }); + } + return { data: { message: 'Titulo já cadastrado' } }; } + return { data: { message: 'Orçamento não existe' } }; } async findProdutoOrc(id: number) { @@ -63,28 +70,39 @@ export class ProdutosService { } async update(id: number, updateProdutoDto: UpdateProdutoDto) { - return await this.prismaService.produto.update({ - where: { id }, - data: updateProdutoDto, + const orcamentoExists = await this.prismaService.orcamento.findFirst({ + where: { id: updateProdutoDto.orcamentoId }, }); + if (orcamentoExists) { + return await this.prismaService.produto.update({ + where: { id }, + data: updateProdutoDto, + }); + } + return { data: { message: 'Orçamento não existe' } }; } async remove(id: number) { - const removeInsumos = await this.prismaService.listaInsumo.deleteMany({ - where: { - idProduto: id, - }, - }); - const removeProduto = await this.prismaService.produto.delete({ - where: { id }, - }); + const produtoExists = await this.findOne(id); + if (produtoExists) { + const removeInsumos = await this.prismaService.listaInsumo.deleteMany({ + where: { + idProduto: id, + }, + }); + const removeProduto = await this.prismaService.produto.delete({ + where: { id }, + }); - return { removeProduto, removeInsumos }; + return { removeProduto, removeInsumos }; + } + return { data: { message: 'Produto não existe' } }; } async pullProdBase(idProdBase: number, idOrc: number) { const prodBase = await this.produtosBaseService.findOne(idProdBase); - const insumosBase = await this.insumosProdutosBaseService.findInsumoProdBase(idProdBase); + const insumosBase = + await this.insumosProdutosBaseService.findInsumoProdBase(idProdBase); const copyProd = await this.prismaService.produto.create({ data: { titulo: prodBase.titulo, diff --git a/src/modules/usuarios/dto/create-usuario.dto.ts b/src/modules/usuarios/dto/create-usuario.dto.ts index 9613279..4bb926c 100644 --- a/src/modules/usuarios/dto/create-usuario.dto.ts +++ b/src/modules/usuarios/dto/create-usuario.dto.ts @@ -56,6 +56,11 @@ export class CreateUsuarioDto { @IsString({message: 'A senha inserida não é válida'}) senha: string; + @ApiProperty({ + description: + 'A token serve para autenticar o usuário dentro da aplicação', + example: '3213211312231', + }) @ValidateIf((object, value) => value !== undefined) @IsString({message: 'O token inserido não é válido'}) token: string; diff --git a/src/modules/usuarios/dto/update-usuario.dto.ts b/src/modules/usuarios/dto/update-usuario.dto.ts index cf24d72..d6c9497 100644 --- a/src/modules/usuarios/dto/update-usuario.dto.ts +++ b/src/modules/usuarios/dto/update-usuario.dto.ts @@ -35,7 +35,6 @@ export class UpdateUsuarioDto extends PartialType(CreateUsuarioDto) { description: 'O email serve para descrever o email do usuario', example: 'email@gmail.com', }) - @ValidateIf((object, value) => value !== undefined) @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email?: string; @@ -58,6 +57,11 @@ export class UpdateUsuarioDto extends PartialType(CreateUsuarioDto) { @IsString({message: 'A senha inserida não é válida'}) senha?: string; + @ApiProperty({ + description: + 'A token serve para autenticar o usuário dentro da aplicação', + example: '3213211312231', + }) @ValidateIf((object, value) => value !== undefined) @IsString({message: 'O token inserido não é válido'}) token?: string; diff --git a/src/modules/usuarios/usuarios.service.ts b/src/modules/usuarios/usuarios.service.ts index 046c426..f4e75d8 100644 --- a/src/modules/usuarios/usuarios.service.ts +++ b/src/modules/usuarios/usuarios.service.ts @@ -10,33 +10,58 @@ export class UsuariosService { async findAllWithPagination(page: number, perPage: number) { const skip = (page - 1) * perPage; const usuarios = await this.prismaService.usuario.findMany({ - skip, - take: perPage, - }); - return {usuarios}; - } - async create(createUsuarioDto: CreateUsuarioDto) { - const usuario = await this.findOneByUsuario( - createUsuarioDto.nome, - createUsuarioDto.email, - ) - if (!usuario) { - return await this.prismaService.usuario.create({ - data: createUsuarioDto, + skip, + take: perPage, }); + return { usuarios }; } - return {data: {message: 'Usuario ja cadastrado'}}; + + async create(createUsuarioDto: CreateUsuarioDto) { + if ( + !(await this.findExistingUsuario(undefined, createUsuarioDto.email)) && + !(await this.findExistingUsuario(undefined, createUsuarioDto.cpf)) + ) { + return await this.prismaService.usuario.create({ + data: createUsuarioDto, + }); + } + + return { data: { message: 'Usuário com dados repetidos' } }; } - async findByEmail(email: string){ + + async findByEmail(email: string) { return await this.prismaService.usuario.findFirst({ - where: {email}, + where: { email }, }); } - async findOneByUsuario(nome:string,email:string){ - return await this.prismaService.usuario.findFirst({ - where: {nome,email} - }); + + async findExistingUsuario(id: number, termo: string) { + if (!termo === undefined) { + var emailExists = await this.prismaService.usuario.findUnique({ + where: { + email: termo, + NOT: { + id: id, + }, + }, + }); + } + if (!termo === undefined) { + var cpfExists = await this.prismaService.usuario.findUnique({ + where: { + cpf: termo, + NOT: { + id: id, + }, + }, + }); + } + if (!emailExists && !cpfExists) { + return await 0; + } + return await 1; } + async countAll() { return await this.prismaService.usuario.count(); } @@ -50,13 +75,28 @@ export class UsuariosService { } async update(id: number, updateUsuarioDto: UpdateUsuarioDto) { - return await this.prismaService.usuario.update({ - where: { id }, - data: updateUsuarioDto, - }) + const usuarioExists = await this.findOne(id); + if (usuarioExists) { + if ( + !(await this.findExistingUsuario(id, updateUsuarioDto.email)) && + !(await this.findExistingUsuario(id, updateUsuarioDto.cpf)) + ) { + return await this.prismaService.usuario.update({ + where: { id }, + data: updateUsuarioDto, + }); + } + + return { data: { message: 'Usuário com dados repetidos' } }; + } + return { data: { message: 'Usuário não existe' } }; } async remove(id: number) { - return await this.prismaService.usuario.delete({ where: { id } }); + const usuarioExists = await this.findOne(id); + if (usuarioExists) { + return await this.prismaService.usuario.delete({ where: { id } }); + } + return { data: { message: 'Usuário não existe' } }; } } From 9d5c72a854deb284aa563f7be17a4958547a5791 Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Tue, 31 Oct 2023 17:18:36 -0300 Subject: [PATCH 009/115] =?UTF-8?q?Corre=C3=A7=C3=B5es=20p=C3=B3s-merge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 16 ++++++++-------- package.json | 2 +- .../lista-insumos/lista-insumos.service.ts | 12 +++++------- src/modules/produtos/produtos.controller.ts | 4 ++-- src/modules/produtos/produtos.service.ts | 4 ++-- 5 files changed, 18 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index a5648f6..21e0534 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "@nestjs/mapped-types": "*", "@nestjs/platform-express": "^10.0.0", "@nestjs/swagger": "^7.1.14", - "@prisma/client": "^5.4.2", + "@prisma/client": "^5.5.2", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "express": "^4.18.2", @@ -1850,12 +1850,12 @@ } }, "node_modules/@prisma/client": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.4.2.tgz", - "integrity": "sha512-2xsPaz4EaMKj1WS9iW6MlPhmbqtBsXAOeVttSePp8vTFTtvzh2hZbDgswwBdSCgPzmmwF+tLB259QzggvCmJqA==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.5.2.tgz", + "integrity": "sha512-54XkqR8M+fxbzYqe+bIXimYnkkcGqgOh0dn0yWtIk6CQT4IUCAvNFNcQZwk2KqaLU+/1PHTSWrcHtx4XjluR5w==", "hasInstallScript": true, "dependencies": { - "@prisma/engines-version": "5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574" + "@prisma/engines-version": "5.5.1-1.aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a" }, "engines": { "node": ">=16.13" @@ -1877,9 +1877,9 @@ "hasInstallScript": true }, "node_modules/@prisma/engines-version": { - "version": "5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574.tgz", - "integrity": "sha512-wvupDL4AA1vf4TQNANg7kR7y98ITqPsk6aacfBxZKtrJKRIsWjURHkZCGcQliHdqCiW/hGreO6d6ZuSv9MhdAA==" + "version": "5.5.1-1.aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.5.1-1.aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a.tgz", + "integrity": "sha512-O+qHFnZvAyOFk1tUco2/VdiqS0ym42a3+6CYLScllmnpbyiTplgyLt2rK/B9BTjYkSHjrgMhkG47S0oqzdIckA==" }, "node_modules/@sinclair/typebox": { "version": "0.27.8", diff --git a/package.json b/package.json index a233b76..2c21316 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "@nestjs/mapped-types": "*", "@nestjs/platform-express": "^10.0.0", "@nestjs/swagger": "^7.1.14", - "@prisma/client": "^5.4.2", + "@prisma/client": "^5.5.2", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "express": "^4.18.2", diff --git a/src/modules/lista-insumos/lista-insumos.service.ts b/src/modules/lista-insumos/lista-insumos.service.ts index 6716325..31a4c89 100644 --- a/src/modules/lista-insumos/lista-insumos.service.ts +++ b/src/modules/lista-insumos/lista-insumos.service.ts @@ -122,16 +122,14 @@ export class ListaInsumosService { return { data: { message: 'Essa cotação não existe' } }; } - const lista = await this.prismaService.listaInsumo.findFirst({ - where: { id: idItemListaInsumo }, - }); - if (!lista == null) { + const listaInsumoExists = await this.findOne(idItemListaInsumo) + if (!listaInsumoExists) { return { data: { message: 'Esse insumo não existe' } }; } - lista.valorUnitario = cotacao.valor; + listaInsumoExists.valorUnitario = cotacao.valor; - lista.idCotacao = cotacao.id; + listaInsumoExists.idCotacao = cotacao.id; - return await this.update(lista.id, lista); + return await this.update(listaInsumoExists.id, listaInsumoExists); } } diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index 5147629..209bf8b 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -20,12 +20,12 @@ import { addProdutoBaseDto } from './dto/addProdutoBase.dto'; @Controller('produtos') export class ProdutosController { constructor(private readonly produtosService: ProdutosService) {} - +/* @Post('addProdutoBase') createProdFromBase(@Body() addProdutoBaseDto: addProdutoBaseDto) { console.log('Entrou no controller'); return this.produtosService.pullProdBase(addProdutoBaseDto); - } + }*/ @Get('paginate') async findAllWithPagination( diff --git a/src/modules/produtos/produtos.service.ts b/src/modules/produtos/produtos.service.ts index 9fb1e5d..e505b11 100644 --- a/src/modules/produtos/produtos.service.ts +++ b/src/modules/produtos/produtos.service.ts @@ -99,7 +99,7 @@ export class ProdutosService { } return { data: { message: 'Produto não existe' } }; } - + /* async pullProdBase(addProdutoBaseDto: addProdutoBaseDto) { console.log("banana2") const prodBase = await this.produtosBaseService.findOne( @@ -136,5 +136,5 @@ export class ProdutosService { } return copyProd; - } + }*/ } From 09d4d15fa4c219925e48e32916b397147b9182d9 Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Tue, 31 Oct 2023 17:34:41 -0300 Subject: [PATCH 010/115] =?UTF-8?q?Valida=C3=A7=C3=B5es=20das=20unidades?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/create-insumo-produtos-base.dto.ts | 11 +++++++++-- .../dto/update-insumo-produtos-base.dto.ts | 9 ++++++++- .../entities/insumo-produtos-base.entity.ts | 5 ++++- .../insumos-produtos-base.service.ts | 7 ++++++- .../lista-insumos/dto/create-lista-insumo.dto.ts | 11 ++++++++++- .../lista-insumos/dto/update-lista-insumo.dto.ts | 13 +++++++++++-- .../lista-insumos/entities/lista-insumo.entity.ts | 6 +++++- 7 files changed, 53 insertions(+), 9 deletions(-) diff --git a/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts b/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts index e616060..f3ae66a 100644 --- a/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts +++ b/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; export class CreateInsumosProdutosBaseDto { @ApiProperty({ @@ -29,5 +29,12 @@ export class CreateInsumosProdutosBaseDto { @IsNumber({},{message: 'O insumo inserido não é válido'}) idInsumo: number; - unidade:string; + @ApiProperty({ + description: + 'A unidade serve para descrever as dimensões do insumo', + example: '1M', + }) + @ValidateIf((object, value) => value !== undefined) + @IsString({ message: 'A unidade inserida não é válida' }) + unidade?: string; } diff --git a/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts b/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts index a5f6eb3..c6561bc 100644 --- a/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts +++ b/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts @@ -1,7 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateInsumosProdutosBaseDto } from './create-insumo-produtos-base.dto'; import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; export class UpdateInsumosProdutosBaseDto extends PartialType( CreateInsumosProdutosBaseDto, @@ -33,5 +33,12 @@ export class UpdateInsumosProdutosBaseDto extends PartialType( @IsNumber({},{message: 'O insumo inserido não é válido'}) idInsumo?: number; + @ApiProperty({ + description: + 'A unidade serve para descrever as dimensões do insumo', + example: '1M', + }) + @ValidateIf((object, value) => value !== undefined) + @IsString({ message: 'A unidade inserida não é válida' }) unidade?: string; } diff --git a/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts b/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts index e0bdbdc..d69405a 100644 --- a/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts +++ b/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts @@ -1,5 +1,5 @@ import { ProdutoBase } from '@prisma/client'; -import { IsNotEmpty, IsNumber, IsString } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; import { Insumo } from 'src/modules/insumos/entities/insumo.entity'; export class InsumoProdutosBase { @@ -13,6 +13,9 @@ export class InsumoProdutosBase { @IsNotEmpty({message: 'O insumo não pode estar vazio'}) @IsNumber({},{message: 'O insumo inserido não é válido'}) idInsumo: number; + @ValidateIf((object, value) => value !== undefined) + @IsString({ message: 'A unidade inserida não é válida' }) + unidade: string; produtoBase: ProdutoBase; insumo: Insumo; createdAt: Date; diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts index 78b4158..77bb604 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts @@ -28,7 +28,12 @@ export class InsumosProdutosBaseService { }); if (produtoBaseExists) { return await this.prismaService.insumoProdutoBase.create({ - data: createInsumosProdutosBaseDto, + data: { + quantidade: createInsumosProdutosBaseDto.quantidade, + idProdutoBase: createInsumosProdutosBaseDto.idProdutoBase, + idInsumo: createInsumosProdutosBaseDto.idInsumo, + unidade: createInsumosProdutosBaseDto.unidade, + }, }); } return { data: { message: 'Produto base não existe' } }; diff --git a/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts b/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts index f13a396..12d9e8a 100644 --- a/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts +++ b/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber, ValidateIf } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsNumberString, IsString, ValidateIf } from 'class-validator'; export class CreateListaInsumoDto { @ApiProperty({ @@ -38,6 +38,13 @@ export class CreateListaInsumoDto { @IsNumber({}, { message: 'A cotação inserida não é válida' }) idCotacao?: number; + @ApiProperty({ + description: + 'A unidade serve para descrever as dimensões do insumo', + example: '1M', + }) + @ValidateIf((object, value) => value !== undefined) + @IsString({ message: 'A unidade inserida não é válida' }) unidade?: string; @ApiProperty({ @@ -45,5 +52,7 @@ export class CreateListaInsumoDto { 'O valor unitario serve para descrever qual é o valor do insumo', example: '100,00', }) + @ValidateIf((object, value) => value !== undefined) + @IsNumberString({},{message: 'O valor unitário inserido não é válido'}) valorUnitario?: number; } diff --git a/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts b/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts index bacfe67..b4077c6 100644 --- a/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts +++ b/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts @@ -1,7 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateListaInsumoDto } from './create-lista-insumo.dto'; import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber, ValidateIf } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsNumberString, IsString, ValidateIf } from 'class-validator'; export class UpdateListaInsumoDto extends PartialType(CreateListaInsumoDto) { @ApiProperty({ @@ -40,12 +40,21 @@ export class UpdateListaInsumoDto extends PartialType(CreateListaInsumoDto) { @IsNumber({}, { message: 'A cotação inserida não é válida' }) idCotacao?: number; - unidade?:string; + @ApiProperty({ + description: + 'A unidade serve para descrever as dimensões do insumo', + example: '1M', + }) + @ValidateIf((object, value) => value !== undefined) + @IsString({ message: 'A unidade inserida não é válida' }) + unidade?: string; @ApiProperty({ description: 'O valor unitario serve para descrever qual é o valor do insumo', example: '100,00', }) + @ValidateIf((object, value) => value !== undefined) + @IsNumberString({},{message: 'O valor unitário inserido não é válido'}) valorUnitario?: number; } diff --git a/src/modules/lista-insumos/entities/lista-insumo.entity.ts b/src/modules/lista-insumos/entities/lista-insumo.entity.ts index a7aab29..42c4b8e 100644 --- a/src/modules/lista-insumos/entities/lista-insumo.entity.ts +++ b/src/modules/lista-insumos/entities/lista-insumo.entity.ts @@ -1,4 +1,4 @@ -import { IsNotEmpty, IsNumber, ValidateIf } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsNumberString, IsString, ValidateIf } from 'class-validator'; import { Cotacao } from 'src/modules/cotacoes/entities/cotacao.entity'; import { Insumo } from 'src/modules/insumos/entities/insumo.entity'; import { Produto } from 'src/modules/produtos/entities/produto.entity'; @@ -17,7 +17,11 @@ export class ListaInsumo { @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'A cotação inserida não é válida' }) idCotacao?: number; + @ValidateIf((object, value) => value !== undefined) + @IsString() unidade?: string; + @ValidateIf((object, value) => value !== undefined) + @IsNumberString({},{message: 'O valor unitário inserido não é válido'}) valorUnitario?: number; produto?: Produto; insumo?: Insumo; From 0b60cf7cd77490c099caf4e9eae0373b0aac6c06 Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Wed, 1 Nov 2023 13:32:37 -0300 Subject: [PATCH 011/115] schema corrigido para unidade do insumo base --- prisma/schema.prisma | 36 +++++++++---------- .../insumos-produtos-base.service.ts | 7 +--- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 7cb6feb..0d20c9d 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -149,18 +149,18 @@ model Cotacao { } model ListaInsumo { - id Int @id @default(autoincrement()) - quantidade Float - idProduto Int - idInsumo Int - idCotacao Int? - unidade String? + id Int @id @default(autoincrement()) + quantidade Float + idProduto Int + idInsumo Int + idCotacao Int? + unidade String? valorUnitario Float? - produto Produto? @relation(fields: [idProduto], references: [id]) - insumo Insumo? @relation(fields: [idInsumo], references: [id]) - cotacao Cotacao? @relation(fields: [idCotacao], references: [id]) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt + produto Produto? @relation(fields: [idProduto], references: [id]) + insumo Insumo? @relation(fields: [idInsumo], references: [id]) + cotacao Cotacao? @relation(fields: [idCotacao], references: [id]) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt @@map("ListaInsumos") } @@ -192,15 +192,15 @@ model ProdutoBase { } model InsumoProdutoBase { - id Int @id @default(autoincrement()) - quantidade Float @default(1) + id Int @id @default(autoincrement()) + quantidade Float @default(1) idProdutoBase Int idInsumo Int - unidade String - produtoBase ProdutoBase? @relation(fields: [idProdutoBase], references: [id]) - insumos Insumo? @relation(fields: [idInsumo], references: [id]) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt + unidade String? + produtoBase ProdutoBase @relation(fields: [idProdutoBase], references: [id]) + insumos Insumo @relation(fields: [idInsumo], references: [id]) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt @@map("InsumosProdutosBase") } diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts index 77bb604..78b4158 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts @@ -28,12 +28,7 @@ export class InsumosProdutosBaseService { }); if (produtoBaseExists) { return await this.prismaService.insumoProdutoBase.create({ - data: { - quantidade: createInsumosProdutosBaseDto.quantidade, - idProdutoBase: createInsumosProdutosBaseDto.idProdutoBase, - idInsumo: createInsumosProdutosBaseDto.idInsumo, - unidade: createInsumosProdutosBaseDto.unidade, - }, + data: createInsumosProdutosBaseDto, }); } return { data: { message: 'Produto base não existe' } }; From b552379b71fbd48041b6141579b69db1e291a41f Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Wed, 1 Nov 2023 14:08:05 -0300 Subject: [PATCH 012/115] =?UTF-8?q?valida=C3=A7=C3=A3o=20do=20addprodutoba?= =?UTF-8?q?se=20feita?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../produtos/dto/addProdutoBase.dto.ts | 13 +++- src/modules/produtos/produtos.controller.ts | 4 +- src/modules/produtos/produtos.service.ts | 65 ++++++++++--------- 3 files changed, 47 insertions(+), 35 deletions(-) diff --git a/src/modules/produtos/dto/addProdutoBase.dto.ts b/src/modules/produtos/dto/addProdutoBase.dto.ts index aea16f7..02c8c5c 100644 --- a/src/modules/produtos/dto/addProdutoBase.dto.ts +++ b/src/modules/produtos/dto/addProdutoBase.dto.ts @@ -1,10 +1,13 @@ import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; export class addProdutoBaseDto { @ApiProperty({ - description: 'O titulo serve para identificar o produto', - example: 'Portão', + description: 'O id serve para apontar para um produto base', + example: '1', }) + @IsNotEmpty({message: 'O id do produto base não deve estar vazio'}) + @IsNumber({}, {message: 'O id do produto base inserido não é válido'}) id: number; @ApiProperty({ @@ -12,6 +15,8 @@ export class addProdutoBaseDto { 'A quantidade serve para descrever quantas unidades deste produto serão necessárias para o orçamento', example: '3', }) + @IsNotEmpty({message: 'A quantidade do produto base não deve estar vazio'}) + @IsNumber({}, {message: 'A quantidade inserida não é válida'}) quantidade: number; @ApiProperty({ @@ -19,6 +24,8 @@ export class addProdutoBaseDto { 'As observações servem para descrever caracteristicas relevantes sobre o produto', example: '2" x 6 m', }) + @ValidateIf((object, value) => value !== undefined) + @IsString({message: 'A observação inserida não é válida'}) observacoes?: string; @ApiProperty({ @@ -26,5 +33,7 @@ export class addProdutoBaseDto { 'O id do orçamento serve para indentificar qual o orçamento a quem este produto pertence', example: '1', }) + @IsNotEmpty({message: 'O id do orçamento deve estar vazio'}) + @IsNumber({}, {message: 'O id do orçamento inserido não é válido'}) orcamentoId: number; } diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index 209bf8b..5147629 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -20,12 +20,12 @@ import { addProdutoBaseDto } from './dto/addProdutoBase.dto'; @Controller('produtos') export class ProdutosController { constructor(private readonly produtosService: ProdutosService) {} -/* + @Post('addProdutoBase') createProdFromBase(@Body() addProdutoBaseDto: addProdutoBaseDto) { console.log('Entrou no controller'); return this.produtosService.pullProdBase(addProdutoBaseDto); - }*/ + } @Get('paginate') async findAllWithPagination( diff --git a/src/modules/produtos/produtos.service.ts b/src/modules/produtos/produtos.service.ts index e505b11..a5a0e2f 100644 --- a/src/modules/produtos/produtos.service.ts +++ b/src/modules/produtos/produtos.service.ts @@ -99,42 +99,45 @@ export class ProdutosService { } return { data: { message: 'Produto não existe' } }; } - /* + async pullProdBase(addProdutoBaseDto: addProdutoBaseDto) { - console.log("banana2") const prodBase = await this.produtosBaseService.findOne( addProdutoBaseDto.id, ); + if (prodBase) { + const orcamentoExists = await this.prismaService.orcamento.findFirst({ + where: { id: addProdutoBaseDto.orcamentoId }, + }); + if (orcamentoExists) { + const insumosBase = + await this.insumosProdutosBaseService.findInsumoProdBase( + addProdutoBaseDto.id, + ); - console.log("banana1") - const insumosBase = - await this.insumosProdutosBaseService.findInsumoProdBase( - addProdutoBaseDto.id, - ); + const copyProd = await this.prismaService.produto.create({ + data: { + titulo: prodBase.titulo, + orcamentoId: addProdutoBaseDto.orcamentoId, + observacoes: addProdutoBaseDto.observacoes, + quantidade: addProdutoBaseDto.quantidade, + }, + }); - const copyProd = await this.prismaService.produto.create({ - data: { - titulo: prodBase.titulo, - orcamentoId: addProdutoBaseDto.orcamentoId, - observacoes: addProdutoBaseDto.observacoes, - quantidade: addProdutoBaseDto.quantidade, - }, - }); - - console.log("banana") - - for (const insumoBase of insumosBase) { - - await this.prismaService.listaInsumo.create({ - data: { - quantidade: insumoBase.quantidade, - idInsumo: insumoBase.idInsumo, - idProduto: copyProd.id, - unidade: insumoBase.unidade, - }, - }); - } + for (const insumoBase of insumosBase) { + await this.prismaService.listaInsumo.create({ + data: { + quantidade: insumoBase.quantidade, + idInsumo: insumoBase.idInsumo, + idProduto: copyProd.id, + unidade: insumoBase.unidade, + }, + }); + } - return copyProd; - }*/ + return copyProd; + } + return { data: { message: 'Orçamento não existe' } }; + } + return { data: { message: 'Produto base não existe' } }; + } } From e7a7f998a15f1de9cd4055be715b9cb702f4772d Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Wed, 1 Nov 2023 14:19:55 -0300 Subject: [PATCH 013/115] removido console.log do controller --- src/modules/produtos/produtos.controller.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index 5147629..7d91ebb 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -23,7 +23,6 @@ export class ProdutosController { @Post('addProdutoBase') createProdFromBase(@Body() addProdutoBaseDto: addProdutoBaseDto) { - console.log('Entrou no controller'); return this.produtosService.pullProdBase(addProdutoBaseDto); } From 5336f4fa33b862d28fb4c894d2859e22b4f37cf0 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Wed, 1 Nov 2023 14:37:39 -0300 Subject: [PATCH 014/115] update: rotas findall --- .../categorias/categorias.controller.ts | 25 ++++++++++++------- src/modules/categorias/categorias.service.ts | 2 -- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/modules/categorias/categorias.controller.ts b/src/modules/categorias/categorias.controller.ts index f1ed03a..375f82c 100644 --- a/src/modules/categorias/categorias.controller.ts +++ b/src/modules/categorias/categorias.controller.ts @@ -9,19 +9,23 @@ import { UsePipes, ValidationPipe, Query, + Header, + Res, } from '@nestjs/common'; import { CategoriasService } from './categorias.service'; import { CreateCategoriaDto } from './dto/create-categoria.dto'; import { UpdateCategoriaDto } from './dto/update-categoria.dto'; import { ApiTags } from '@nestjs/swagger'; -import { response as res } from 'express'; + @ApiTags('categorias') @Controller('categorias') export class CategoriasController { constructor(private readonly categoriasService: CategoriasService) {} + totalcount = this.categoriasService.countAllCategorias(); + @Get('count') countAll() { return this.categoriasService.countAllCategorias(); @@ -33,16 +37,19 @@ export class CategoriasController { } @Get() - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,) { - page = page; - perPage = perPage; - const totalcount = await this.categoriasService.countAllCategorias(); - - res.set('x-total-count', totalcount.toString()); - return await this.categoriasService.findAllWithPagination( + @Header('x-total-count','0') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const categorias = await this.categoriasService.findAllWithPagination( page, - Number(perPage), + Number(perPage) ); + const total = await this.categoriasService.countAllCategorias(); + res.header('x-total-count',total.toString()) + return { + categorias, + }; } @Get(':id') diff --git a/src/modules/categorias/categorias.service.ts b/src/modules/categorias/categorias.service.ts index 1cb912a..22708d6 100644 --- a/src/modules/categorias/categorias.service.ts +++ b/src/modules/categorias/categorias.service.ts @@ -2,7 +2,6 @@ import { Injectable } from '@nestjs/common'; import { CreateCategoriaDto } from './dto/create-categoria.dto'; import { UpdateCategoriaDto } from './dto/update-categoria.dto'; import { PrismaService } from '../../databases/prisma.service'; - @Injectable() export class CategoriasService { constructor(private readonly prismaService: PrismaService) {} @@ -13,7 +12,6 @@ export class CategoriasService { skip, take: perPage, }); - const total = await this.prismaService.categoria.count(); return { categorias }; } From 05394ceb47ea6c03a910e639be0a8ad2b7255425 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Wed, 1 Nov 2023 14:37:50 -0300 Subject: [PATCH 015/115] update: rotas findall --- src/modules/clientes/clientes.controller.ts | 25 ++++++++------- src/modules/cotacoes/cotacoes.controller.ts | 26 +++++++++------- .../fornecedores/fornecedores.controller.ts | 25 +++++++++------ .../insumos-produtos-base.controller.ts | 26 +++++++++------- src/modules/insumos/insumos.controller.ts | 26 +++++++++------- .../lista-insumos/lista-insumos.controller.ts | 31 ++++++++++--------- .../orcamentos/orcamentos.controller.ts | 28 ++++++++--------- 7 files changed, 103 insertions(+), 84 deletions(-) diff --git a/src/modules/clientes/clientes.controller.ts b/src/modules/clientes/clientes.controller.ts index 9206d8a..8da3af8 100644 --- a/src/modules/clientes/clientes.controller.ts +++ b/src/modules/clientes/clientes.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, Query, UsePipes, ValidationPipe } from '@nestjs/common'; +import { Controller, Get, Post, Body, Patch, Param, Delete, Query, UsePipes, ValidationPipe, Header, Res } from '@nestjs/common'; import { ClientesService } from './clientes.service'; import { CreateClienteDto } from './dto/create-cliente.dto'; import { UpdateClienteDto } from './dto/update-cliente.dto'; @@ -9,15 +9,7 @@ import { response as res } from 'express'; export class ClientesController { constructor(private readonly clientesService: ClientesService) {} -@Get('paginate') -async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { - page = page; - perPage = perPage; - const totalcount = await this.clientesService.countAllCliente(); - res.set('x-total-count', totalcount.toString()); - return await this.clientesService.findAllWithPagination(page, perPage); -} @Get('count') countAll(){ @@ -31,8 +23,19 @@ async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPa } @Get() - findAll() { - return this.clientesService.findAll(); + @Header('x-total-count','0') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const clientes = await this.clientesService.findAllWithPagination( + page, + Number(perPage) + ); + const total = await this.clientesService.countAllCliente(); + res.header('x-total-count',total.toString()) + return { + clientes, + }; } diff --git a/src/modules/cotacoes/cotacoes.controller.ts b/src/modules/cotacoes/cotacoes.controller.ts index 13d58ff..873f651 100644 --- a/src/modules/cotacoes/cotacoes.controller.ts +++ b/src/modules/cotacoes/cotacoes.controller.ts @@ -9,6 +9,8 @@ import { Query, UsePipes, ValidationPipe, + Header, + Res, } from '@nestjs/common'; import { CotacoesService } from './cotacoes.service'; import { CreateCotacaoDto } from './dto/create-cotacao.dto'; @@ -20,15 +22,6 @@ import { response as res } from "express"; export class CotacoesController { constructor(private readonly cotacoesService: CotacoesService) {} -@Get('paginate') -async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { - page = page; - perPage = perPage; - const totalcount = await this.cotacoesService.countAllCotacaos(); - - res.set('x-total-count', totalcount.toString()); - return await this.cotacoesService.findAllWithPagination(page, perPage); -} @Get('count') countAll() { return this.cotacoesService.countAllCotacaos(); @@ -41,8 +34,19 @@ async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPa } @Get() - findAll() { - return this.cotacoesService.findAll(); + @Header('x-total-count','0') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const cotacoes = await this.cotacoesService.findAllWithPagination( + page, + Number(perPage) + ); + const total = await this.cotacoesService.countAllCotacaos(); + res.header('x-total-count',total.toString()) + return { + cotacoes, + }; } @Get(':id') diff --git a/src/modules/fornecedores/fornecedores.controller.ts b/src/modules/fornecedores/fornecedores.controller.ts index 8a346a2..f1689c7 100644 --- a/src/modules/fornecedores/fornecedores.controller.ts +++ b/src/modules/fornecedores/fornecedores.controller.ts @@ -9,6 +9,8 @@ import { Query, UsePipes, ValidationPipe, + Header, + Res, } from '@nestjs/common'; import { FornecedoresService } from './fornecedores.service'; import { CreateFornecedorDto } from './dto/create-fornecedor.dto'; @@ -20,14 +22,6 @@ import { response as res } from "express"; export class FornecedoresController { constructor(private readonly fornecedoresService: FornecedoresService) {} - @Get('paginate') -async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { - page = page; - perPage = perPage; - const totalcount = await this.fornecedoresService.countAllFornecedor(); - res.set('x-total-count', totalcount.toString()); - return await this.fornecedoresService.findAllWithPagination(page, perPage); -} @Get('count') countAll() { return this.fornecedoresService.countAllFornecedor(); @@ -40,8 +34,19 @@ async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPa } @Get() - findAll() { - return this.fornecedoresService.findAll(); + @Header('x-total-count','0') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const fornecedores = await this.fornecedoresService.findAllWithPagination( + page, + Number(perPage) + ); + const total = await this.fornecedoresService.countAllFornecedor(); + res.header('x-total-count',total.toString()) + return { + fornecedores, + }; } @Get(':id') diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts index fc4ccd7..63fbcad 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts @@ -1,22 +1,13 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, Query, UsePipes, ValidationPipe } from '@nestjs/common'; +import { Controller, Get, Post, Body, Patch, Param, Delete, Query, UsePipes, ValidationPipe, Header, Res } from '@nestjs/common'; import { InsumosProdutosBaseService } from './insumos-produtos-base.service'; import { CreateInsumosProdutosBaseDto } from './dto/create-insumo-produtos-base.dto'; import { UpdateInsumosProdutosBaseDto } from './dto/update-insumo-produtos-base.dto'; import { ApiTags } from '@nestjs/swagger'; -import {response as res} from 'express'; @ApiTags('insumos-produtos-base') @Controller('insumos-produtos-base') export class InsumosProdutosBaseController { constructor(private readonly insumosProdutosBaseService: InsumosProdutosBaseService) {} - @Get('paginate') -async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { - page = page; - perPage = perPage; - const totalcount = await this.insumosProdutosBaseService.countAll(); - res.set('x-total-count', totalcount.toString()); - return await this.insumosProdutosBaseService.findAllWithPagination(page, perPage); -} @Get('count') countAll() { return this.insumosProdutosBaseService.countAll(); @@ -35,8 +26,19 @@ async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPa } @Get() - findAll() { - return this.insumosProdutosBaseService.findAll(); + @Header('x-total-count','0') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const insumosProdutosBase = await this.insumosProdutosBaseService.findAllWithPagination( + page, + Number(perPage) + ); + const total = await this.insumosProdutosBaseService.countAll(); + res.header('x-total-count',total.toString()) + return { + insumosProdutosBase, + }; } @Get(':id') diff --git a/src/modules/insumos/insumos.controller.ts b/src/modules/insumos/insumos.controller.ts index 801bc61..eb0b7ba 100644 --- a/src/modules/insumos/insumos.controller.ts +++ b/src/modules/insumos/insumos.controller.ts @@ -9,6 +9,8 @@ import { UsePipes, ValidationPipe, Query, + Res, + Header, } from '@nestjs/common'; import { InsumosService } from './insumos.service'; import { CreateInsumoDto } from './dto/create-insumo.dto'; @@ -20,15 +22,6 @@ import { response as res } from "express"; export class InsumosController { constructor(private readonly insumosService: InsumosService) {} - @Get('paginate') -async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { - page = page; - perPage = perPage; - const totalcount = await this.insumosService.countAll(); - res.set('x-total-count', totalcount.toString()); - return await this.insumosService.findAllWithPagination(page, perPage); -} - @Get('count') countAll() { return this.insumosService.countAll(); @@ -41,8 +34,19 @@ async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPa } @Get() - findAll() { - return this.insumosService.findAll(); + @Header('x-total-count','0') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const insumos = await this.insumosService.findAllWithPagination( + page, + Number(perPage) + ); + const total = await this.insumosService.countAll(); + res.header('x-total-count',total.toString()) + return { + insumos, + }; } @Get(':id') diff --git a/src/modules/lista-insumos/lista-insumos.controller.ts b/src/modules/lista-insumos/lista-insumos.controller.ts index d2c1f9f..e115867 100644 --- a/src/modules/lista-insumos/lista-insumos.controller.ts +++ b/src/modules/lista-insumos/lista-insumos.controller.ts @@ -9,30 +9,20 @@ import { ValidationPipe, UsePipes, Query, + Header, + Res, } from '@nestjs/common'; import { ListaInsumosService } from './lista-insumos.service'; import { CreateListaInsumoDto } from './dto/create-lista-insumo.dto'; import { UpdateListaInsumoDto } from './dto/update-lista-insumo.dto'; import { ApiBody, ApiTags } from '@nestjs/swagger'; -import { response as res } from 'express'; + @ApiTags('lista-insumos') @Controller('lista-insumos') export class ListaInsumosController { constructor(private readonly listaInsumosService: ListaInsumosService) {} - @Get('paginate') - async findAllWithPagination( - @Query('page') page: number, - @Query('perPage') perPage: number, - ) { - page = page; - perPage = perPage; - const totalcount = await this.listaInsumosService.countAll(); - res.set('x-total-count', totalcount.toString()); - return await this.listaInsumosService.findAllWithPagination(page, perPage); - } - @UsePipes(ValidationPipe) @Post() create(@Body() createListaInsumoDto: CreateListaInsumoDto) { @@ -40,8 +30,19 @@ export class ListaInsumosController { } @Get() - findAll() { - return this.listaInsumosService.findAll(); + @Header('x-total-count','0') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const listaInsumos = await this.listaInsumosService.findAllWithPagination( + page, + Number(perPage) + ); + const total = await this.listaInsumosService.countAll(); + res.header('x-total-count',total.toString()) + return { + listaInsumos, + }; } @Get('produtos/:id') diff --git a/src/modules/orcamentos/orcamentos.controller.ts b/src/modules/orcamentos/orcamentos.controller.ts index 96605fd..6a0ca0e 100644 --- a/src/modules/orcamentos/orcamentos.controller.ts +++ b/src/modules/orcamentos/orcamentos.controller.ts @@ -1,9 +1,8 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, ValidationPipe,UsePipes, Query } from '@nestjs/common'; +import { Controller, Get, Post, Body, Patch, Param, Delete, ValidationPipe,UsePipes, Query, Res, Header } from '@nestjs/common'; import { OrcamentosService } from './orcamentos.service'; import { CreateOrcamentoDto } from './dto/create-orcamento.dto'; import { UpdateOrcamentoDto } from './dto/update-orcamento.dto'; import { ApiTags } from '@nestjs/swagger'; -import {response as res} from 'express'; @ApiTags('orcamentos') @Controller('orcamentos') export class OrcamentosController { @@ -15,20 +14,21 @@ export class OrcamentosController { } @Get() - findAll() { - return this.orcamentosService.findAll(); + @Header('x-total-count','0') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const insumosProdutosBase = await this.orcamentosService.findAllWithPagination( + page, + Number(perPage) + ); + const total = await this.orcamentosService.countAll(); + res.header('x-total-count',total.toString()) + return { + insumosProdutosBase, + }; } - @Get('paginate') - async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { - page = page; - perPage = perPage; - const totalcount = await this.orcamentosService.countAll(); - res.set('x-total-count', totalcount.toString()); - return await this.orcamentosService.findAllWithPagination(page, perPage); - } - - @Post() create(@Body() createOrcamentoDto: CreateOrcamentoDto) { From 654ffd2de728f51ef61734091313b13c7d33e0ef Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Wed, 1 Nov 2023 16:14:59 -0300 Subject: [PATCH 016/115] Recotar --- prisma/schema.prisma | 23 ++++---- src/modules/cotacoes/cotacoes.controller.ts | 24 +++++---- src/modules/cotacoes/cotacoes.service.ts | 34 +++++++++++- .../cotacoes/dto/create-cotacao.dto.ts | 53 +++++++++++++++++++ src/modules/cotacoes/dto/recotar.dto.ts | 22 ++++++++ .../cotacoes/dto/update-cotacao.dto.ts | 4 +- .../cotacoes/entities/cotacao.entity.ts | 3 +- 7 files changed, 139 insertions(+), 24 deletions(-) create mode 100644 src/modules/cotacoes/dto/recotar.dto.ts diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 7cb6feb..0f3d09b 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -139,6 +139,7 @@ model Cotacao { unidade String idFornecedor Int idInsumo Int + obsoleta Boolean? @default(false) fornecedor Fornecedor @relation(fields: [idFornecedor], references: [id]) insumo Insumo @relation(fields: [idInsumo], references: [id]) createdAt DateTime @default(now()) @@ -149,18 +150,18 @@ model Cotacao { } model ListaInsumo { - id Int @id @default(autoincrement()) - quantidade Float - idProduto Int - idInsumo Int - idCotacao Int? - unidade String? + id Int @id @default(autoincrement()) + quantidade Float + idProduto Int + idInsumo Int + idCotacao Int? + unidade String? valorUnitario Float? - produto Produto? @relation(fields: [idProduto], references: [id]) - insumo Insumo? @relation(fields: [idInsumo], references: [id]) - cotacao Cotacao? @relation(fields: [idCotacao], references: [id]) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt + produto Produto? @relation(fields: [idProduto], references: [id]) + insumo Insumo? @relation(fields: [idInsumo], references: [id]) + cotacao Cotacao? @relation(fields: [idCotacao], references: [id]) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt @@map("ListaInsumos") } diff --git a/src/modules/cotacoes/cotacoes.controller.ts b/src/modules/cotacoes/cotacoes.controller.ts index 13d58ff..448bc9a 100644 --- a/src/modules/cotacoes/cotacoes.controller.ts +++ b/src/modules/cotacoes/cotacoes.controller.ts @@ -15,20 +15,26 @@ import { CreateCotacaoDto } from './dto/create-cotacao.dto'; import { UpdateCotacaoDto } from './dto/update-cotacao.dto'; import { ApiTags } from '@nestjs/swagger'; import { response as res } from "express"; +import { recotarDto } from './dto/recotar.dto'; @ApiTags('cotacoes') @Controller('cotacoes') export class CotacoesController { - constructor(private readonly cotacoesService: CotacoesService) {} + constructor(private readonly cotacoesService: CotacoesService) { } -@Get('paginate') -async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { - page = page; - perPage = perPage; - const totalcount = await this.cotacoesService.countAllCotacaos(); + @Post('recotar/:id') + async recotar(@Param('id') idCotacao: string, @Body() recotarDto: recotarDto) { + return await this.cotacoesService.recotar(+idCotacao, recotarDto); + } - res.set('x-total-count', totalcount.toString()); - return await this.cotacoesService.findAllWithPagination(page, perPage); -} + @Get('paginate') + async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { + page = page; + perPage = perPage; + const totalcount = await this.cotacoesService.countAllCotacaos(); + + res.set('x-total-count', totalcount.toString()); + return await this.cotacoesService.findAllWithPagination(page, perPage); + } @Get('count') countAll() { return this.cotacoesService.countAllCotacaos(); diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index 7bf06cc..2d56302 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -2,10 +2,40 @@ import { Injectable } from '@nestjs/common'; import { CreateCotacaoDto } from './dto/create-cotacao.dto'; import { UpdateCotacaoDto } from './dto/update-cotacao.dto'; import { PrismaService } from 'src/databases/prisma.service'; +import { recotarDto } from './dto/recotar.dto'; @Injectable() export class CotacoesService { - constructor(private readonly prismaService: PrismaService) {} + constructor(private readonly prismaService: PrismaService) { } + + async recotar(idCotacao: number, recotarDto: recotarDto) { + const oldQuotation = await this.prismaService.cotacao.update({ + where: { id: idCotacao }, data: { + obsoleta: true, + } + }) + + if (!oldQuotation) { + + return { data: { message: 'Não foi possivel criar a nova cotação' } }; + } + + const newQuotation = await this.prismaService.cotacao.create({ + data: { + idInsumo: oldQuotation.idInsumo, + idFornecedor: oldQuotation.idFornecedor, + unidade: oldQuotation.unidade, + valor: recotarDto.valor, + data: recotarDto.data, + } + }) + + if (!newQuotation) { + return { data: { message: 'Não foi possivel criar a nova cotação' } }; + } + + return newQuotation; + } async findAllWithPagination(page: number, perPage: number) { const skip = (page - 1) * perPage; @@ -54,7 +84,7 @@ export class CotacoesService { async findOne(id: number) { - + return await this.prismaService.cotacao.findFirst({ where: { id, diff --git a/src/modules/cotacoes/dto/create-cotacao.dto.ts b/src/modules/cotacoes/dto/create-cotacao.dto.ts index a777eeb..1d702dc 100644 --- a/src/modules/cotacoes/dto/create-cotacao.dto.ts +++ b/src/modules/cotacoes/dto/create-cotacao.dto.ts @@ -11,12 +11,65 @@ export class CreateCotacaoDto { @IsDateString({},{ message: 'A data inserida não é válida' }) data: Date; + @ApiProperty({ + description: + 'O valor serve para descrever o quanto o insumo de uma cotação especifica esta custando', + example: '100', + }) + @IsNotEmpty({ message: 'O valor não pode estar vazio' })import { PartialType } from '@nestjs/mapped-types'; +import { CreateCotacaoDto } from './create-cotacao.dto'; +import { ApiProperty } from '@nestjs/swagger'; +import { IsDateString, IsNotEmpty, IsNumber, IsString } from 'class-validator'; + +export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { + @ApiProperty({ + description: + 'A data serve para descrever quando esta cotação foi realizada', + example: '2023-10-23T17:30:44.382Z', + }) + @IsNotEmpty({ message: 'A data não pode estar vazia' }) + @IsDateString({}, { message: 'A data inserida não é válida' }) + data?: Date; + + obsoleta: boolean; + @ApiProperty({ description: 'O valor serve para descrever o quanto o insumo de uma cotação especifica esta custando', example: '100', }) @IsNotEmpty({ message: 'O valor não pode estar vazio' }) + @IsNumber({}, { message: 'O valor inserido não é válido' }) + valor?: number; + + @ApiProperty({ + description: + 'O id do fornecedor serve para descrever com qual fornecedor foi realizada a cotação', + example: '1', + }) + @IsNumber({}, { message: 'O fornecedor inserido não é válido' }) + @IsNotEmpty({ message: 'O fornecedor não pode estar vazio' }) + idFornecedor?: number; + + @ApiProperty({ + description: + 'O id do insumo serve para descrever para qual insumo esta cotação foi realizada', + example: '1', + }) + @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) + @IsNumber({}, { message: 'O insumo inserido não é válido' }) + idInsumo?: number; + + @ApiProperty({ + description: + 'A unidade serve para descrever as dimensões do insumo', + example: '1M', + }) + @IsNotEmpty({ message: 'A unidade não pode estar vazia' }) + @IsString({ message: 'A unidade inserida não é válida' }) + unidade?: string; +} + @IsNumber({}, { message: 'O valor inserido não é válido' }) valor: number; diff --git a/src/modules/cotacoes/dto/recotar.dto.ts b/src/modules/cotacoes/dto/recotar.dto.ts new file mode 100644 index 0000000..a772660 --- /dev/null +++ b/src/modules/cotacoes/dto/recotar.dto.ts @@ -0,0 +1,22 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsDateString, IsNotEmpty, IsNumber } from 'class-validator'; + +export class recotarDto { + @ApiProperty({ + description: + 'A data serve para descrever quando esta cotação foi realizada', + example: '2023-10-23T17:30:44.382Z', + }) + @IsNotEmpty({ message: 'A data não pode estar vazia' }) + @IsDateString({}, { message: 'A data inserida não é válida' }) + data?: Date; + + @ApiProperty({ + description: + 'O valor serve para descrever o quanto o insumo de uma cotação especifica esta custando', + example: '100', + }) + @IsNotEmpty({ message: 'O valor não pode estar vazio' }) + @IsNumber({}, { message: 'O valor inserido não é válido' }) + valor?: number; +} diff --git a/src/modules/cotacoes/dto/update-cotacao.dto.ts b/src/modules/cotacoes/dto/update-cotacao.dto.ts index e145347..e5a62e9 100644 --- a/src/modules/cotacoes/dto/update-cotacao.dto.ts +++ b/src/modules/cotacoes/dto/update-cotacao.dto.ts @@ -10,9 +10,11 @@ export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { example: '2023-10-23T17:30:44.382Z', }) @IsNotEmpty({ message: 'A data não pode estar vazia' }) - @IsDateString({},{ message: 'A data inserida não é válida' }) + @IsDateString({}, { message: 'A data inserida não é válida' }) data?: Date; + obsoleta: boolean; + @ApiProperty({ description: 'O valor serve para descrever o quanto o insumo de uma cotação especifica esta custando', diff --git a/src/modules/cotacoes/entities/cotacao.entity.ts b/src/modules/cotacoes/entities/cotacao.entity.ts index 29257f3..359af69 100644 --- a/src/modules/cotacoes/entities/cotacao.entity.ts +++ b/src/modules/cotacoes/entities/cotacao.entity.ts @@ -3,8 +3,9 @@ import { IsDateString, IsNotEmpty, IsNumber, IsString } from 'class-validator'; export class Cotacao { id: number; @IsNotEmpty({ message: 'A data não pode estar vazia' }) - @IsDateString({},{ message: 'A data inserida não é válida' }) + @IsDateString({}, { message: 'A data inserida não é válida' }) data: Date; + obsoleta: boolean; @IsNotEmpty({ message: 'O valor não pode estar vazio' }) @IsNumber({}, { message: 'O valor inserido não é válido' }) valor: number; From ced3a424526245ae91662b50f25cf899cdf66987 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Wed, 1 Nov 2023 16:20:16 -0300 Subject: [PATCH 017/115] update: rota findall --- src/modules/orcamentos/orcamentos.controller.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/orcamentos/orcamentos.controller.ts b/src/modules/orcamentos/orcamentos.controller.ts index 6a0ca0e..799ba04 100644 --- a/src/modules/orcamentos/orcamentos.controller.ts +++ b/src/modules/orcamentos/orcamentos.controller.ts @@ -18,14 +18,14 @@ export class OrcamentosController { async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { page = page||1; perPage = perPage||10; - const insumosProdutosBase = await this.orcamentosService.findAllWithPagination( + const orcamentos = await this.orcamentosService.findAllWithPagination( page, Number(perPage) ); const total = await this.orcamentosService.countAll(); res.header('x-total-count',total.toString()) return { - insumosProdutosBase, + orcamentos, }; } From 3a17c0ae7dc8f48b3cdd44723ce4e60709edf126 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Wed, 1 Nov 2023 16:20:23 -0300 Subject: [PATCH 018/115] update: rota findall --- src/modules/pedidos/pedidos.controller.ts | 29 ++++++++++++----------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/modules/pedidos/pedidos.controller.ts b/src/modules/pedidos/pedidos.controller.ts index 662c3a2..7448f0f 100644 --- a/src/modules/pedidos/pedidos.controller.ts +++ b/src/modules/pedidos/pedidos.controller.ts @@ -9,6 +9,8 @@ import { UsePipes, ValidationPipe, Query, + Header, + Res, } from '@nestjs/common'; import { PedidosService } from './pedidos.service'; import { CreatePedidoDto } from './dto/create-pedido.dto'; @@ -25,18 +27,6 @@ export class PedidosController { return await this.pedidosService.countAll(); } - @Get('paginate') - async findAllWithPagination( - @Query('page') page: number, - @Query('perPage') perPage: number, - ) { - page = page; - perPage = perPage; - const totalcount = await this.pedidosService.countAll(); - res.set('x-total-count', totalcount.toString()); - return await this.pedidosService.findAllWithPagination(page, perPage); - } - @UsePipes(ValidationPipe) @Post() create(@Body() createPedidoDto: CreatePedidoDto) { @@ -44,8 +34,19 @@ export class PedidosController { } @Get() - findAll() { - return this.pedidosService.findAll(); + @Header('x-total-count','0') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const pedidos = await this.pedidosService.findAllWithPagination( + page, + Number(perPage) + ); + const total = await this.pedidosService.countAll(); + res.header('x-total-count',total.toString()) + return { + pedidos, + }; } @Get(':id') From d31a07c093ff552a6874ff4469ae0d16b7fa9e8a Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Wed, 1 Nov 2023 16:20:28 -0300 Subject: [PATCH 019/115] update: rota findall --- src/modules/produtos/produtos.controller.ts | 28 +++++++++++---------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index 7d91ebb..1fad6b4 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -9,6 +9,8 @@ import { UsePipes, ValidationPipe, Query, + Header, + Res, } from '@nestjs/common'; import { ProdutosService } from './produtos.service'; import { CreateProdutoDto } from './dto/create-produto.dto'; @@ -26,17 +28,6 @@ export class ProdutosController { return this.produtosService.pullProdBase(addProdutoBaseDto); } - @Get('paginate') - async findAllWithPagination( - @Query('page') page: number, - @Query('perPage') perPage: number, - ) { - page = page; - perPage = perPage; - const totalcount = await this.produtosService.countAll(); - res.set('x-total-count', totalcount.toString()); - return await this.produtosService.findAllWithPagination(page, perPage); - } @Get('count') countAll() { return this.produtosService.countAll(); @@ -63,8 +54,19 @@ export class ProdutosController { } @Get() - findAll() { - return this.produtosService.findAll(); + @Header('x-total-count','0') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const produtos = await this.produtosService.findAllWithPagination( + page, + Number(perPage) + ); + const total = await this.produtosService.countAll(); + res.header('x-total-count',total.toString()) + return { + produtos, + }; } @UsePipes(ValidationPipe) From e099dea4ab17c401b2fb65cd32a071715e09670c Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Wed, 1 Nov 2023 16:20:34 -0300 Subject: [PATCH 020/115] update: rota findall --- .../produtos-base/produtos-base.controller.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/modules/produtos-base/produtos-base.controller.ts b/src/modules/produtos-base/produtos-base.controller.ts index 6c93b07..4357396 100644 --- a/src/modules/produtos-base/produtos-base.controller.ts +++ b/src/modules/produtos-base/produtos-base.controller.ts @@ -9,6 +9,8 @@ import { ValidationPipe, UsePipes, Query, + Header, + Res, } from '@nestjs/common'; import { ProdutosBaseService } from './produtos-base.service'; import { CreateProdutosBaseDto } from './dto/create-produtos-base.dto'; @@ -43,8 +45,19 @@ export class ProdutosBaseController { } @Get() - findAll() { - return this.produtosBaseService.findAll(); + @Header('x-total-count','0') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const produtosBase = await this.produtosBaseService.findAllWithPagination( + page, + Number(perPage) + ); + const total = await this.produtosBaseService.countAll(); + res.header('x-total-count',total.toString()) + return { + produtosBase, + }; } @Get(':id') From 913217f43a73feb35d5baea92686dc125a00f9e8 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Wed, 1 Nov 2023 16:20:38 -0300 Subject: [PATCH 021/115] update: rota findall --- src/modules/usuarios/usuarios.controller.ts | 29 +++++++++++---------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/modules/usuarios/usuarios.controller.ts b/src/modules/usuarios/usuarios.controller.ts index 653b232..d7327cd 100644 --- a/src/modules/usuarios/usuarios.controller.ts +++ b/src/modules/usuarios/usuarios.controller.ts @@ -9,6 +9,8 @@ import { ValidationPipe, UsePipes, Query, + Header, + Res, } from '@nestjs/common'; import { UsuariosService } from './usuarios.service'; import { CreateUsuarioDto } from './dto/create-usuario.dto'; @@ -20,18 +22,6 @@ import { response as res } from 'express'; export class UsuariosController { constructor(private readonly usuariosService: UsuariosService) {} - @Get('paginate') - async findAllWithPagination( - @Query('page') page: number, - @Query('perPage') perPage: number, - ) { - page = page; - perPage = perPage; - const totalcount = await this.usuariosService.countAll(); - res.set('x-total-count', totalcount.toString()); - return await this.usuariosService.findAllWithPagination(page, perPage); - } - @Get('count') countAll() { return this.usuariosService.countAll(); @@ -44,8 +34,19 @@ export class UsuariosController { } @Get() - findAll() { - return this.usuariosService.findAll(); + @Header('x-total-count','0') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const usuarios = await this.usuariosService.findAllWithPagination( + page, + Number(perPage) + ); + const total = await this.usuariosService.countAll(); + res.header('x-total-count',total.toString()) + return { + usuarios, + }; } @Get(':id') From f9a26b63a7b02cfb3916e548258e76c27584e636 Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Wed, 1 Nov 2023 17:15:01 -0300 Subject: [PATCH 022/115] recotar corrigido e validado --- src/modules/cotacoes/cotacoes.service.ts | 52 ++++++++++-------- .../cotacoes/dto/create-cotacao.dto.ts | 53 ------------------- src/modules/cotacoes/dto/recotar.dto.ts | 4 +- .../cotacoes/dto/update-cotacao.dto.ts | 21 ++++++-- 4 files changed, 48 insertions(+), 82 deletions(-) diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index 2d56302..85a43f8 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -6,17 +6,17 @@ import { recotarDto } from './dto/recotar.dto'; @Injectable() export class CotacoesService { - constructor(private readonly prismaService: PrismaService) { } + constructor(private readonly prismaService: PrismaService) {} async recotar(idCotacao: number, recotarDto: recotarDto) { const oldQuotation = await this.prismaService.cotacao.update({ - where: { id: idCotacao }, data: { + where: { id: idCotacao }, + data: { obsoleta: true, - } - }) + }, + }); if (!oldQuotation) { - return { data: { message: 'Não foi possivel criar a nova cotação' } }; } @@ -27,8 +27,8 @@ export class CotacoesService { unidade: oldQuotation.unidade, valor: recotarDto.valor, data: recotarDto.data, - } - }) + }, + }); if (!newQuotation) { return { data: { message: 'Não foi possivel criar a nova cotação' } }; @@ -61,7 +61,7 @@ export class CotacoesService { data: createCotacaoDto, }); } - return { data: { message: 'Insumo não existe' } } + return { data: { message: 'Insumo não existe' } }; } return { data: { message: 'Fornecedor não existe' } }; } @@ -83,8 +83,6 @@ export class CotacoesService { } async findOne(id: number) { - - return await this.prismaService.cotacao.findFirst({ where: { id, @@ -93,22 +91,30 @@ export class CotacoesService { } async update(id: number, updateCotacaoDto: UpdateCotacaoDto) { - const fornecedorExists = await this.prismaService.fornecedor.findFirst({ - where: { id: updateCotacaoDto.idFornecedor }, - }); - if (fornecedorExists) { - const insumoExists = await this.prismaService.insumo.findFirst({ - where: { id: updateCotacaoDto.idInsumo }, - }); - if (insumoExists) { - return await this.prismaService.cotacao.update({ - where: { id }, - data: updateCotacaoDto, + const cotacaoExists = await this.findOne(1); + if (cotacaoExists) { + const notObsolete = await this.findOne(id); + if (notObsolete.obsoleta === false) { + const fornecedorExists = await this.prismaService.fornecedor.findFirst({ + where: { id: updateCotacaoDto.idFornecedor }, }); + if (fornecedorExists) { + const insumoExists = await this.prismaService.insumo.findFirst({ + where: { id: updateCotacaoDto.idInsumo }, + }); + if (insumoExists) { + return await this.prismaService.cotacao.update({ + where: { id }, + data: updateCotacaoDto, + }); + } + return { data: { message: 'Insumo não existe' } }; + } + return { data: { message: 'Fornecedor não existe' } }; } - return { data: { message: 'Insumo não existe' } } + return { data: { message: 'Cotação selecionada é obsoleta' } }; } - return { data: { message: 'Fornecedor não existe' } }; + return { data: { message: 'Cotação não existe' } }; } async remove(id: number) { diff --git a/src/modules/cotacoes/dto/create-cotacao.dto.ts b/src/modules/cotacoes/dto/create-cotacao.dto.ts index 1d702dc..a777eeb 100644 --- a/src/modules/cotacoes/dto/create-cotacao.dto.ts +++ b/src/modules/cotacoes/dto/create-cotacao.dto.ts @@ -11,65 +11,12 @@ export class CreateCotacaoDto { @IsDateString({},{ message: 'A data inserida não é válida' }) data: Date; - @ApiProperty({ - description: - 'O valor serve para descrever o quanto o insumo de uma cotação especifica esta custando', - example: '100', - }) - @IsNotEmpty({ message: 'O valor não pode estar vazio' })import { PartialType } from '@nestjs/mapped-types'; -import { CreateCotacaoDto } from './create-cotacao.dto'; -import { ApiProperty } from '@nestjs/swagger'; -import { IsDateString, IsNotEmpty, IsNumber, IsString } from 'class-validator'; - -export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { - @ApiProperty({ - description: - 'A data serve para descrever quando esta cotação foi realizada', - example: '2023-10-23T17:30:44.382Z', - }) - @IsNotEmpty({ message: 'A data não pode estar vazia' }) - @IsDateString({}, { message: 'A data inserida não é válida' }) - data?: Date; - - obsoleta: boolean; - @ApiProperty({ description: 'O valor serve para descrever o quanto o insumo de uma cotação especifica esta custando', example: '100', }) @IsNotEmpty({ message: 'O valor não pode estar vazio' }) - @IsNumber({}, { message: 'O valor inserido não é válido' }) - valor?: number; - - @ApiProperty({ - description: - 'O id do fornecedor serve para descrever com qual fornecedor foi realizada a cotação', - example: '1', - }) - @IsNumber({}, { message: 'O fornecedor inserido não é válido' }) - @IsNotEmpty({ message: 'O fornecedor não pode estar vazio' }) - idFornecedor?: number; - - @ApiProperty({ - description: - 'O id do insumo serve para descrever para qual insumo esta cotação foi realizada', - example: '1', - }) - @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) - @IsNumber({}, { message: 'O insumo inserido não é válido' }) - idInsumo?: number; - - @ApiProperty({ - description: - 'A unidade serve para descrever as dimensões do insumo', - example: '1M', - }) - @IsNotEmpty({ message: 'A unidade não pode estar vazia' }) - @IsString({ message: 'A unidade inserida não é válida' }) - unidade?: string; -} - @IsNumber({}, { message: 'O valor inserido não é válido' }) valor: number; diff --git a/src/modules/cotacoes/dto/recotar.dto.ts b/src/modules/cotacoes/dto/recotar.dto.ts index a772660..bc793af 100644 --- a/src/modules/cotacoes/dto/recotar.dto.ts +++ b/src/modules/cotacoes/dto/recotar.dto.ts @@ -9,7 +9,7 @@ export class recotarDto { }) @IsNotEmpty({ message: 'A data não pode estar vazia' }) @IsDateString({}, { message: 'A data inserida não é válida' }) - data?: Date; + data: Date; @ApiProperty({ description: @@ -18,5 +18,5 @@ export class recotarDto { }) @IsNotEmpty({ message: 'O valor não pode estar vazio' }) @IsNumber({}, { message: 'O valor inserido não é válido' }) - valor?: number; + valor: number; } diff --git a/src/modules/cotacoes/dto/update-cotacao.dto.ts b/src/modules/cotacoes/dto/update-cotacao.dto.ts index e5a62e9..5951ee1 100644 --- a/src/modules/cotacoes/dto/update-cotacao.dto.ts +++ b/src/modules/cotacoes/dto/update-cotacao.dto.ts @@ -1,7 +1,14 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateCotacaoDto } from './create-cotacao.dto'; import { ApiProperty } from '@nestjs/swagger'; -import { IsDateString, IsNotEmpty, IsNumber, IsString } from 'class-validator'; +import { + IsBoolean, + IsDateString, + IsNotEmpty, + IsNumber, + IsString, + ValidateIf, +} from 'class-validator'; export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { @ApiProperty({ @@ -13,7 +20,14 @@ export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { @IsDateString({}, { message: 'A data inserida não é válida' }) data?: Date; - obsoleta: boolean; + @ApiProperty({ + description: + 'A propriedade obsoleta serve para descrever quando esta cotação deixou de ser atualizada', + example: 'false', + }) + @ValidateIf((object, value) => value !== undefined) + @IsBoolean({ message: 'O valor de obsoleta inserido não é válido' }) + obsoleta?: boolean; @ApiProperty({ description: @@ -43,8 +57,7 @@ export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { idInsumo?: number; @ApiProperty({ - description: - 'A unidade serve para descrever as dimensões do insumo', + description: 'A unidade serve para descrever as dimensões do insumo', example: '1M', }) @IsNotEmpty({ message: 'A unidade não pode estar vazia' }) From 5e742ea7af777986013431fd50de5aaa1d888cc9 Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Thu, 2 Nov 2023 17:06:17 -0300 Subject: [PATCH 023/115] =?UTF-8?q?findAll=20sem=20pagina=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/categorias/categorias.controller.ts | 15 ++------------- src/modules/clientes/clientes.controller.ts | 15 ++------------- src/modules/cotacoes/cotacoes.controller.ts | 15 ++------------- .../fornecedores/fornecedores.controller.ts | 15 ++------------- .../insumos-produtos-base.controller.ts | 15 ++------------- src/modules/insumos/insumos.controller.ts | 15 ++------------- .../lista-insumos/lista-insumos.controller.ts | 15 ++------------- src/modules/orcamentos/orcamentos.controller.ts | 15 ++------------- src/modules/pedidos/pedidos.controller.ts | 15 ++------------- .../produtos-base/produtos-base.controller.ts | 15 ++------------- src/modules/produtos/produtos.controller.ts | 15 ++------------- src/modules/usuarios/usuarios.controller.ts | 15 ++------------- 12 files changed, 24 insertions(+), 156 deletions(-) diff --git a/src/modules/categorias/categorias.controller.ts b/src/modules/categorias/categorias.controller.ts index 375f82c..58ccdef 100644 --- a/src/modules/categorias/categorias.controller.ts +++ b/src/modules/categorias/categorias.controller.ts @@ -37,19 +37,8 @@ export class CategoriasController { } @Get() - @Header('x-total-count','0') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { - page = page||1; - perPage = perPage||10; - const categorias = await this.categoriasService.findAllWithPagination( - page, - Number(perPage) - ); - const total = await this.categoriasService.countAllCategorias(); - res.header('x-total-count',total.toString()) - return { - categorias, - }; + async findAll(){ + return this.categoriasService.findAll() } @Get(':id') diff --git a/src/modules/clientes/clientes.controller.ts b/src/modules/clientes/clientes.controller.ts index 8da3af8..997ab01 100644 --- a/src/modules/clientes/clientes.controller.ts +++ b/src/modules/clientes/clientes.controller.ts @@ -23,19 +23,8 @@ export class ClientesController { } @Get() - @Header('x-total-count','0') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { - page = page||1; - perPage = perPage||10; - const clientes = await this.clientesService.findAllWithPagination( - page, - Number(perPage) - ); - const total = await this.clientesService.countAllCliente(); - res.header('x-total-count',total.toString()) - return { - clientes, - }; + async findAll(){ + return this.clientesService.findAll() } diff --git a/src/modules/cotacoes/cotacoes.controller.ts b/src/modules/cotacoes/cotacoes.controller.ts index 4f0b581..b9e21a8 100644 --- a/src/modules/cotacoes/cotacoes.controller.ts +++ b/src/modules/cotacoes/cotacoes.controller.ts @@ -50,19 +50,8 @@ export class CotacoesController { } @Get() - @Header('x-total-count','0') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { - page = page||1; - perPage = perPage||10; - const cotacoes = await this.cotacoesService.findAllWithPagination( - page, - Number(perPage) - ); - const total = await this.cotacoesService.countAllCotacaos(); - res.header('x-total-count',total.toString()) - return { - cotacoes, - }; + async findAll(){ + return this.cotacoesService.findAll() } @Get(':id') diff --git a/src/modules/fornecedores/fornecedores.controller.ts b/src/modules/fornecedores/fornecedores.controller.ts index f1689c7..0a1d3d9 100644 --- a/src/modules/fornecedores/fornecedores.controller.ts +++ b/src/modules/fornecedores/fornecedores.controller.ts @@ -34,19 +34,8 @@ export class FornecedoresController { } @Get() - @Header('x-total-count','0') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { - page = page||1; - perPage = perPage||10; - const fornecedores = await this.fornecedoresService.findAllWithPagination( - page, - Number(perPage) - ); - const total = await this.fornecedoresService.countAllFornecedor(); - res.header('x-total-count',total.toString()) - return { - fornecedores, - }; + async findAll(){ + return this.fornecedoresService.findAll() } @Get(':id') diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts index 63fbcad..71319fd 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts @@ -26,19 +26,8 @@ export class InsumosProdutosBaseController { } @Get() - @Header('x-total-count','0') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { - page = page||1; - perPage = perPage||10; - const insumosProdutosBase = await this.insumosProdutosBaseService.findAllWithPagination( - page, - Number(perPage) - ); - const total = await this.insumosProdutosBaseService.countAll(); - res.header('x-total-count',total.toString()) - return { - insumosProdutosBase, - }; + async findAll(){ + return this.insumosProdutosBaseService.findAll() } @Get(':id') diff --git a/src/modules/insumos/insumos.controller.ts b/src/modules/insumos/insumos.controller.ts index eb0b7ba..718a58b 100644 --- a/src/modules/insumos/insumos.controller.ts +++ b/src/modules/insumos/insumos.controller.ts @@ -34,19 +34,8 @@ export class InsumosController { } @Get() - @Header('x-total-count','0') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { - page = page||1; - perPage = perPage||10; - const insumos = await this.insumosService.findAllWithPagination( - page, - Number(perPage) - ); - const total = await this.insumosService.countAll(); - res.header('x-total-count',total.toString()) - return { - insumos, - }; + async findAll(){ + return this.insumosService.findAll() } @Get(':id') diff --git a/src/modules/lista-insumos/lista-insumos.controller.ts b/src/modules/lista-insumos/lista-insumos.controller.ts index e115867..fe4dc15 100644 --- a/src/modules/lista-insumos/lista-insumos.controller.ts +++ b/src/modules/lista-insumos/lista-insumos.controller.ts @@ -30,19 +30,8 @@ export class ListaInsumosController { } @Get() - @Header('x-total-count','0') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { - page = page||1; - perPage = perPage||10; - const listaInsumos = await this.listaInsumosService.findAllWithPagination( - page, - Number(perPage) - ); - const total = await this.listaInsumosService.countAll(); - res.header('x-total-count',total.toString()) - return { - listaInsumos, - }; + async findAll(){ + return this.listaInsumosService.findAll() } @Get('produtos/:id') diff --git a/src/modules/orcamentos/orcamentos.controller.ts b/src/modules/orcamentos/orcamentos.controller.ts index 799ba04..af93afa 100644 --- a/src/modules/orcamentos/orcamentos.controller.ts +++ b/src/modules/orcamentos/orcamentos.controller.ts @@ -14,19 +14,8 @@ export class OrcamentosController { } @Get() - @Header('x-total-count','0') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { - page = page||1; - perPage = perPage||10; - const orcamentos = await this.orcamentosService.findAllWithPagination( - page, - Number(perPage) - ); - const total = await this.orcamentosService.countAll(); - res.header('x-total-count',total.toString()) - return { - orcamentos, - }; + async findAll(){ + return this.orcamentosService.findAll() } @Post() diff --git a/src/modules/pedidos/pedidos.controller.ts b/src/modules/pedidos/pedidos.controller.ts index 7448f0f..3c5c352 100644 --- a/src/modules/pedidos/pedidos.controller.ts +++ b/src/modules/pedidos/pedidos.controller.ts @@ -34,19 +34,8 @@ export class PedidosController { } @Get() - @Header('x-total-count','0') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { - page = page||1; - perPage = perPage||10; - const pedidos = await this.pedidosService.findAllWithPagination( - page, - Number(perPage) - ); - const total = await this.pedidosService.countAll(); - res.header('x-total-count',total.toString()) - return { - pedidos, - }; + async findAll(){ + return this.pedidosService.findAll() } @Get(':id') diff --git a/src/modules/produtos-base/produtos-base.controller.ts b/src/modules/produtos-base/produtos-base.controller.ts index 4357396..116c8d5 100644 --- a/src/modules/produtos-base/produtos-base.controller.ts +++ b/src/modules/produtos-base/produtos-base.controller.ts @@ -45,19 +45,8 @@ export class ProdutosBaseController { } @Get() - @Header('x-total-count','0') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { - page = page||1; - perPage = perPage||10; - const produtosBase = await this.produtosBaseService.findAllWithPagination( - page, - Number(perPage) - ); - const total = await this.produtosBaseService.countAll(); - res.header('x-total-count',total.toString()) - return { - produtosBase, - }; + async findAll(){ + return this.produtosBaseService.findAll() } @Get(':id') diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index 1fad6b4..6f6b3a9 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -54,19 +54,8 @@ export class ProdutosController { } @Get() - @Header('x-total-count','0') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { - page = page||1; - perPage = perPage||10; - const produtos = await this.produtosService.findAllWithPagination( - page, - Number(perPage) - ); - const total = await this.produtosService.countAll(); - res.header('x-total-count',total.toString()) - return { - produtos, - }; + async findAll(){ + return this.produtosService.findAll() } @UsePipes(ValidationPipe) diff --git a/src/modules/usuarios/usuarios.controller.ts b/src/modules/usuarios/usuarios.controller.ts index d7327cd..9caaf5b 100644 --- a/src/modules/usuarios/usuarios.controller.ts +++ b/src/modules/usuarios/usuarios.controller.ts @@ -34,19 +34,8 @@ export class UsuariosController { } @Get() - @Header('x-total-count','0') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Res({ passthrough: true }) res) { - page = page||1; - perPage = perPage||10; - const usuarios = await this.usuariosService.findAllWithPagination( - page, - Number(perPage) - ); - const total = await this.usuariosService.countAll(); - res.header('x-total-count',total.toString()) - return { - usuarios, - }; + async findAll(){ + return this.usuariosService.findAll() } @Get(':id') From f30e4d53324682fcd2b33a0d27c8da1d7024e714 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Fri, 3 Nov 2023 01:40:43 -0300 Subject: [PATCH 024/115] =?UTF-8?q?concertado=20a=20pagina=C3=A7=C3=A3o=20?= =?UTF-8?q?da=20tela=20de=20categorias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../categorias/categorias.controller.ts | 15 ++++++++++-- src/modules/categorias/categorias.service.ts | 23 ++++++++++++++++--- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/modules/categorias/categorias.controller.ts b/src/modules/categorias/categorias.controller.ts index 58ccdef..afc3f8a 100644 --- a/src/modules/categorias/categorias.controller.ts +++ b/src/modules/categorias/categorias.controller.ts @@ -37,8 +37,19 @@ export class CategoriasController { } @Get() - async findAll(){ - return this.categoriasService.findAll() + @Header('Access-Control-Allow-Origin', '*') + @Header('Access-Control-Expose-Headers', 'X-Total-Count') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const categorias = await this.categoriasService.findAllWithPagination( + page, + Number(perPage), + titulo_like + ); + const total = await this.categoriasService.countAllCategorias(); + res.header('x-total-count',total); + return categorias } @Get(':id') diff --git a/src/modules/categorias/categorias.service.ts b/src/modules/categorias/categorias.service.ts index 22708d6..777ab74 100644 --- a/src/modules/categorias/categorias.service.ts +++ b/src/modules/categorias/categorias.service.ts @@ -2,17 +2,34 @@ import { Injectable } from '@nestjs/common'; import { CreateCategoriaDto } from './dto/create-categoria.dto'; import { UpdateCategoriaDto } from './dto/update-categoria.dto'; import { PrismaService } from '../../databases/prisma.service'; +import { Categoria } from './entities/categoria.entity'; @Injectable() export class CategoriasService { constructor(private readonly prismaService: PrismaService) {} - async findAllWithPagination(page: number, perPage: number) { + async findAllWithPagination(page: number, perPage: number, titulo_like? : string) { + + const skip = (page - 1) * perPage; - const categorias = await this.prismaService.categoria.findMany({ + let categorias = Categoria[""]; + if(titulo_like){ + categorias = await this.prismaService.categoria.findMany({ skip, take: perPage, + where:{ + OR: [{ titulo: { contains: titulo_like } }, + { tipo: { contains: titulo_like } },], + }, }); - return { categorias }; + }else{ + categorias = await this.prismaService.categoria.findMany({ + skip, + take: perPage, + }); + } + + + return categorias ; } async findOneByTitle(titulo: string) { From 12f2196819f237b0549defe3e9b87d354773caac Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Sat, 4 Nov 2023 17:01:30 -0300 Subject: [PATCH 025/115] =?UTF-8?q?Pagina=C3=A7=C3=A3o=20telas=20cliente,f?= =?UTF-8?q?ornecedore,cotacoes=20e=20insumos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/categorias/categorias.service.ts | 6 +---- src/modules/clientes/clientes.controller.ts | 16 +++++++++--- src/modules/clientes/clientes.service.ts | 24 ++++++++++++++--- src/modules/cotacoes/cotacoes.controller.ts | 15 +++++++++-- src/modules/cotacoes/cotacoes.service.ts | 26 ++++++++++++++++--- .../fornecedores/fornecedores.controller.ts | 15 +++++++++-- .../fornecedores/fornecedores.service.ts | 24 ++++++++++++++--- src/modules/insumos/insumos.controller.ts | 15 +++++++++-- src/modules/insumos/insumos.service.ts | 23 +++++++++++++--- 9 files changed, 138 insertions(+), 26 deletions(-) diff --git a/src/modules/categorias/categorias.service.ts b/src/modules/categorias/categorias.service.ts index 777ab74..5873a34 100644 --- a/src/modules/categorias/categorias.service.ts +++ b/src/modules/categorias/categorias.service.ts @@ -8,8 +8,6 @@ export class CategoriasService { constructor(private readonly prismaService: PrismaService) {} async findAllWithPagination(page: number, perPage: number, titulo_like? : string) { - - const skip = (page - 1) * perPage; let categorias = Categoria[""]; if(titulo_like){ @@ -26,9 +24,7 @@ export class CategoriasService { skip, take: perPage, }); - } - - + } return categorias ; } diff --git a/src/modules/clientes/clientes.controller.ts b/src/modules/clientes/clientes.controller.ts index 997ab01..d1d4892 100644 --- a/src/modules/clientes/clientes.controller.ts +++ b/src/modules/clientes/clientes.controller.ts @@ -21,10 +21,20 @@ export class ClientesController { create(@Body() createClienteDto: CreateClienteDto) { return this.clientesService.create(createClienteDto); } - @Get() - async findAll(){ - return this.clientesService.findAll() + @Header('Access-Control-Allow-Origin', '*') + @Header('Access-Control-Expose-Headers', 'X-Total-Count') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('nome_like') nome_like : string, @Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const clientes = await this.clientesService.findAllWithPagination( + page, + Number(perPage), + nome_like + ); + const total = await this.clientesService.countAllCliente(); + res.header('x-total-count',total); + return clientes } diff --git a/src/modules/clientes/clientes.service.ts b/src/modules/clientes/clientes.service.ts index 661869f..e43c027 100644 --- a/src/modules/clientes/clientes.service.ts +++ b/src/modules/clientes/clientes.service.ts @@ -2,18 +2,36 @@ import { Injectable } from '@nestjs/common'; import { CreateClienteDto } from './dto/create-cliente.dto'; import { UpdateClienteDto } from './dto/update-cliente.dto'; import { PrismaService } from '../../databases/prisma.service'; +import { Cliente } from './entities/cliente.entity'; @Injectable() export class ClientesService { constructor(private readonly prismaService: PrismaService) {} - async findAllWithPagination(page: number, perPage: number) { + async findAllWithPagination(page: number, perPage: number, nome_like? : string) { const skip = (page - 1) * perPage; - const clientes = await this.prismaService.cliente.findMany({ + let clientes = Cliente[""]; + if(nome_like){ + clientes = await this.prismaService.cliente.findMany({ + skip, + take: perPage, + where:{ + OR: [{ nome: { contains: nome_like } }, + { email: { contains: nome_like } }, + { rua: { contains: nome_like } }, + { nomeFantasia: { contains: nome_like } }, + { razaoSocial: { contains: nome_like } },], + }, + }); + }else{ + clientes = await this.prismaService.cliente.findMany({ skip, take: perPage, }); - return { clientes }; + } + + + return clientes ; } async findExistingCliente(id: number, termo: string) { diff --git a/src/modules/cotacoes/cotacoes.controller.ts b/src/modules/cotacoes/cotacoes.controller.ts index b9e21a8..d37168b 100644 --- a/src/modules/cotacoes/cotacoes.controller.ts +++ b/src/modules/cotacoes/cotacoes.controller.ts @@ -50,8 +50,19 @@ export class CotacoesController { } @Get() - async findAll(){ - return this.cotacoesService.findAll() + @Header('Access-Control-Allow-Origin', '*') + @Header('Access-Control-Expose-Headers', 'X-Total-Count') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('nome_like') nome_like : string, @Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const cotacoes = await this.cotacoesService.findAllWithPagination( + page, + Number(perPage), + nome_like + ); + const total = await this.cotacoesService.countAllCotacaos(); + res.header('x-total-count',total); + return cotacoes } @Get(':id') diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index 85a43f8..754f002 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -3,6 +3,7 @@ import { CreateCotacaoDto } from './dto/create-cotacao.dto'; import { UpdateCotacaoDto } from './dto/update-cotacao.dto'; import { PrismaService } from 'src/databases/prisma.service'; import { recotarDto } from './dto/recotar.dto'; +import { Cotacao } from './entities/cotacao.entity'; @Injectable() export class CotacoesService { @@ -37,14 +38,33 @@ export class CotacoesService { return newQuotation; } - async findAllWithPagination(page: number, perPage: number) { + async findAllWithPagination(page: number, perPage: number, nome_like? : string) { const skip = (page - 1) * perPage; - const cotacoes = await this.prismaService.cotacao.findMany({ + let cotacoes = Cotacao[""]; + if(nome_like){ + cotacoes = await this.prismaService.cotacao.findMany({ + skip, + take: perPage, + where:{ + OR: [{ insumo: { titulo: { contains: nome_like } }}, + { fornecedor: {nome: { contains: nome_like }} }, + { fornecedor: {nomeFantasia: { contains: nome_like }} }, + { fornecedor: {razaoSocial: { contains: nome_like }} }, + ], + }, + }); + }else{ + cotacoes = await this.prismaService.cotacao.findMany({ skip, take: perPage, }); - return { cotacoes }; + } + + + return cotacoes ; } + + async countAllCotacaos() { return await this.prismaService.cotacao.count({}); } diff --git a/src/modules/fornecedores/fornecedores.controller.ts b/src/modules/fornecedores/fornecedores.controller.ts index 0a1d3d9..6c3cd26 100644 --- a/src/modules/fornecedores/fornecedores.controller.ts +++ b/src/modules/fornecedores/fornecedores.controller.ts @@ -34,8 +34,19 @@ export class FornecedoresController { } @Get() - async findAll(){ - return this.fornecedoresService.findAll() + @Header('Access-Control-Allow-Origin', '*') + @Header('Access-Control-Expose-Headers', 'X-Total-Count') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('nome_like') nome_like : string, @Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||10; + const fornecedores = await this.fornecedoresService.findAllWithPagination( + page, + Number(perPage), + nome_like + ); + const total = await this.fornecedoresService.countAllFornecedor(); + res.header('x-total-count',total); + return fornecedores } @Get(':id') diff --git a/src/modules/fornecedores/fornecedores.service.ts b/src/modules/fornecedores/fornecedores.service.ts index a7a9743..7f08324 100644 --- a/src/modules/fornecedores/fornecedores.service.ts +++ b/src/modules/fornecedores/fornecedores.service.ts @@ -2,18 +2,36 @@ import { Injectable } from '@nestjs/common'; import { CreateFornecedorDto } from './dto/create-fornecedor.dto'; import { UpdateFornecedorDto } from './dto/update-fornecedor.dto'; import { PrismaService } from '../../databases/prisma.service'; +import { Fornecedor } from './entities/fornecedor.entity'; @Injectable() export class FornecedoresService { constructor(private readonly prismaService: PrismaService) {} - async findAllWithPagination(page: number, perPage: number) { + async findAllWithPagination(page: number, perPage: number, nome_like? : string) { const skip = (page - 1) * perPage; - const fornecedores = await this.prismaService.fornecedor.findMany({ + let fornecedores = Fornecedor[""]; + if(nome_like){ + fornecedores = await this.prismaService.fornecedor.findMany({ skip, take: perPage, + where:{ + OR: [{ nome: { contains: nome_like } }, + { email: { contains: nome_like } }, + { rua: { contains: nome_like } }, + { nomeFantasia: { contains: nome_like } }, + { razaoSocial: { contains: nome_like } },], + }, }); - return { fornecedores }; + }else{ + fornecedores = await this.prismaService.fornecedor.findMany({ + skip, + take: perPage, + }); + } + + + return fornecedores ; } async findOneByFornecedor(nome: string, email: string, telefone: string) { diff --git a/src/modules/insumos/insumos.controller.ts b/src/modules/insumos/insumos.controller.ts index 718a58b..a58ed48 100644 --- a/src/modules/insumos/insumos.controller.ts +++ b/src/modules/insumos/insumos.controller.ts @@ -34,8 +34,19 @@ export class InsumosController { } @Get() - async findAll(){ - return this.insumosService.findAll() + @Header('Access-Control-Allow-Origin', '*') + @Header('Access-Control-Expose-Headers', 'X-Total-Count') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||5; + const cotacoes = await this.insumosService.findAllWithPagination( + page, + Number(perPage), + titulo_like + ); + const total = await this.insumosService.countAll(); + res.header('x-total-count',total); + return cotacoes } @Get(':id') diff --git a/src/modules/insumos/insumos.service.ts b/src/modules/insumos/insumos.service.ts index 82f7899..b2aeab4 100644 --- a/src/modules/insumos/insumos.service.ts +++ b/src/modules/insumos/insumos.service.ts @@ -2,19 +2,36 @@ import { Injectable } from '@nestjs/common'; import { CreateInsumoDto } from './dto/create-insumo.dto'; import { UpdateInsumoDto } from './dto/update-insumo.dto'; import { PrismaService } from 'src/databases/prisma.service'; +import { Insumo } from './entities/insumo.entity'; @Injectable() export class InsumosService { constructor(private readonly prismaService: PrismaService) {} - async findAllWithPagination(page: number, perPage: number) { + async findAllWithPagination(page: number, perPage: number, titulo_like: string) { const skip = (page - 1) * perPage; - const insumos = await this.prismaService.insumo.findMany({ + let insumos = Insumo[""]; + if(titulo_like){ + insumos = await this.prismaService.insumo.findMany({ skip, take: perPage, + where:{ + OR: [{ titulo: { contains: titulo_like } }, + { unidadeMedida: { contains: titulo_like } }, + { descricao: { contains: titulo_like } }, + { categoria: {titulo: { contains: titulo_like }} }, + ], + }, }); + }else{ + insumos = await this.prismaService.insumo.findMany({ + skip, + take: perPage, + }); + } + - return { insumos }; + return insumos ; } async findOneByTitle(titulo: string) { From b4754ecfdfa38c3f6fc43c2ba86f2cdeec51b74a Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Sat, 4 Nov 2023 17:07:39 -0300 Subject: [PATCH 026/115] Docker and postgres --- .dockerignore | 2 ++ Dockerfile | 13 +++++++++++++ prisma/migrations/migration_lock.toml | 2 +- prisma/schema.prisma | 4 ++-- src/app.service.ts | 4 +++- src/main.ts | 9 +++++++-- 6 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..db4c6d9 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +dist +node_modules \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c28b106 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM node:18.0.0 + +WORKDIR /usr/src/api + +COPY . . + +RUN npm install --quiet --no-optional --no-fund --loglevel=error + +RUN npm run build + +EXPOSE 3000 + +CMD [ "npm", "run", "start:prod" ] \ No newline at end of file diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml index e5a788a..fbffa92 100644 --- a/prisma/migrations/migration_lock.toml +++ b/prisma/migrations/migration_lock.toml @@ -1,3 +1,3 @@ # Please do not edit this file manually # It should be added in your version-control system (i.e. Git) -provider = "mysql" \ No newline at end of file +provider = "postgresql" \ No newline at end of file diff --git a/prisma/schema.prisma b/prisma/schema.prisma index c15249f..54f285a 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -3,7 +3,7 @@ generator client { } datasource db { - provider = "mysql" + provider = "postgresql" url = env("DATABASE_URL") } @@ -95,7 +95,7 @@ model Orcamento { totalMateriais Float? status status @default(Pendente) prazoEstimadoProducao Int? - observacoes String? @db.MediumText + observacoes String? idCliente Int idPedido Int? pedido Pedido? diff --git a/src/app.service.ts b/src/app.service.ts index 927d7cc..bf53ed8 100644 --- a/src/app.service.ts +++ b/src/app.service.ts @@ -3,6 +3,8 @@ import { Injectable } from '@nestjs/common'; @Injectable() export class AppService { getHello(): string { - return 'Hello World!'; + return process.env.NODE_ENV + ? String(process.env.NODE_ENV) + : 'Servidor rodando'; } } diff --git a/src/main.ts b/src/main.ts index 11bf766..ce12dc0 100644 --- a/src/main.ts +++ b/src/main.ts @@ -5,7 +5,7 @@ import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.enableCors(); - + const config = new DocumentBuilder() .setTitle('Documentação com Swagger - Fábrica de Sinapse') .setDescription( @@ -29,7 +29,12 @@ async function bootstrap() { const document = SwaggerModule.createDocument(app, config); SwaggerModule.setup('api', app, document); - await app.listen(process.env.PORT ? Number(process.env.PORT) : 3333); + console.log( + 'Server running at port: ', + process.env.PORT ? Number(process.env.PORT) : 3000, + ); + + await app.listen(process.env.PORT ? Number(process.env.PORT) : 3000); } bootstrap(); From 9152863091b71a0fd89aa88cb4e0df948b8bd3a9 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Sat, 4 Nov 2023 18:56:06 -0300 Subject: [PATCH 027/115] =?UTF-8?q?Subindo=20pagina=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../insumos-produtos-base.controller.ts | 15 ++++++++-- .../insumos-produtos-base.service.ts | 30 ++++++++++++++----- .../produtos-base/produtos-base.controller.ts | 27 +++++++++-------- .../produtos-base/produtos-base.service.ts | 23 ++++++++++++-- src/modules/produtos/produtos.controller.ts | 15 ++++++++-- src/modules/produtos/produtos.service.ts | 23 ++++++++++++-- 6 files changed, 103 insertions(+), 30 deletions(-) diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts index 71319fd..9beb7c3 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts @@ -26,8 +26,19 @@ export class InsumosProdutosBaseController { } @Get() - async findAll(){ - return this.insumosProdutosBaseService.findAll() + @Header('Access-Control-Allow-Origin', '*') + @Header('Access-Control-Expose-Headers', 'X-Total-Count') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||5; + const insumosBase = await this.insumosProdutosBaseService.findAllWithPagination( + page, + Number(perPage), + titulo_like + ); + const total = await this.insumosProdutosBaseService.countAll(); + res.header('x-total-count',total); + return insumosBase } @Get(':id') diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts index 78b4158..361f458 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts @@ -2,20 +2,36 @@ import { Injectable } from '@nestjs/common'; import { CreateInsumosProdutosBaseDto } from './dto/create-insumo-produtos-base.dto'; import { UpdateInsumosProdutosBaseDto } from './dto/update-insumo-produtos-base.dto'; import { PrismaService } from '../../databases/prisma.service'; +import { InsumoProdutosBase } from './entities/insumo-produtos-base.entity'; @Injectable() export class InsumosProdutosBaseService { constructor(private readonly prismaService: PrismaService) {} - async findAllWithPagination(page: number, perPage: number) { + async findAllWithPagination(page: number, perPage: number, titulo_like: string) { const skip = (page - 1) * perPage; - const insumosProdutosBase = - await this.prismaService.insumoProdutoBase.findMany({ - skip, - take: perPage, - }); + let insumosProdutoBase = InsumoProdutosBase[""]; + if(titulo_like){ + insumosProdutoBase = await this.prismaService.insumoProdutoBase.findMany({ + skip, + take: perPage, + where:{ + OR: [ { insumos: {titulo: { contains: titulo_like }} }, + + { unidade: { contains: titulo_like } }, + + ], + }, + }); + }else{ + insumosProdutoBase = await this.prismaService.insumoProdutoBase.findMany({ + skip, + take: perPage, + }); + } + - return { insumosProdutosBase }; + return insumosProdutoBase ; } async create(createInsumosProdutosBaseDto: CreateInsumosProdutosBaseDto) { diff --git a/src/modules/produtos-base/produtos-base.controller.ts b/src/modules/produtos-base/produtos-base.controller.ts index 116c8d5..5381e46 100644 --- a/src/modules/produtos-base/produtos-base.controller.ts +++ b/src/modules/produtos-base/produtos-base.controller.ts @@ -22,17 +22,7 @@ import { response as res } from 'express'; export class ProdutosBaseController { constructor(private readonly produtosBaseService: ProdutosBaseService) {} - @Get('paginate') - async findAllWithPagination( - @Query('page') page: number, - @Query('perPage') perPage: number, - ) { - page = page; - perPage = perPage; - const totalcount = await this.produtosBaseService.countAll(); - res.set('x-total-count', totalcount.toString()); - return await this.produtosBaseService.findAllWithPagination(page, perPage); - } + @Get('count') countAll() { return this.produtosBaseService.countAll(); @@ -45,8 +35,19 @@ export class ProdutosBaseController { } @Get() - async findAll(){ - return this.produtosBaseService.findAll() + @Header('Access-Control-Allow-Origin', '*') + @Header('Access-Control-Expose-Headers', 'X-Total-Count') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||5; + const produtos = await this.produtosBaseService.findAllWithPagination( + page, + Number(perPage), + titulo_like + ); + const total = await this.produtosBaseService.countAll(); + res.header('x-total-count',total); + return produtos } @Get(':id') diff --git a/src/modules/produtos-base/produtos-base.service.ts b/src/modules/produtos-base/produtos-base.service.ts index fa11681..41d6017 100644 --- a/src/modules/produtos-base/produtos-base.service.ts +++ b/src/modules/produtos-base/produtos-base.service.ts @@ -2,18 +2,35 @@ import { Injectable } from '@nestjs/common'; import { CreateProdutosBaseDto } from './dto/create-produtos-base.dto'; import { UpdateProdutosBaseDto } from './dto/update-produtos-base.dto'; import { PrismaService } from 'src/databases/prisma.service'; +import { ProdutosBase } from './entities/produtos-base.entity'; @Injectable() export class ProdutosBaseService { constructor(private readonly prismaService: PrismaService) {} - async findAllWithPagination(page: number, perPage: number) { + async findAllWithPagination(page: number, perPage: number, titulo_like: string) { const skip = (page - 1) * perPage; - const produtosBase = await this.prismaService.produtoBase.findMany({ + let produtos = ProdutosBase[""]; + if(titulo_like){ + produtos = await this.prismaService.produtoBase.findMany({ skip, take: perPage, + where:{ + OR: [{ titulo: { contains: titulo_like } }, + { observacoes: { contains: titulo_like } }, + + ], + }, }); - return { produtosBase }; + }else{ + produtos = await this.prismaService.produtoBase.findMany({ + skip, + take: perPage, + }); + } + + + return produtos ; } async findOneByTitle(titulo: string) { diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index 6f6b3a9..dff6de6 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -54,8 +54,19 @@ export class ProdutosController { } @Get() - async findAll(){ - return this.produtosService.findAll() + @Header('Access-Control-Allow-Origin', '*') + @Header('Access-Control-Expose-Headers', 'X-Total-Count') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage||5; + const produtos = await this.produtosService.findAllWithPagination( + page, + Number(perPage), + titulo_like + ); + const total = await this.produtosService.countAll(); + res.header('x-total-count',total); + return produtos } @UsePipes(ValidationPipe) diff --git a/src/modules/produtos/produtos.service.ts b/src/modules/produtos/produtos.service.ts index a5a0e2f..e4a687a 100644 --- a/src/modules/produtos/produtos.service.ts +++ b/src/modules/produtos/produtos.service.ts @@ -5,6 +5,7 @@ import { PrismaService } from 'src/databases/prisma.service'; import { ProdutosBaseService } from '../produtos-base/produtos-base.service'; import { InsumosProdutosBaseService } from '../insumos-produtos-base/insumos-produtos-base.service'; import { addProdutoBaseDto } from './dto/addProdutoBase.dto'; +import { Produto } from './entities/produto.entity'; @Injectable() export class ProdutosService { @@ -14,13 +15,29 @@ export class ProdutosService { private readonly insumosProdutosBaseService: InsumosProdutosBaseService, ) {} - async findAllWithPagination(page: number, perPage: number) { + async findAllWithPagination(page: number, perPage: number, titulo_like: string) { const skip = (page - 1) * perPage; - const produtos = await this.prismaService.produto.findMany({ + console.log(titulo_like) + let produtos = Produto[""]; + if(titulo_like){ + produtos = await this.prismaService.produto.findMany({ skip, take: perPage, + where:{ + OR: [{ titulo: { contains: titulo_like } }, + + ], + }, }); - return { produtos }; + }else{ + produtos = await this.prismaService.produto.findMany({ + skip, + take: perPage, + }); + } + + + return produtos ; } async findOneByTitle(titulo: string) { return await this.prismaService.produto.findFirst({ From ad90a1c6d7559f35bae6077f0e5244767de04579 Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Sun, 5 Nov 2023 15:24:34 -0300 Subject: [PATCH 028/115] Update categorias.service.ts --- src/modules/categorias/categorias.service.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/modules/categorias/categorias.service.ts b/src/modules/categorias/categorias.service.ts index 5873a34..127b7da 100644 --- a/src/modules/categorias/categorias.service.ts +++ b/src/modules/categorias/categorias.service.ts @@ -10,6 +10,9 @@ export class CategoriasService { async findAllWithPagination(page: number, perPage: number, titulo_like? : string) { const skip = (page - 1) * perPage; let categorias = Categoria[""]; + if(page === null && perPage === null){ + perPage = await this.countAllCategorias() + } if(titulo_like){ categorias = await this.prismaService.categoria.findMany({ skip, From 7403a277dc0cd961524a3119b8db520ef9b9b9d8 Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Sun, 5 Nov 2023 17:23:48 -0300 Subject: [PATCH 029/115] categoria pagination --- src/modules/categorias/categorias.controller.ts | 2 +- src/modules/categorias/categorias.service.ts | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/modules/categorias/categorias.controller.ts b/src/modules/categorias/categorias.controller.ts index afc3f8a..f4590b7 100644 --- a/src/modules/categorias/categorias.controller.ts +++ b/src/modules/categorias/categorias.controller.ts @@ -41,7 +41,7 @@ export class CategoriasController { @Header('Access-Control-Expose-Headers', 'X-Total-Count') async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { page = page||1; - perPage = perPage||10; + perPage = perPage|| await this.countAll(); const categorias = await this.categoriasService.findAllWithPagination( page, Number(perPage), diff --git a/src/modules/categorias/categorias.service.ts b/src/modules/categorias/categorias.service.ts index 127b7da..5873a34 100644 --- a/src/modules/categorias/categorias.service.ts +++ b/src/modules/categorias/categorias.service.ts @@ -10,9 +10,6 @@ export class CategoriasService { async findAllWithPagination(page: number, perPage: number, titulo_like? : string) { const skip = (page - 1) * perPage; let categorias = Categoria[""]; - if(page === null && perPage === null){ - perPage = await this.countAllCategorias() - } if(titulo_like){ categorias = await this.prismaService.categoria.findMany({ skip, From b1915e10ebc953ab84ba1edde7fb4fb91ec91083 Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Sun, 5 Nov 2023 17:57:19 -0300 Subject: [PATCH 030/115] Update categorias.controller.ts --- src/modules/categorias/categorias.controller.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/categorias/categorias.controller.ts b/src/modules/categorias/categorias.controller.ts index f4590b7..0721ad4 100644 --- a/src/modules/categorias/categorias.controller.ts +++ b/src/modules/categorias/categorias.controller.ts @@ -40,8 +40,8 @@ export class CategoriasController { @Header('Access-Control-Allow-Origin', '*') @Header('Access-Control-Expose-Headers', 'X-Total-Count') async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { - page = page||1; - perPage = perPage|| await this.countAll(); + page = page || 1; + perPage = perPage || await this.countAll(); const categorias = await this.categoriasService.findAllWithPagination( page, Number(perPage), From a1dd83f1251a816a7795eecdb142f9cbbb4d650c Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Sun, 5 Nov 2023 18:45:18 -0300 Subject: [PATCH 031/115] raer --- src/modules/pedidos/pedidos.service.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/modules/pedidos/pedidos.service.ts b/src/modules/pedidos/pedidos.service.ts index cbfdd2b..de036bb 100644 --- a/src/modules/pedidos/pedidos.service.ts +++ b/src/modules/pedidos/pedidos.service.ts @@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common'; import { CreatePedidoDto } from './dto/create-pedido.dto'; import { UpdatePedidoDto } from './dto/update-pedido.dto'; import { PrismaService } from 'src/databases/prisma.service'; +import { Pedido } from './entities/pedido.entity'; @Injectable() export class PedidosService { @@ -10,14 +11,26 @@ export class PedidosService { return await this.prismaService.pedido.count({}); } - async findAllWithPagination(page: number, perPage: number) { + async findAllWithPagination(page: number, perPage: number, status_like? : string) { const skip = (page - 1) * perPage; - const pedidos = await this.prismaService.pedido.findMany({ + let pedidos = Pedido[""]; + if(status_like){ + pedidos = await this.prismaService.pedido.findMany({ skip, take: perPage, + where:{ + OR: [{ status: { contains: status_like } }], + }, }); - return { pedidos }; + }else{ + pedidos = await this.prismaService.pedido.findMany({ + skip, + take: perPage, + }); + } + return pedidos ; } + async create(createPedidoDto: CreatePedidoDto) { const orcamentoExists = await this.prismaService.orcamento.findFirst({ where: { From 64874fb8f47f561ef3bf83ad7987bec1a7959992 Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Sun, 5 Nov 2023 19:03:09 -0300 Subject: [PATCH 032/115] pedidos --- src/modules/pedidos/pedidos.controller.ts | 16 ++++++++++++++-- src/modules/pedidos/pedidos.service.ts | 5 +++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/modules/pedidos/pedidos.controller.ts b/src/modules/pedidos/pedidos.controller.ts index 3c5c352..b799b81 100644 --- a/src/modules/pedidos/pedidos.controller.ts +++ b/src/modules/pedidos/pedidos.controller.ts @@ -17,6 +17,7 @@ import { CreatePedidoDto } from './dto/create-pedido.dto'; import { UpdatePedidoDto } from './dto/update-pedido.dto'; import { ApiTags } from '@nestjs/swagger'; import { response as res } from 'express'; +import { status } from '@prisma/client'; @ApiTags('pedidos') @Controller('pedidos') export class PedidosController { @@ -34,8 +35,19 @@ export class PedidosController { } @Get() - async findAll(){ - return this.pedidosService.findAll() + @Header('Access-Control-Allow-Origin', '*') + @Header('Access-Control-Expose-Headers', 'X-Total-Count') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') status_like : status, @Res({ passthrough: true }) res) { + page = page || 1; + perPage = perPage || await this.countAll(); + const pedidos = await this.pedidosService.findAllWithPagination( + page, + Number(perPage), + status_like + ); + const total = await this.pedidosService.countAll(); + res.header('x-total-count',total); + return pedidos } @Get(':id') diff --git a/src/modules/pedidos/pedidos.service.ts b/src/modules/pedidos/pedidos.service.ts index de036bb..d3dee3d 100644 --- a/src/modules/pedidos/pedidos.service.ts +++ b/src/modules/pedidos/pedidos.service.ts @@ -3,6 +3,7 @@ import { CreatePedidoDto } from './dto/create-pedido.dto'; import { UpdatePedidoDto } from './dto/update-pedido.dto'; import { PrismaService } from 'src/databases/prisma.service'; import { Pedido } from './entities/pedido.entity'; +import { status } from '@prisma/client'; @Injectable() export class PedidosService { @@ -11,7 +12,7 @@ export class PedidosService { return await this.prismaService.pedido.count({}); } - async findAllWithPagination(page: number, perPage: number, status_like? : string) { + async findAllWithPagination(page: number, perPage: number, status_like? : status) { const skip = (page - 1) * perPage; let pedidos = Pedido[""]; if(status_like){ @@ -19,7 +20,7 @@ export class PedidosService { skip, take: perPage, where:{ - OR: [{ status: { contains: status_like } }], + status: status_like }, }); }else{ From a3e2c6c89761128c8bb8c56cffc6fb00fd1f15c4 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Sun, 5 Nov 2023 19:51:29 -0300 Subject: [PATCH 033/115] update: await this.countAll clientes --- src/modules/clientes/clientes.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/clientes/clientes.controller.ts b/src/modules/clientes/clientes.controller.ts index d1d4892..346e7f5 100644 --- a/src/modules/clientes/clientes.controller.ts +++ b/src/modules/clientes/clientes.controller.ts @@ -26,7 +26,7 @@ export class ClientesController { @Header('Access-Control-Expose-Headers', 'X-Total-Count') async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('nome_like') nome_like : string, @Res({ passthrough: true }) res) { page = page||1; - perPage = perPage||10; + perPage = perPage||await this.countAll(); const clientes = await this.clientesService.findAllWithPagination( page, Number(perPage), From d72f4b938b3461470a87d6a6bd620c2cd2b251a7 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Sun, 5 Nov 2023 19:51:37 -0300 Subject: [PATCH 034/115] update: await this.countAll cotacoes --- src/modules/cotacoes/cotacoes.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/cotacoes/cotacoes.controller.ts b/src/modules/cotacoes/cotacoes.controller.ts index d37168b..8695915 100644 --- a/src/modules/cotacoes/cotacoes.controller.ts +++ b/src/modules/cotacoes/cotacoes.controller.ts @@ -54,7 +54,7 @@ export class CotacoesController { @Header('Access-Control-Expose-Headers', 'X-Total-Count') async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('nome_like') nome_like : string, @Res({ passthrough: true }) res) { page = page||1; - perPage = perPage||10; + perPage = perPage||await this.countAll(); const cotacoes = await this.cotacoesService.findAllWithPagination( page, Number(perPage), From e1df9191dbd5d2a9237573b77bf6492a92ab00c4 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Sun, 5 Nov 2023 19:51:45 -0300 Subject: [PATCH 035/115] update: await this.countAll fornecedores --- src/modules/fornecedores/fornecedores.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/fornecedores/fornecedores.controller.ts b/src/modules/fornecedores/fornecedores.controller.ts index 6c3cd26..1eec70c 100644 --- a/src/modules/fornecedores/fornecedores.controller.ts +++ b/src/modules/fornecedores/fornecedores.controller.ts @@ -38,7 +38,7 @@ export class FornecedoresController { @Header('Access-Control-Expose-Headers', 'X-Total-Count') async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('nome_like') nome_like : string, @Res({ passthrough: true }) res) { page = page||1; - perPage = perPage||10; + perPage = perPage||await this.countAll(); const fornecedores = await this.fornecedoresService.findAllWithPagination( page, Number(perPage), From e5dd5eaa1768ab42b6a713f1dd5087610289cabb Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Sun, 5 Nov 2023 19:51:54 -0300 Subject: [PATCH 036/115] update: await this.countAll insumos --- src/modules/insumos/insumos.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/insumos/insumos.controller.ts b/src/modules/insumos/insumos.controller.ts index a58ed48..4f1ef0f 100644 --- a/src/modules/insumos/insumos.controller.ts +++ b/src/modules/insumos/insumos.controller.ts @@ -38,7 +38,7 @@ export class InsumosController { @Header('Access-Control-Expose-Headers', 'X-Total-Count') async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { page = page||1; - perPage = perPage||5; + perPage = perPage||await this.countAll(); const cotacoes = await this.insumosService.findAllWithPagination( page, Number(perPage), From 346bce7bbe6132aa1725daaf214fffe9beceb7ae Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Sun, 5 Nov 2023 19:52:04 -0300 Subject: [PATCH 037/115] update: await this.countAll insumos-produtos-base --- .../insumos-produtos-base/insumos-produtos-base.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts index 9beb7c3..470a1ef 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts @@ -30,7 +30,7 @@ export class InsumosProdutosBaseController { @Header('Access-Control-Expose-Headers', 'X-Total-Count') async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { page = page||1; - perPage = perPage||5; + perPage = perPage||await this.countAll(); const insumosBase = await this.insumosProdutosBaseService.findAllWithPagination( page, Number(perPage), From 0590816eb7b89da90f109c17ddd545e6bdd9410c Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Sun, 5 Nov 2023 19:52:27 -0300 Subject: [PATCH 038/115] update: await this.countAll titulo-like number --- .../orcamentos/orcamentos.controller.ts | 15 +++++++++++++-- src/modules/orcamentos/orcamentos.service.ts | 19 ++++++++++++++++--- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/modules/orcamentos/orcamentos.controller.ts b/src/modules/orcamentos/orcamentos.controller.ts index af93afa..dfcda71 100644 --- a/src/modules/orcamentos/orcamentos.controller.ts +++ b/src/modules/orcamentos/orcamentos.controller.ts @@ -14,8 +14,19 @@ export class OrcamentosController { } @Get() - async findAll(){ - return this.orcamentosService.findAll() + @Header('Access-Control-Allow-Origin', '*') + @Header('Access-Control-Expose-Headers', 'X-Total-Count') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : number, @Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage|| await this.countAll(); + const orcamentos = await this.orcamentosService.findAllWithPagination( + page, + Number(perPage), + titulo_like + ); + const total = await this.orcamentosService.countAll(); + res.header('x-total-count',total); + return orcamentos } @Post() diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index f5b0cdf..bc78367 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -3,6 +3,7 @@ import { CreateOrcamentoDto } from './dto/create-orcamento.dto'; import { UpdateOrcamentoDto } from './dto/update-orcamento.dto'; import { PrismaService } from 'src/databases/prisma.service'; import { ProdutosService } from '../produtos/produtos.service'; +import { Orcamento } from './entities/orcamento.entity'; @Injectable() export class OrcamentosService { @@ -18,13 +19,25 @@ export class OrcamentosService { return await this.prismaService.cliente.findFirst({ where: { id } }); } - async findAllWithPagination(page: number, perPage: number) { + async findAllWithPagination(page: number, perPage: number, titulo_like? : number) { const skip = (page - 1) * perPage; - const orcamentos = await this.prismaService.orcamento.findMany({ + let orcamentos = Orcamento[""]; + if(titulo_like){ + orcamentos = await this.prismaService.orcamento.findMany({ skip, take: perPage, + where:{ + OR: [{id: {equals: titulo_like }}, + {idCliente : {equals: titulo_like}}], + }, }); - return { orcamentos }; + }else{ + orcamentos = await this.prismaService.categoria.findMany({ + skip, + take: perPage, + }); + } + return orcamentos ; } async create(createOrcamentoDto: CreateOrcamentoDto) { From 4f5af885edd678926b9e73f8681a1e226d1d743a Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Sun, 5 Nov 2023 19:52:40 -0300 Subject: [PATCH 039/115] update: await this.countAll produtos --- src/modules/produtos/produtos.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index dff6de6..911cc6c 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -58,7 +58,7 @@ export class ProdutosController { @Header('Access-Control-Expose-Headers', 'X-Total-Count') async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { page = page||1; - perPage = perPage||5; + perPage = perPage||await this.countAll(); const produtos = await this.produtosService.findAllWithPagination( page, Number(perPage), From 05fb9fead85827368ef18a16964dbf70759163ec Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Sun, 5 Nov 2023 19:52:48 -0300 Subject: [PATCH 040/115] update: await this.countAll produtos-base --- src/modules/produtos-base/produtos-base.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/produtos-base/produtos-base.controller.ts b/src/modules/produtos-base/produtos-base.controller.ts index 5381e46..72df980 100644 --- a/src/modules/produtos-base/produtos-base.controller.ts +++ b/src/modules/produtos-base/produtos-base.controller.ts @@ -39,7 +39,7 @@ export class ProdutosBaseController { @Header('Access-Control-Expose-Headers', 'X-Total-Count') async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { page = page||1; - perPage = perPage||5; + perPage = perPage||await this.countAll(); const produtos = await this.produtosBaseService.findAllWithPagination( page, Number(perPage), From 688c404b31a4f8754024f31e6589ceb8d0a15fa0 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Sun, 5 Nov 2023 19:53:18 -0300 Subject: [PATCH 041/115] update: findall e findall pagination usuarios --- src/modules/usuarios/usuarios.controller.ts | 15 +++++++++++++-- src/modules/usuarios/usuarios.service.ts | 20 +++++++++++++++++--- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/modules/usuarios/usuarios.controller.ts b/src/modules/usuarios/usuarios.controller.ts index 9caaf5b..e806850 100644 --- a/src/modules/usuarios/usuarios.controller.ts +++ b/src/modules/usuarios/usuarios.controller.ts @@ -34,8 +34,19 @@ export class UsuariosController { } @Get() - async findAll(){ - return this.usuariosService.findAll() + @Header('Access-Control-Allow-Origin', '*') + @Header('Access-Control-Expose-Headers', 'X-Total-Count') + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { + page = page||1; + perPage = perPage|| await this.countAll(); + const usuarios = await this.usuariosService.findAllWithPagination( + page, + Number(perPage), + titulo_like + ); + const total = await this.usuariosService.countAll(); + res.header('x-total-count',total); + return usuarios } @Get(':id') diff --git a/src/modules/usuarios/usuarios.service.ts b/src/modules/usuarios/usuarios.service.ts index f4e75d8..5f2f6e4 100644 --- a/src/modules/usuarios/usuarios.service.ts +++ b/src/modules/usuarios/usuarios.service.ts @@ -2,18 +2,32 @@ import { Injectable } from '@nestjs/common'; import { CreateUsuarioDto } from './dto/create-usuario.dto'; import { UpdateUsuarioDto } from './dto/update-usuario.dto'; import { PrismaService } from '../../databases/prisma.service'; +import { Usuario } from './entities/usuario.entity'; @Injectable() export class UsuariosService { constructor(private readonly prismaService: PrismaService) {} - async findAllWithPagination(page: number, perPage: number) { + async findAllWithPagination(page: number, perPage: number, titulo_like? : string) { const skip = (page - 1) * perPage; - const usuarios = await this.prismaService.usuario.findMany({ + let usuarios = Usuario[""]; + if(titulo_like){ + usuarios = await this.prismaService.usuario.findMany({ skip, take: perPage, + where:{ + OR: [{ nome: { contains: titulo_like } }, + { email: { contains: titulo_like } }, + { cpf: { contains: titulo_like}}], + }, }); - return { usuarios }; + }else{ + usuarios = await this.prismaService.categoria.findMany({ + skip, + take: perPage, + }); + } + return usuarios ; } async create(createUsuarioDto: CreateUsuarioDto) { From ea9412a13fd28aa871655e641b0439bdf4a8c4b6 Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Sun, 5 Nov 2023 19:58:09 -0300 Subject: [PATCH 042/115] =?UTF-8?q?removidas=20valida=C3=A7=C3=B5es=20das?= =?UTF-8?q?=20entities?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../categorias/entities/categoria.entity.ts | 8 ---- .../clientes/entities/cliente.entity.ts | 46 ------------------- .../cotacoes/entities/cotacao.entity.ts | 12 ----- .../entities/fornecedor.entity.ts | 38 --------------- .../entities/insumo-produtos-base.entity.ts | 9 ---- src/modules/insumos/entities/insumo.entity.ts | 9 ---- .../entities/lista-insumo.entity.ts | 13 ------ .../orcamentos/entities/orcamento.entity.ts | 22 --------- src/modules/pedidos/entities/pedido.entity.ts | 7 --- .../entities/produtos-base.entity.ts | 5 -- .../produtos/entities/produto.entity.ts | 11 ----- .../usuarios/entities/usuario.entity.ts | 16 ------- 12 files changed, 196 deletions(-) diff --git a/src/modules/categorias/entities/categoria.entity.ts b/src/modules/categorias/entities/categoria.entity.ts index 7e14eba..3ec1282 100644 --- a/src/modules/categorias/entities/categoria.entity.ts +++ b/src/modules/categorias/entities/categoria.entity.ts @@ -1,15 +1,7 @@ -import { IsInt, IsNotEmpty, IsString, ValidateIf } from 'class-validator'; - export class Categoria { id: number; - @IsNotEmpty({message: 'O tipo não pode estar vázio'}) - @IsString({message: 'O tipo deve ser uma string'}) tipo: string; - @IsNotEmpty({message: 'O titulo não pode estar vázio'}) - @IsString({message: 'O titulo deve ser uma string'}) titulo: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({message: 'A descrição deve ser uma string'}) descricao?: string; createdAt: Date; updatedAt: Date; diff --git a/src/modules/clientes/entities/cliente.entity.ts b/src/modules/clientes/entities/cliente.entity.ts index 2042254..87729f0 100644 --- a/src/modules/clientes/entities/cliente.entity.ts +++ b/src/modules/clientes/entities/cliente.entity.ts @@ -1,69 +1,23 @@ import { contaTipo } from '@prisma/client'; -import { - IsEmail, - IsEnum, - IsNotEmpty, - IsNumberString, - IsString, - Matches, - ValidateIf, -} from 'class-validator'; export class Cliente { id: number; - @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) - @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email: string; - @IsNotEmpty({ message: 'O telefone não pode estar vazio' }) - @IsNumberString({}, { message: 'O telefone inserido não é válido' }) telefone: string; - @IsNotEmpty({ message: 'O tipo da conta não pode estar vazio' }) - @IsEnum(contaTipo, { - message: 'O tipo da conta não condiz com as opções disponíveis', - }) contaTipo: contaTipo; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'O nome inserido não é válido' }) - @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; - @ValidateIf((object, value) => value !== undefined) - @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; - @ValidateIf((object, value) => value !== undefined) - @IsNumberString({}, { message: 'O RG inserido não é válido' }) rg?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'O nome fantasia inserido não é válido' }) nomeFantasia?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A razão social inserida não é válida' }) razaoSocial?: string; - @ValidateIf((object, value) => value !== undefined) - @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) cnpj?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'O país inserido não é válido' }) pais?: string; - @ValidateIf((object, value) => value !== undefined) - @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'O estado inserido não é válido' }) estado?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A rua inserida não é válida' }) rua?: string; - @ValidateIf((object, value) => value !== undefined) - @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; createdAt: Date; updatedAt: Date; diff --git a/src/modules/cotacoes/entities/cotacao.entity.ts b/src/modules/cotacoes/entities/cotacao.entity.ts index 359af69..61d40d8 100644 --- a/src/modules/cotacoes/entities/cotacao.entity.ts +++ b/src/modules/cotacoes/entities/cotacao.entity.ts @@ -1,22 +1,10 @@ -import { IsDateString, IsNotEmpty, IsNumber, IsString } from 'class-validator'; - export class Cotacao { id: number; - @IsNotEmpty({ message: 'A data não pode estar vazia' }) - @IsDateString({}, { message: 'A data inserida não é válida' }) data: Date; obsoleta: boolean; - @IsNotEmpty({ message: 'O valor não pode estar vazio' }) - @IsNumber({}, { message: 'O valor inserido não é válido' }) valor: number; - @IsNotEmpty({ message: 'O fornecedor não pode estar vazio' }) - @IsNumber({}, { message: 'O fornecedor inserido não é válido' }) idFornecedor: number; - @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) - @IsNumber({}, { message: 'O insumo inserido não é válido' }) idInsumo: number; - @IsNotEmpty({ message: 'A unidade não pode estar vazia' }) - @IsString({ message: 'A unidade inserida não é válida' }) unidade: string; createdAt: Date; updatedAt: Date; diff --git a/src/modules/fornecedores/entities/fornecedor.entity.ts b/src/modules/fornecedores/entities/fornecedor.entity.ts index 948e3a4..f1e92f7 100644 --- a/src/modules/fornecedores/entities/fornecedor.entity.ts +++ b/src/modules/fornecedores/entities/fornecedor.entity.ts @@ -1,61 +1,23 @@ import { contaTipo } from '@prisma/client'; -import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches, ValidateIf } from 'class-validator'; export class Fornecedor { id: number; - @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) - @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email: string; - @IsNotEmpty({ message: 'O telefone não pode estar vazio' }) - @IsNumberString({}, { message: 'O telefone inserido não é válido' }) telefone: string; - @IsNotEmpty({ message: 'O tipo da conta não pode estar vazio' }) - @IsEnum(contaTipo, { - message: 'O tipo da conta não condiz com as opções disponíveis', - }) contaTipo: contaTipo; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'O nome inserido não é válido' }) - @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome?: string; - @ValidateIf((object, value) => value !== undefined) - @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; - @ValidateIf((object, value) => value !== undefined) - @IsNumberString({}, { message: 'O RG inserido não é válido' }) rg?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'O nome fantasia inserido não é válido' }) nomeFantasia?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A razão social inserida não é válida' }) razaoSocial?: string; - @ValidateIf((object, value) => value !== undefined) - @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) cnpj?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'O país inserido não é válido' }) pais?: string; - @ValidateIf((object, value) => value !== undefined) - @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'O estado inserido não é válido' }) estado?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A rua inserida não é válida' }) rua?: string; - @ValidateIf((object, value) => value !== undefined) - @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; createdAt: Date; updatedAt: Date; diff --git a/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts b/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts index d69405a..d3545c3 100644 --- a/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts +++ b/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts @@ -1,20 +1,11 @@ import { ProdutoBase } from '@prisma/client'; -import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; import { Insumo } from 'src/modules/insumos/entities/insumo.entity'; export class InsumoProdutosBase { id: number; - @IsNotEmpty({message: 'A quantidade não pode estar vazia'}) - @IsNumber({},{message: 'A quantidade inserida não é válida'}) quantidade: number; - @IsNotEmpty({message: 'O produto base não pode estar vazio'}) - @IsNumber({},{message: 'O produto base inserido não é válido'}) idProdutoBase: number; - @IsNotEmpty({message: 'O insumo não pode estar vazio'}) - @IsNumber({},{message: 'O insumo inserido não é válido'}) idInsumo: number; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A unidade inserida não é válida' }) unidade: string; produtoBase: ProdutoBase; insumo: Insumo; diff --git a/src/modules/insumos/entities/insumo.entity.ts b/src/modules/insumos/entities/insumo.entity.ts index 91af0b0..3f40fc2 100644 --- a/src/modules/insumos/entities/insumo.entity.ts +++ b/src/modules/insumos/entities/insumo.entity.ts @@ -1,19 +1,10 @@ -import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; import { Categoria } from '../../categorias/entities/categoria.entity'; export class Insumo { id: number; - @IsNotEmpty({message: 'O titulo não pode estar vazio'}) - @IsString({message: 'O titulo inserido não é válido'}) titulo: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({message: 'A descrição inserida não é válida'}) descricao?: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({message: 'A unidade de medida inserida não é válida'}) unidadeMedida?: string; - @ValidateIf((object, value) => value !== undefined) - @IsNumber({}, { message: 'A categoria inserida não é válida' }) idCategoria?: number; categoria?: Categoria; createdAt: Date; diff --git a/src/modules/lista-insumos/entities/lista-insumo.entity.ts b/src/modules/lista-insumos/entities/lista-insumo.entity.ts index 42c4b8e..6b04e72 100644 --- a/src/modules/lista-insumos/entities/lista-insumo.entity.ts +++ b/src/modules/lista-insumos/entities/lista-insumo.entity.ts @@ -1,27 +1,14 @@ -import { IsNotEmpty, IsNumber, IsNumberString, IsString, ValidateIf } from 'class-validator'; import { Cotacao } from 'src/modules/cotacoes/entities/cotacao.entity'; import { Insumo } from 'src/modules/insumos/entities/insumo.entity'; import { Produto } from 'src/modules/produtos/entities/produto.entity'; export class ListaInsumo { id: number; - @IsNotEmpty({ message: 'A quantidade não pode estar vazia' }) - @IsNumber({}, { message: 'A quantidade inserida não é válida' }) quantidade: number; - @IsNotEmpty({ message: 'O produto não pode estar vazio' }) - @IsNumber({}, { message: 'O produto inserido não é válido' }) idProduto: number; - @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) - @IsNumber({}, { message: 'O insumo inserido não é válido' }) idInsumo: number; - @ValidateIf((object, value) => value !== undefined) - @IsNumber({}, { message: 'A cotação inserida não é válida' }) idCotacao?: number; - @ValidateIf((object, value) => value !== undefined) - @IsString() unidade?: string; - @ValidateIf((object, value) => value !== undefined) - @IsNumberString({},{message: 'O valor unitário inserido não é válido'}) valorUnitario?: number; produto?: Produto; insumo?: Insumo; diff --git a/src/modules/orcamentos/entities/orcamento.entity.ts b/src/modules/orcamentos/entities/orcamento.entity.ts index 886e539..120da8d 100644 --- a/src/modules/orcamentos/entities/orcamento.entity.ts +++ b/src/modules/orcamentos/entities/orcamento.entity.ts @@ -1,38 +1,16 @@ import { Cliente } from 'src/modules/clientes/entities/cliente.entity'; import { Produto } from 'src/modules/produtos/entities/produto.entity'; import { status } from '@prisma/client'; -import { - IsDateString, - IsEnum, - IsNotEmpty, - IsNumber, - IsString, - ValidateIf, -} from 'class-validator'; export class Orcamento { id: Number; - @ValidateIf((object, value) => value !== undefined) - @IsDateString({},{ message: 'A validade inserida não é válida' }) validade?: Date; dataOrcamento: Date; - @ValidateIf((object, value) => value !== undefined) - @IsNumber({}, { message: 'O valor de mão de obra inserido não é válido' }) totalMaoObra?: number; - @ValidateIf((object, value) => value !== undefined) - @IsNumber({}, { message: 'O valor total de materiais inserido não é válido' }) totalMateriais?: number; - @IsNotEmpty({ message: 'O status não pode estar vazio' }) - @IsEnum(status, { message: 'O status inserido não é válido' }) status: status; - @ValidateIf((object, value) => value !== undefined) - @IsNumber({}, { message: 'O prazo estimado inserido não é válido' }) prazoEstimadoProducao?: number; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; - @IsNotEmpty({ message: 'O cliente não pode estar vazio' }) - @IsNumber({}, { message: 'O cliente inserido não é válido' }) idCliente: number; cliente: Cliente; createdAt: Date; diff --git a/src/modules/pedidos/entities/pedido.entity.ts b/src/modules/pedidos/entities/pedido.entity.ts index d2d6b6e..1c0a87d 100644 --- a/src/modules/pedidos/entities/pedido.entity.ts +++ b/src/modules/pedidos/entities/pedido.entity.ts @@ -1,17 +1,10 @@ import { status } from '@prisma/client'; import { Orcamento } from '../../orcamentos/entities/orcamento.entity'; -import { IsEnum, IsNotEmpty, IsNumber } from 'class-validator'; export class Pedido { id: number; - @IsNotEmpty({ message: 'O pagamento não pode estar vazio' }) - @IsNumber({}, { message: 'O pagamento inserido não é válido' }) pagamento: number; - @IsNotEmpty({ message: 'O status não pode estar vazio' }) - @IsEnum(status, { message: 'O status inserido não é válido' }) status: status; - @IsNotEmpty({ message: 'O orçamento não pode estar vazio' }) - @IsNumber({}, { message: 'O orçamento inserido não é válido' }) idOrcamento: number; orcamentos: Orcamento; createdAt: Date; diff --git a/src/modules/produtos-base/entities/produtos-base.entity.ts b/src/modules/produtos-base/entities/produtos-base.entity.ts index 639234d..54252e8 100644 --- a/src/modules/produtos-base/entities/produtos-base.entity.ts +++ b/src/modules/produtos-base/entities/produtos-base.entity.ts @@ -1,13 +1,8 @@ import { InsumoProdutoBase } from '@prisma/client'; -import { IsNotEmpty, IsString, ValidateIf } from 'class-validator'; export class ProdutosBase { id: number; - @IsNotEmpty({ message: 'O titulo não pode estar vazio' }) - @IsString({ message: 'O titulo inserido não é válido' }) titulo: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; insumosProdutosBase: InsumoProdutoBase[]; createdAt: Date; diff --git a/src/modules/produtos/entities/produto.entity.ts b/src/modules/produtos/entities/produto.entity.ts index 52ec69a..1178063 100644 --- a/src/modules/produtos/entities/produto.entity.ts +++ b/src/modules/produtos/entities/produto.entity.ts @@ -1,26 +1,15 @@ -import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; import { ListaInsumo } from 'src/modules/lista-insumos/entities/lista-insumo.entity'; import { Orcamento } from 'src/modules/orcamentos/entities/orcamento.entity'; export class Produto { id: number; - @IsNotEmpty({ message: 'O titulo não pode estar vazio' }) - @IsString({ message: 'O titulo inserido não é válido' }) titulo: string; - @ValidateIf((object, value) => value !== undefined) - @IsNumber({}, { message: 'A quantidade inserida não é válida' }) quantidade?: number; - @ValidateIf((object, value) => value !== undefined) - @IsNumber({}, { message: 'O valor unitário inserido não é válido' }) valorUnitario?: number; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; listaInsumos: ListaInsumo[]; createdAt: Date; updatedAt: Date; Orcamento?: Orcamento; - @IsNotEmpty({ message: 'O orçamento não pode estar vazio' }) - @IsNumber({}, { message: 'O orçamento inserido não é válido' }) orcamentoId: number; } diff --git a/src/modules/usuarios/entities/usuario.entity.ts b/src/modules/usuarios/entities/usuario.entity.ts index cba665a..acb0217 100644 --- a/src/modules/usuarios/entities/usuario.entity.ts +++ b/src/modules/usuarios/entities/usuario.entity.ts @@ -1,29 +1,13 @@ import { tipoUsuario } from '@prisma/client'; -import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches, ValidateIf } from 'class-validator'; export class Usuario { id: number; - @IsNotEmpty({message: 'O tipo do usuário não poder estar vazio'}) - @IsEnum(tipoUsuario, {message: 'O tipo de usuário inserido não é válido'}) tipoUsuario: tipoUsuario; - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'O nome inserido não é válido' }) - @Matches(/^[a-zA-Z -]*$/, { message: 'O nome só pode ter letras' }) nome: string; - @ValidateIf((object, value) => value !== undefined) - @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf: string; - @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) - @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email: string; - @IsNotEmpty({ message: 'O telefone não pode estar vazio' }) - @IsNumberString({}, { message: 'O telefone inserido não é válido' }) telefone: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({message: 'A senha inserida não é válida'}) senha: string; - @ValidateIf((object, value) => value !== undefined) - @IsString({message: 'O token inserido não é válido'}) token: string; createdAt: Date; updatedAt: Date; From 14e68dfb66d1d7a33b99725af1fbd6e35a4dc213 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Mon, 6 Nov 2023 05:24:48 -0300 Subject: [PATCH 043/115] Create .eslintignore --- .eslintignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .eslintignore diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..76add87 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +node_modules +dist \ No newline at end of file From e2622fb0c6396bb22ee87735e81f0549dc740484 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Mon, 6 Nov 2023 17:39:20 -0300 Subject: [PATCH 044/115] Auto seed database --- Dockerfile | 4 +- package-lock.json | 17 +++++ package.json | 4 + prisma/seed.ts | 183 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 prisma/seed.ts diff --git a/Dockerfile b/Dockerfile index c28b106..ee001cd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,4 +10,6 @@ RUN npm run build EXPOSE 3000 -CMD [ "npm", "run", "start:prod" ] \ No newline at end of file +CMD [ "npm", "run", "start:prod" ] + +RUN npx prisma reset \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 21e0534..5e96a84 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "swagger-ui-express": "^5.0.0" }, "devDependencies": { + "@faker-js/faker": "^8.2.0", "@nestjs/cli": "^10.0.0", "@nestjs/schematics": "^10.0.0", "@nestjs/testing": "^10.0.0", @@ -941,6 +942,22 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@faker-js/faker": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-8.2.0.tgz", + "integrity": "sha512-VacmzZqVxdWdf9y64lDOMZNDMM/FQdtM9IsaOPKOm2suYwEatb8VkdHqOzXcDnZbk7YDE2BmsJmy/2Hmkn563g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/fakerjs" + } + ], + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0", + "npm": ">=6.14.13" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.11", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", diff --git a/package.json b/package.json index 2c21316..f3d712c 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "swagger-ui-express": "^5.0.0" }, "devDependencies": { + "@faker-js/faker": "^8.2.0", "@nestjs/cli": "^10.0.0", "@nestjs/schematics": "^10.0.0", "@nestjs/testing": "^10.0.0", @@ -76,5 +77,8 @@ }, "engines": { "node": "18" + }, + "prisma": { + "seed": "ts-node prisma/seed.ts" } } diff --git a/prisma/seed.ts b/prisma/seed.ts new file mode 100644 index 0000000..b2f4726 --- /dev/null +++ b/prisma/seed.ts @@ -0,0 +1,183 @@ +import { PrismaClient } from '@prisma/client'; +import { faker } from '@faker-js/faker'; + +const prisma = new PrismaClient(); + +async function seedDatabase() { + for (let i = 0; i < 10; i++) { + await prisma.usuario.create({ + data: { + tipoUsuario: faker.helpers.arrayElement(['Serralheiro', 'Administrador', 'Vendedor']), + nome: faker.person.firstName(), + cpf: faker.string.numeric({ length: 11 }), + email: faker.internet.email(), + telefone: faker.phone.number(), + senha: faker.internet.password(), + token: faker.string.alphanumeric({ length: 5 }) + }, + }); + } + + for (let i = 0; i < 10; i++) { + await prisma.categoria.create({ + data: { + tipo: faker.helpers.arrayElement(['Material', 'Mão de obra', 'Serviço']), + titulo: faker.company.catchPhrase(), + descricao: faker.lorem.paragraph(), + }, + }); + } + + for (let i = 0; i < 20; i++) { + await prisma.insumo.create({ + data: { + titulo: faker.commerce.productName(), + descricao: faker.lorem.sentence(), + unidadeMedida: faker.helpers.arrayElement(['Unidade', 'Quilograma', 'Metro']), + idCategoria: faker.number.int({ min: 1, max: 10 }), + }, + }); + } + + for (let i = 0; i < 10; i++) { + await prisma.fornecedor.create({ + data: { + email: faker.internet.email(), + telefone: faker.phone.number(), + contaTipo: faker.helpers.arrayElement(['Fisica', 'Juridica']), + nome: faker.person.fullName(), + cpf: faker.string.numeric({ length: 11 }), + rg: faker.string.numeric({ length: 9 }), + pais: faker.location.country(), + cep: faker.location.zipCode(), + estado: faker.location.state(), + cidade: faker.location.city(), + bairro: faker.location.city(), + rua: faker.location.street(), + numero: faker.location.buildingNumber(), + complemento: faker.location.secondaryAddress(), + }, + }); + } + + for (let i = 0; i < 10; i++) { + await prisma.cliente.create({ + data: { + email: faker.internet.email(), + telefone: faker.phone.number(), + contaTipo: faker.helpers.arrayElement(['Fisica', 'Juridica']), + nome: faker.person.fullName(), + cpf: faker.string.numeric({ length: 11 }), + rg: faker.string.numeric({ length: 9 }), + pais: faker.location.country(), + cep: faker.location.zipCode(), + estado: faker.location.state(), + cidade: faker.location.city(), + bairro: faker.location.city(), + rua: faker.location.street(), + numero: faker.location.buildingNumber(), + complemento: faker.location.secondaryAddress(), + }, + }); + } + + + for (let i = 0; i < 10; i++) { + await prisma.orcamento.create({ + data: { + validade: faker.date.future(), + dataOrcamento: faker.date.recent(), + totalMaoObra: faker.number.float(), + totalMateriais: faker.number.float(), + status: faker.helpers.arrayElement(['Pendente', 'Iniciado', 'Em_Processo', 'Concluido']), + prazoEstimadoProducao: faker.number.int({ min: 1, max: 30 }), + observacoes: faker.lorem.sentence(), + idCliente: faker.number.int({ min: 1, max: 10 }), // Gere um ID de cliente aleatório + }, + }); + } + let nextOrcamentoId = 1; // Inicializa o próximo ID de orçamento + + function generateUniqueOrcamentoId() { + const id = nextOrcamentoId; + nextOrcamentoId++; // Aumenta o próximo ID para a próxima chamada + return id; + } + + for (let i = 0; i < 10; i++) { + await prisma.pedido.create({ + data: { + pagamento: faker.number.float(), + status: faker.helpers.arrayElement(['Pendente', 'Iniciado']), + idOrcamento: generateUniqueOrcamentoId(), // Gere um ID de orçamento aleatório + }, + }); + } + + for (let i = 0; i < 20; i++) { + await prisma.produto.create({ + data: { + titulo: faker.commerce.productName(), + quantidade: faker.number.int({ min: 1, max: 10 }), + valorUnitario: faker.number.float(), + observacoes: faker.lorem.sentence(), + orcamentoId: faker.number.int({ min: 1, max: 10 }), // Gere um ID de orçamento aleatório + }, + }); + } + + for (let i = 0; i < 10; i++) { + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: faker.number.float(), + unidade: faker.helpers.arrayElement(['Kg', 'Unidade', 'M', 'L']), + idFornecedor: faker.number.int({ min: 1, max: 10 }), // Gere um ID de fornecedor aleatório + idInsumo: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório + }, + }); + } + + for (let i = 0; i < 20; i++) { + await prisma.listaInsumo.create({ + data: { + quantidade: faker.number.int(), + idProduto: faker.number.int({ min: 1, max: 20 }), // Gere um ID de produto aleatório + idInsumo: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório + idCotacao: faker.number.int({ min: 1, max: 10 }), // Gere um ID de cotação aleatório + unidade: faker.helpers.arrayElement(['Kg', 'Unidade', 'M', 'L']), + valorUnitario: faker.number.float(), + }, + }); + } + + for (let i = 0; i < 10; i++) { + await prisma.produtoBase.create({ + data: { + titulo: faker.commerce.productName(), + observacoes: faker.lorem.sentence(), + }, + }); + } + + for (let i = 0; i < 20; i++) { + await prisma.insumoProdutoBase.create({ + data: { + quantidade: faker.number.float(), + idProdutoBase: faker.number.int({ min: 1, max: 10 }), // Gere um ID de produto base aleatório + idInsumo: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório + unidade: faker.helpers.arrayElement(['Kg', 'Unidade', 'M', 'L']), + }, + }); + } + + console.log('Dados populados com sucesso'); +} + +seedDatabase() + .catch((error) => { + console.error('Erro ao popular o banco de dados:', error); + }) + .finally(async () => { + await prisma.$disconnect(); + }); From 9b2c182f93355af62dc2b801e02378f97b8e5589 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Mon, 6 Nov 2023 20:26:59 -0300 Subject: [PATCH 045/115] Update usuarios.service.ts --- src/modules/usuarios/usuarios.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/usuarios/usuarios.service.ts b/src/modules/usuarios/usuarios.service.ts index 5f2f6e4..fad4c35 100644 --- a/src/modules/usuarios/usuarios.service.ts +++ b/src/modules/usuarios/usuarios.service.ts @@ -22,7 +22,7 @@ export class UsuariosService { }, }); }else{ - usuarios = await this.prismaService.categoria.findMany({ + usuarios = await this.prismaService.usuario.findMany({ skip, take: perPage, }); From d28db87c91d00dc8976295e9f231c7e215a79610 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Mon, 6 Nov 2023 23:00:22 -0300 Subject: [PATCH 046/115] =?UTF-8?q?Pagina=C3=A7=C3=A3o=20Arruamada?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/cotacoes/cotacoes.controller.ts | 8 ---- src/modules/cotacoes/cotacoes.service.ts | 2 - .../insumos-produtos-base.controller.ts | 17 ++++--- .../insumos-produtos-base.service.ts | 28 +++++------ src/modules/insumos/insumos.controller.ts | 5 +- .../lista-insumos/lista-insumos.controller.ts | 36 +++++++++++---- .../lista-insumos/lista-insumos.service.ts | 46 ++++++++++--------- .../orcamentos/orcamentos.controller.ts | 4 +- src/modules/orcamentos/orcamentos.service.ts | 41 +++++++++++++---- src/modules/pedidos/pedidos.controller.ts | 4 +- src/modules/pedidos/pedidos.service.ts | 11 +++-- 11 files changed, 121 insertions(+), 81 deletions(-) diff --git a/src/modules/cotacoes/cotacoes.controller.ts b/src/modules/cotacoes/cotacoes.controller.ts index 8695915..712c74d 100644 --- a/src/modules/cotacoes/cotacoes.controller.ts +++ b/src/modules/cotacoes/cotacoes.controller.ts @@ -28,15 +28,7 @@ export class CotacoesController { return await this.cotacoesService.recotar(+idCotacao, recotarDto); } - @Get('paginate') - async findAllWithPagination(@Query('page') page: number, @Query('perPage') perPage: number) { - page = page; - perPage = perPage; - const totalcount = await this.cotacoesService.countAllCotacaos(); - res.set('x-total-count', totalcount.toString()); - return await this.cotacoesService.findAllWithPagination(page, perPage); - } @Get('count') countAll() { diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index 754f002..b74fb0e 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -59,8 +59,6 @@ export class CotacoesService { take: perPage, }); } - - return cotacoes ; } diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts index 470a1ef..3401ad9 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts @@ -9,8 +9,8 @@ export class InsumosProdutosBaseController { constructor(private readonly insumosProdutosBaseService: InsumosProdutosBaseService) {} @Get('count') - countAll() { - return this.insumosProdutosBaseService.countAll(); + countAll(idProdutobase: number) { + return this.insumosProdutosBaseService.countAll(idProdutobase); } @Get('insumoProd/:id') @@ -25,18 +25,21 @@ export class InsumosProdutosBaseController { return this.insumosProdutosBaseService.create(createInsumosProdutosBaseDto); } - @Get() + @Get(":id") @Header('Access-Control-Allow-Origin', '*') @Header('Access-Control-Expose-Headers', 'X-Total-Count') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { + async findAll(@Param('id') id: string,@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') busca : string, @Res({ passthrough: true }) res) { + page = page||1; - perPage = perPage||await this.countAll(); + perPage = perPage||await this.countAll(+id); const insumosBase = await this.insumosProdutosBaseService.findAllWithPagination( + +id, page, Number(perPage), - titulo_like + busca, + ); - const total = await this.insumosProdutosBaseService.countAll(); + const total = await this.insumosProdutosBaseService.countAll(+id); res.header('x-total-count',total); return insumosBase } diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts index 361f458..71cff6f 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts @@ -8,29 +8,21 @@ import { InsumoProdutosBase } from './entities/insumo-produtos-base.entity'; export class InsumosProdutosBaseService { constructor(private readonly prismaService: PrismaService) {} - async findAllWithPagination(page: number, perPage: number, titulo_like: string) { + async findAllWithPagination(idProdutobase: number,page: number, perPage: number, busca: string) { const skip = (page - 1) * perPage; let insumosProdutoBase = InsumoProdutosBase[""]; - if(titulo_like){ + insumosProdutoBase = await this.prismaService.insumoProdutoBase.findMany({ skip, take: perPage, where:{ - OR: [ { insumos: {titulo: { contains: titulo_like }} }, - - { unidade: { contains: titulo_like } }, - - ], + idProdutoBase:idProdutobase, + OR: [ { insumos: {titulo: { contains: busca }} }, + { unidade: { contains: busca } }, + ], }, + }); - }else{ - insumosProdutoBase = await this.prismaService.insumoProdutoBase.findMany({ - skip, - take: perPage, - }); - } - - return insumosProdutoBase ; } @@ -52,8 +44,10 @@ export class InsumosProdutosBaseService { return { data: { message: 'Insumo não existe' } }; } - async countAll() { - return await this.prismaService.insumoProdutoBase.count(); + async countAll(idProdutobase: number) { + return await this.prismaService.insumoProdutoBase.count({where:{ + idProdutoBase: idProdutobase + }}); } async findInsumoProdBase(id: number) { diff --git a/src/modules/insumos/insumos.controller.ts b/src/modules/insumos/insumos.controller.ts index 4f1ef0f..606fd9c 100644 --- a/src/modules/insumos/insumos.controller.ts +++ b/src/modules/insumos/insumos.controller.ts @@ -37,8 +37,11 @@ export class InsumosController { @Header('Access-Control-Allow-Origin', '*') @Header('Access-Control-Expose-Headers', 'X-Total-Count') async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { + console.log(page) + console.log(perPage) + console.log(titulo_like) page = page||1; - perPage = perPage||await this.countAll(); + perPage = perPage||await this.insumosService.countAll(); const cotacoes = await this.insumosService.findAllWithPagination( page, Number(perPage), diff --git a/src/modules/lista-insumos/lista-insumos.controller.ts b/src/modules/lista-insumos/lista-insumos.controller.ts index fe4dc15..864c3ed 100644 --- a/src/modules/lista-insumos/lista-insumos.controller.ts +++ b/src/modules/lista-insumos/lista-insumos.controller.ts @@ -17,7 +17,6 @@ import { CreateListaInsumoDto } from './dto/create-lista-insumo.dto'; import { UpdateListaInsumoDto } from './dto/update-lista-insumo.dto'; import { ApiBody, ApiTags } from '@nestjs/swagger'; - @ApiTags('lista-insumos') @Controller('lista-insumos') export class ListaInsumosController { @@ -29,19 +28,33 @@ export class ListaInsumosController { return this.listaInsumosService.create(createListaInsumoDto); } - @Get() - async findAll(){ - return this.listaInsumosService.findAll() - } - @Get('produtos/:id') - async findProdutoOrc(@Param('id') id: number) { - return await this.listaInsumosService.findInsumoProd(+id); + @Header('Access-Control-Allow-Origin', '*') + @Header('Access-Control-Expose-Headers', 'X-Total-Count') + async findProdutoOrc( + @Param('id') id: number, + @Query('page') page: number, + @Query('perPage') perPage: number, + @Query('titulo_like') titulo_like: string, + @Res({ passthrough: true }) res, + ) { + + page = page || 1; + perPage = perPage || 5; + + const listasinsumos = await this.listaInsumosService.findAllWithPagination( + +id, + page, + Number(perPage), + titulo_like, + ); + const total = await this.listaInsumosService.countAll(+id); + res.header('x-total-count', total); + return listasinsumos; } @Get(':id') findOne(@Param('id') id: string) { - console.log(this.listaInsumosService.findOne(+id)) return this.listaInsumosService.findOne(+id); } @@ -62,6 +75,9 @@ export class ListaInsumosController { @Post(':id/cotar') @ApiBody({}) selectCotacao(@Param('id') idItemListaInsumo: number, @Body() body) { - return this.listaInsumosService.selectCotacao(+idItemListaInsumo, +body.idCotacao); + return this.listaInsumosService.selectCotacao( + +idItemListaInsumo, + +body.idCotacao, + ); } } diff --git a/src/modules/lista-insumos/lista-insumos.service.ts b/src/modules/lista-insumos/lista-insumos.service.ts index 31a4c89..0646aa6 100644 --- a/src/modules/lista-insumos/lista-insumos.service.ts +++ b/src/modules/lista-insumos/lista-insumos.service.ts @@ -3,6 +3,7 @@ import { CreateListaInsumoDto } from './dto/create-lista-insumo.dto'; import { UpdateListaInsumoDto } from './dto/update-lista-insumo.dto'; import { PrismaService } from 'src/databases/prisma.service'; import { CotacoesService } from '../cotacoes/cotacoes.service'; +import { ListaInsumo } from './entities/lista-insumo.entity'; @Injectable() export class ListaInsumosService { @@ -11,18 +12,36 @@ export class ListaInsumosService { private readonly cotacaoServices: CotacoesService, ) {} - async findAllWithPagination(page: number, perPage: number) { + async findAllWithPagination(id:number,page: number, perPage: number, titulo_like: string) { const skip = (page - 1) * perPage; - const listaInsumos = await this.prismaService.listaInsumo.findMany({ + + let listainsumos = ListaInsumo[""]; + + + listainsumos = await this.prismaService.listaInsumo.findMany({ skip, take: perPage, + where:{ + idProduto:id, + OR: + [{ insumo: {titulo: { contains: titulo_like }} }, + { cotacao: {fornecedor: { nome:{ contains: titulo_like }}} }, + { cotacao: {fornecedor: { nomeFantasia:{ contains: titulo_like }}} }, + { cotacao: {fornecedor: { razaoSocial:{ contains: titulo_like }}} }, + { unidade: { contains: titulo_like } }, + { insumo: {categoria: { titulo: { contains: titulo_like }}} }, + ], + }, }); - - return { listaInsumos }; + return listainsumos ; } - async countAll() { - return await this.prismaService.insumoProdutoBase.count(); + async countAll(id:number) { + return await this.prismaService.listaInsumo.count({ + where:{ + idProduto:id, + } + }); } async create(createListaInsumoDto: CreateListaInsumoDto) { @@ -51,21 +70,6 @@ export class ListaInsumosService { return { data: { message: 'Insumo não existe' } }; } - async findInsumoProd(id: number) { - const listaInsumosProd = await this.prismaService.listaInsumo.findMany({ - where: { - idProduto: id, - }, - }); - - if (!listaInsumosProd) { - return { - data: { message: 'Não existem insumos cadastrados deste produto' }, - }; - } - return listaInsumosProd; - } - async findAll() { return await this.prismaService.listaInsumo.findMany(); } diff --git a/src/modules/orcamentos/orcamentos.controller.ts b/src/modules/orcamentos/orcamentos.controller.ts index dfcda71..da549b1 100644 --- a/src/modules/orcamentos/orcamentos.controller.ts +++ b/src/modules/orcamentos/orcamentos.controller.ts @@ -16,9 +16,11 @@ export class OrcamentosController { @Get() @Header('Access-Control-Allow-Origin', '*') @Header('Access-Control-Expose-Headers', 'X-Total-Count') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : number, @Res({ passthrough: true }) res) { + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { page = page||1; perPage = perPage|| await this.countAll(); + + const orcamentos = await this.orcamentosService.findAllWithPagination( page, Number(perPage), diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index bc78367..930d0c1 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -19,20 +19,43 @@ export class OrcamentosService { return await this.prismaService.cliente.findFirst({ where: { id } }); } - async findAllWithPagination(page: number, perPage: number, titulo_like? : number) { + async findAllWithPagination(page: number, perPage: number, titulo_like: string) { const skip = (page - 1) * perPage; + let orcamentos = Orcamento[""]; if(titulo_like){ + + const isNumero = !isNaN(parseInt(titulo_like)); + + if (isNumero) { orcamentos = await this.prismaService.orcamento.findMany({ - skip, - take: perPage, - where:{ - OR: [{id: {equals: titulo_like }}, - {idCliente : {equals: titulo_like}}], - }, - }); + skip, + take: perPage, + where: { + OR: [ + { id: { equals: parseInt(titulo_like) } }, + { cliente: { nome: { contains: titulo_like } } }, + { cliente: { nomeFantasia: { contains: titulo_like } } }, + { cliente: { razaoSocial: { contains: titulo_like } } }, + ], + }, + }); + }else{ + orcamentos = await this.prismaService.orcamento.findMany({ + skip, + take: perPage, + where: { + OR: [ + { cliente: { nome: { contains: titulo_like } } }, + { cliente: { nomeFantasia: { contains: titulo_like } } }, + { cliente: { razaoSocial: { contains: titulo_like } } }, + ], + }, + }); + } + }else{ - orcamentos = await this.prismaService.categoria.findMany({ + orcamentos = await this.prismaService.orcamento.findMany({ skip, take: perPage, }); diff --git a/src/modules/pedidos/pedidos.controller.ts b/src/modules/pedidos/pedidos.controller.ts index b799b81..3aa04cb 100644 --- a/src/modules/pedidos/pedidos.controller.ts +++ b/src/modules/pedidos/pedidos.controller.ts @@ -37,13 +37,13 @@ export class PedidosController { @Get() @Header('Access-Control-Allow-Origin', '*') @Header('Access-Control-Expose-Headers', 'X-Total-Count') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') status_like : status, @Res({ passthrough: true }) res) { + async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { page = page || 1; perPage = perPage || await this.countAll(); const pedidos = await this.pedidosService.findAllWithPagination( page, Number(perPage), - status_like + titulo_like ); const total = await this.pedidosService.countAll(); res.header('x-total-count',total); diff --git a/src/modules/pedidos/pedidos.service.ts b/src/modules/pedidos/pedidos.service.ts index d3dee3d..2e9ba06 100644 --- a/src/modules/pedidos/pedidos.service.ts +++ b/src/modules/pedidos/pedidos.service.ts @@ -12,15 +12,20 @@ export class PedidosService { return await this.prismaService.pedido.count({}); } - async findAllWithPagination(page: number, perPage: number, status_like? : status) { + async findAllWithPagination(page: number, perPage: number, titulo_like? : string) { const skip = (page - 1) * perPage; let pedidos = Pedido[""]; - if(status_like){ + if(titulo_like){ pedidos = await this.prismaService.pedido.findMany({ skip, take: perPage, where:{ - status: status_like + OR: [ + + { orcamento:{ cliente: { nome: { contains: titulo_like } }} }, + { orcamento:{ cliente: { razaoSocial: { contains: titulo_like } }} }, + { orcamento:{ cliente: { nomeFantasia: { contains: titulo_like } }} }, + ], }, }); }else{ From 3ab13eb158c842110d27561930bfe7ab543f773b Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Tue, 7 Nov 2023 01:17:56 -0300 Subject: [PATCH 047/115] =?UTF-8?q?corre=C3=A7=C3=B5es=20pagina=C3=A7?= =?UTF-8?q?=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/cotacoes/cotacoes.controller.ts | 20 ++++++-- src/modules/cotacoes/cotacoes.service.ts | 51 +++++++++++++++++---- src/modules/produtos/produtos.controller.ts | 13 +++--- src/modules/produtos/produtos.service.ts | 26 +++++------ 4 files changed, 79 insertions(+), 31 deletions(-) diff --git a/src/modules/cotacoes/cotacoes.controller.ts b/src/modules/cotacoes/cotacoes.controller.ts index 712c74d..a866468 100644 --- a/src/modules/cotacoes/cotacoes.controller.ts +++ b/src/modules/cotacoes/cotacoes.controller.ts @@ -35,6 +35,14 @@ export class CotacoesController { return this.cotacoesService.countAllCotacaos(); } + @Get('countbyId') + countById(id:number) { + if(id){ + return this.cotacoesService.countByIdInsumoCotacaos(id); + } + return this.cotacoesService.countAllCotacaos(); + } + @UsePipes(ValidationPipe) @Post() create(@Body() createCotacaoDto: CreateCotacaoDto) { @@ -44,15 +52,21 @@ export class CotacoesController { @Get() @Header('Access-Control-Allow-Origin', '*') @Header('Access-Control-Expose-Headers', 'X-Total-Count') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('nome_like') nome_like : string, @Res({ passthrough: true }) res) { + async findAll(@Query('fornecedor') idFornecedor: number,@Query('insumo') idInsumo: number, @Query('page') page: number,@Query('perPage') perPage: number,@Query('nome_like') nome_like : string, @Res({ passthrough: true }) res) { page = page||1; perPage = perPage||await this.countAll(); const cotacoes = await this.cotacoesService.findAllWithPagination( + +idInsumo, page, Number(perPage), - nome_like + nome_like, + +idFornecedor ); - const total = await this.cotacoesService.countAllCotacaos(); + + + const total = await this.countById(+idInsumo); + + res.header('x-total-count',total); return cotacoes } diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index b74fb0e..615dbf9 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -38,10 +38,39 @@ export class CotacoesService { return newQuotation; } - async findAllWithPagination(page: number, perPage: number, nome_like? : string) { + async findAllWithPagination(id:number,page: number, perPage: number, nome_like? : string,idfornecedor?:number) { const skip = (page - 1) * perPage; let cotacoes = Cotacao[""]; - if(nome_like){ + + if(id && idfornecedor){ + cotacoes = await this.prismaService.cotacao.findMany({ + skip, + take: perPage, + where:{ + idInsumo:id, + idFornecedor:idfornecedor, + OR: [{ insumo: { titulo: { contains: nome_like } }}, + { fornecedor: {nome: { contains: nome_like }} }, + { fornecedor: {nomeFantasia: { contains: nome_like }} }, + { fornecedor: {razaoSocial: { contains: nome_like }} }, + ], + }, + }); + }else if(id){ + cotacoes = await this.prismaService.cotacao.findMany({ + skip, + take: perPage, + where:{ + idInsumo:id, + + OR: [{ insumo: { titulo: { contains: nome_like } }}, + { fornecedor: {nome: { contains: nome_like }} }, + { fornecedor: {nomeFantasia: { contains: nome_like }} }, + { fornecedor: {razaoSocial: { contains: nome_like }} }, + ], + }, + }); + }else{ cotacoes = await this.prismaService.cotacao.findMany({ skip, take: perPage, @@ -53,12 +82,8 @@ export class CotacoesService { ], }, }); - }else{ - cotacoes = await this.prismaService.cotacao.findMany({ - skip, - take: perPage, - }); - } + } + return cotacoes ; } @@ -66,6 +91,16 @@ export class CotacoesService { async countAllCotacaos() { return await this.prismaService.cotacao.count({}); } + + async countByIdInsumoCotacaos(id: number) { + return await this.prismaService.cotacao.count({ + where:{ + idInsumo : id + } + }); + } + + async create(createCotacaoDto: CreateCotacaoDto) { const fornecedorExists = await this.prismaService.fornecedor.findFirst({ where: { id: createCotacaoDto.idFornecedor }, diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index 911cc6c..bde7f76 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -29,8 +29,8 @@ export class ProdutosController { } @Get('count') - countAll() { - return this.produtosService.countAll(); + countAll(id:number) { + return this.produtosService.countAll(id); } @UsePipes(ValidationPipe) @@ -53,18 +53,19 @@ export class ProdutosController { return this.produtosService.findManyByTitle(buscaparam); } - @Get() + @Get(":id/produtos") @Header('Access-Control-Allow-Origin', '*') @Header('Access-Control-Expose-Headers', 'X-Total-Count') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { + async findAll( @Param('id') id: number,@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { page = page||1; - perPage = perPage||await this.countAll(); + perPage = perPage||await this.countAll(+id); const produtos = await this.produtosService.findAllWithPagination( + +id, page, Number(perPage), titulo_like ); - const total = await this.produtosService.countAll(); + const total = await this.produtosService.countAll(+id); res.header('x-total-count',total); return produtos } diff --git a/src/modules/produtos/produtos.service.ts b/src/modules/produtos/produtos.service.ts index e4a687a..b956da0 100644 --- a/src/modules/produtos/produtos.service.ts +++ b/src/modules/produtos/produtos.service.ts @@ -15,30 +15,24 @@ export class ProdutosService { private readonly insumosProdutosBaseService: InsumosProdutosBaseService, ) {} - async findAllWithPagination(page: number, perPage: number, titulo_like: string) { + async findAllWithPagination(id:number,page: number, perPage: number, titulo_like: string) { const skip = (page - 1) * perPage; - console.log(titulo_like) + let produtos = Produto[""]; - if(titulo_like){ + produtos = await this.prismaService.produto.findMany({ skip, take: perPage, where:{ + orcamentoId: id, OR: [{ titulo: { contains: titulo_like } }, - ], }, }); - }else{ - produtos = await this.prismaService.produto.findMany({ - skip, - take: perPage, - }); - } - - return produtos ; } + + async findOneByTitle(titulo: string) { return await this.prismaService.produto.findFirst({ where: { titulo }, @@ -75,8 +69,12 @@ export class ProdutosService { }); } - async countAll() { - return await this.prismaService.produto.count(); + async countAll(id:number) { + return await this.prismaService.produto.count({ + where:{ + orcamentoId: id, + } + }); } async findAll() { From 706e364e6459c769fb91b9759f0d1e0cefc4df98 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:39:56 -0300 Subject: [PATCH 048/115] update: async categorias --- .../categorias/categorias.controller.ts | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/modules/categorias/categorias.controller.ts b/src/modules/categorias/categorias.controller.ts index 0721ad4..bd6ef85 100644 --- a/src/modules/categorias/categorias.controller.ts +++ b/src/modules/categorias/categorias.controller.ts @@ -24,16 +24,14 @@ import { ApiTags } from '@nestjs/swagger'; export class CategoriasController { constructor(private readonly categoriasService: CategoriasService) {} - totalcount = this.categoriasService.countAllCategorias(); - @Get('count') - countAll() { - return this.categoriasService.countAllCategorias(); + async countAll() { + return await this.categoriasService.countAllCategorias(); } @UsePipes(ValidationPipe) @Post() - create(@Body() createCategoriaDto: CreateCategoriaDto) { - return this.categoriasService.create(createCategoriaDto); + async create(@Body() createCategoriaDto: CreateCategoriaDto) { + return await this.categoriasService.create(createCategoriaDto); } @Get() @@ -49,7 +47,7 @@ export class CategoriasController { ); const total = await this.categoriasService.countAllCategorias(); res.header('x-total-count',total); - return categorias + return await categorias } @Get(':id') @@ -58,20 +56,20 @@ export class CategoriasController { } @Get(':busca') - findManyByTitle(@Param('busca') buscaParam: string) { - return this.categoriasService.findManyByTitle(buscaParam); + async findManyByTitle(@Param('busca') buscaParam: string) { + return await this.categoriasService.findManyByTitle(buscaParam); } @UsePipes(ValidationPipe) @Patch(':id') - update( + async update( @Param('id') id: string, @Body() updateCategoriaDto: UpdateCategoriaDto, ) { - return this.categoriasService.update(+id, updateCategoriaDto); + return await this.categoriasService.update(+id, updateCategoriaDto); } @Delete(':id') - remove(@Param('id') id: string) { - return this.categoriasService.remove(+id); + async remove(@Param('id') id: string) { + return await this.categoriasService.remove(+id); } } From 2ce874e31dc2b94c6c24ba9bc7ec425bebbbd52b Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:40:04 -0300 Subject: [PATCH 049/115] update: async clientes --- src/modules/clientes/clientes.controller.ts | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/modules/clientes/clientes.controller.ts b/src/modules/clientes/clientes.controller.ts index 346e7f5..1d43908 100644 --- a/src/modules/clientes/clientes.controller.ts +++ b/src/modules/clientes/clientes.controller.ts @@ -12,14 +12,14 @@ export class ClientesController { @Get('count') - countAll(){ - return this.clientesService.countAllCliente(); + async countAll(){ + return await this.clientesService.countAllCliente(); } @UsePipes(ValidationPipe) @Post() - create(@Body() createClienteDto: CreateClienteDto) { - return this.clientesService.create(createClienteDto); + async create(@Body() createClienteDto: CreateClienteDto) { + return await this.clientesService.create(createClienteDto); } @Get() @Header('Access-Control-Allow-Origin', '*') @@ -34,29 +34,29 @@ export class ClientesController { ); const total = await this.clientesService.countAllCliente(); res.header('x-total-count',total); - return clientes + return await clientes } @Get('buscar/:termo') async buscarCliente(@Param('termo') termo: string) { - return this.clientesService.findManyCliente(termo); + return await this.clientesService.findManyCliente(termo); } @Get(':id') - findOne(@Param('id') id: string) { - return this.clientesService.findOne(+id); + async findOne(@Param('id') id: string) { + return await this.clientesService.findOne(+id); } @UsePipes(ValidationPipe) @Patch(':id') - update(@Param('id') id: string, @Body() updateClienteDto: UpdateClienteDto) { - return this.clientesService.update(+id, updateClienteDto); + async update(@Param('id') id: string, @Body() updateClienteDto: UpdateClienteDto) { + return await this.clientesService.update(+id, updateClienteDto); } @Delete(':id') - remove(@Param('id') id: string) { - return this.clientesService.remove(+id); + async remove(@Param('id') id: string) { + return await this.clientesService.remove(+id); } } From 3389a9e5ec4045b5c825a6f8b1c00e5a20bc0d12 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:40:11 -0300 Subject: [PATCH 050/115] update: async cotacoes --- src/modules/cotacoes/cotacoes.controller.ts | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/modules/cotacoes/cotacoes.controller.ts b/src/modules/cotacoes/cotacoes.controller.ts index a866468..b52e59d 100644 --- a/src/modules/cotacoes/cotacoes.controller.ts +++ b/src/modules/cotacoes/cotacoes.controller.ts @@ -31,22 +31,22 @@ export class CotacoesController { @Get('count') - countAll() { - return this.cotacoesService.countAllCotacaos(); + async countAll() { + return await this.cotacoesService.countAllCotacaos(); } @Get('countbyId') - countById(id:number) { + async countById(id:number) { if(id){ - return this.cotacoesService.countByIdInsumoCotacaos(id); + return await this.cotacoesService.countByIdInsumoCotacaos(id); } - return this.cotacoesService.countAllCotacaos(); + return await this.cotacoesService.countAllCotacaos(); } @UsePipes(ValidationPipe) @Post() - create(@Body() createCotacaoDto: CreateCotacaoDto) { - return this.cotacoesService.create(createCotacaoDto); + async create(@Body() createCotacaoDto: CreateCotacaoDto) { + return await this.cotacoesService.create(createCotacaoDto); } @Get() @@ -68,7 +68,7 @@ export class CotacoesController { res.header('x-total-count',total); - return cotacoes + return await cotacoes } @Get(':id') @@ -78,13 +78,13 @@ export class CotacoesController { @UsePipes(ValidationPipe) @Patch(':id') - update(@Param('id') id: string, @Body() updateCotacaoDto: UpdateCotacaoDto) { - return this.cotacoesService.update(+id, updateCotacaoDto); + async update(@Param('id') id: string, @Body() updateCotacaoDto: UpdateCotacaoDto) { + return await this.cotacoesService.update(+id, updateCotacaoDto); } @Delete(':id') - remove(@Param('id') id: string) { - return this.cotacoesService.remove(+id); + async remove(@Param('id') id: string) { + return await this.cotacoesService.remove(+id); } @Get('findByFornecedor/:id') From ab5af361dd9eba1e6332626107a879ab69b047ce Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:40:19 -0300 Subject: [PATCH 051/115] update: async fornecedores --- .../fornecedores/fornecedores.controller.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/modules/fornecedores/fornecedores.controller.ts b/src/modules/fornecedores/fornecedores.controller.ts index 1eec70c..c8919c1 100644 --- a/src/modules/fornecedores/fornecedores.controller.ts +++ b/src/modules/fornecedores/fornecedores.controller.ts @@ -23,14 +23,14 @@ export class FornecedoresController { constructor(private readonly fornecedoresService: FornecedoresService) {} @Get('count') - countAll() { - return this.fornecedoresService.countAllFornecedor(); + async countAll() { + return await this.fornecedoresService.countAllFornecedor(); } @UsePipes(ValidationPipe) @Post() - create(@Body() CreateFornecedoresDto: CreateFornecedorDto) { - return this.fornecedoresService.create(CreateFornecedoresDto); + async create(@Body() CreateFornecedoresDto: CreateFornecedorDto) { + return await this.fornecedoresService.create(CreateFornecedoresDto); } @Get() @@ -46,7 +46,7 @@ export class FornecedoresController { ); const total = await this.fornecedoresService.countAllFornecedor(); res.header('x-total-count',total); - return fornecedores + return await fornecedores } @Get(':id') @@ -56,15 +56,15 @@ export class FornecedoresController { @UsePipes(ValidationPipe) @Patch(':id') - update( + async update( @Param('id') id: string, @Body() UpdateFornecedoresDto: UpdateFornecedorDto, ) { - return this.fornecedoresService.update(+id, UpdateFornecedoresDto); + return await this.fornecedoresService.update(+id, UpdateFornecedoresDto); } @Delete(':id') - remove(@Param('id') id: string) { - return this.fornecedoresService.remove(+id); + async remove(@Param('id') id: string) { + return await this.fornecedoresService.remove(+id); } } From f15626df99bfdfca835ff245ca9e393b264617a0 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:40:27 -0300 Subject: [PATCH 052/115] update: async insumos --- src/modules/insumos/insumos.controller.ts | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/modules/insumos/insumos.controller.ts b/src/modules/insumos/insumos.controller.ts index 606fd9c..d5ce4f1 100644 --- a/src/modules/insumos/insumos.controller.ts +++ b/src/modules/insumos/insumos.controller.ts @@ -23,23 +23,20 @@ export class InsumosController { constructor(private readonly insumosService: InsumosService) {} @Get('count') - countAll() { - return this.insumosService.countAll(); + async countAll() { + return await this.insumosService.countAll(); } @UsePipes(ValidationPipe) @Post() - create(@Body() createInsumoDto: CreateInsumoDto) { - return this.insumosService.create(createInsumoDto); + async create(@Body() createInsumoDto: CreateInsumoDto) { + return await this.insumosService.create(createInsumoDto); } @Get() @Header('Access-Control-Allow-Origin', '*') @Header('Access-Control-Expose-Headers', 'X-Total-Count') async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { - console.log(page) - console.log(perPage) - console.log(titulo_like) page = page||1; perPage = perPage||await this.insumosService.countAll(); const cotacoes = await this.insumosService.findAllWithPagination( @@ -49,7 +46,7 @@ export class InsumosController { ); const total = await this.insumosService.countAll(); res.header('x-total-count',total); - return cotacoes + return await cotacoes } @Get(':id') @@ -59,12 +56,12 @@ export class InsumosController { @UsePipes(ValidationPipe) @Patch(':id') - update(@Param('id') id: string, @Body() updateInsumoDto: UpdateInsumoDto) { - return this.insumosService.update(+id, updateInsumoDto); + async update(@Param('id') id: string, @Body() updateInsumoDto: UpdateInsumoDto) { + return await this.insumosService.update(+id, updateInsumoDto); } @Delete(':id') - remove(@Param('id') id: string) { - return this.insumosService.remove(+id); + async remove(@Param('id') id: string) { + return await this.insumosService.remove(+id); } } From 70282e8eb91906dae7d5ec14bf7a8bf0e73b12f8 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:40:38 -0300 Subject: [PATCH 053/115] update: async insumos-produtos-base --- .../insumos-produtos-base.controller.ts | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts index 3401ad9..f6b77ef 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts @@ -9,20 +9,20 @@ export class InsumosProdutosBaseController { constructor(private readonly insumosProdutosBaseService: InsumosProdutosBaseService) {} @Get('count') - countAll(idProdutobase: number) { - return this.insumosProdutosBaseService.countAll(idProdutobase); + async countAll(idProdutobase: number) { + return await this.insumosProdutosBaseService.countAll(idProdutobase); } @Get('insumoProd/:id') - findProdutoOrc(@Param('id') id: number) + async findProdutoOrc(@Param('id') id: number) { - return this.insumosProdutosBaseService.findInsumoProdBase(+id); + return await this.insumosProdutosBaseService.findInsumoProdBase(+id); } @UsePipes(ValidationPipe) @Post() - create(@Body() createInsumosProdutosBaseDto: CreateInsumosProdutosBaseDto) { - return this.insumosProdutosBaseService.create(createInsumosProdutosBaseDto); + async create(@Body() createInsumosProdutosBaseDto: CreateInsumosProdutosBaseDto) { + return await this.insumosProdutosBaseService.create(createInsumosProdutosBaseDto); } @Get(":id") @@ -41,22 +41,22 @@ export class InsumosProdutosBaseController { ); const total = await this.insumosProdutosBaseService.countAll(+id); res.header('x-total-count',total); - return insumosBase + return await insumosBase } @Get(':id') - findOne(@Param('id') id: string) { - return this.insumosProdutosBaseService.findOne(+id); + async findOne(@Param('id') id: string) { + return await this.insumosProdutosBaseService.findOne(+id); } @UsePipes(ValidationPipe) @Patch(':id') - update(@Param('id') id: string, @Body() updateInsumosProdutosBaseDto: UpdateInsumosProdutosBaseDto) { - return this.insumosProdutosBaseService.update(+id, updateInsumosProdutosBaseDto); + async update(@Param('id') id: string, @Body() updateInsumosProdutosBaseDto: UpdateInsumosProdutosBaseDto) { + return await this.insumosProdutosBaseService.update(+id, updateInsumosProdutosBaseDto); } @Delete(':id') - remove(@Param('id') id: string) { - return this.insumosProdutosBaseService.remove(+id); + async remove(@Param('id') id: string) { + return await this.insumosProdutosBaseService.remove(+id); } } From 746d8d2d87fb55031ec560983f5e7c456de114a3 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:40:57 -0300 Subject: [PATCH 054/115] update: async lista-insumos --- .../lista-insumos/lista-insumos.controller.ts | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/modules/lista-insumos/lista-insumos.controller.ts b/src/modules/lista-insumos/lista-insumos.controller.ts index 864c3ed..370719e 100644 --- a/src/modules/lista-insumos/lista-insumos.controller.ts +++ b/src/modules/lista-insumos/lista-insumos.controller.ts @@ -24,8 +24,8 @@ export class ListaInsumosController { @UsePipes(ValidationPipe) @Post() - create(@Body() createListaInsumoDto: CreateListaInsumoDto) { - return this.listaInsumosService.create(createListaInsumoDto); + async create(@Body() createListaInsumoDto: CreateListaInsumoDto) { + return await this.listaInsumosService.create(createListaInsumoDto); } @Get('produtos/:id') @@ -50,32 +50,32 @@ export class ListaInsumosController { ); const total = await this.listaInsumosService.countAll(+id); res.header('x-total-count', total); - return listasinsumos; + return await listasinsumos; } @Get(':id') - findOne(@Param('id') id: string) { - return this.listaInsumosService.findOne(+id); + async findOne(@Param('id') id: string) { + return await this.listaInsumosService.findOne(+id); } @UsePipes(ValidationPipe) @Patch(':id') - update( + async update( @Param('id') id: string, @Body() updateListaInsumoDto: UpdateListaInsumoDto, ) { - return this.listaInsumosService.update(+id, updateListaInsumoDto); + return await this.listaInsumosService.update(+id, updateListaInsumoDto); } @Delete(':id') - remove(@Param('id') id: string) { - return this.listaInsumosService.remove(+id); + async remove(@Param('id') id: string) { + return await this.listaInsumosService.remove(+id); } @Post(':id/cotar') @ApiBody({}) - selectCotacao(@Param('id') idItemListaInsumo: number, @Body() body) { - return this.listaInsumosService.selectCotacao( + async selectCotacao(@Param('id') idItemListaInsumo: number, @Body() body) { + return await this.listaInsumosService.selectCotacao( +idItemListaInsumo, +body.idCotacao, ); From b8d35dcb1bc8eb8e751fc513546d31c1bc8f4319 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:41:10 -0300 Subject: [PATCH 055/115] update: async orcamentos --- .../orcamentos/orcamentos.controller.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/modules/orcamentos/orcamentos.controller.ts b/src/modules/orcamentos/orcamentos.controller.ts index da549b1..3f15884 100644 --- a/src/modules/orcamentos/orcamentos.controller.ts +++ b/src/modules/orcamentos/orcamentos.controller.ts @@ -28,32 +28,32 @@ export class OrcamentosController { ); const total = await this.orcamentosService.countAll(); res.header('x-total-count',total); - return orcamentos + return await orcamentos } @Post() - create(@Body() createOrcamentoDto: CreateOrcamentoDto) { + async create(@Body() createOrcamentoDto: CreateOrcamentoDto) { - return this.orcamentosService.create(createOrcamentoDto); + return await this.orcamentosService.create(createOrcamentoDto); } @Get(':id') - findOne(@Param('id') id: string) { - return this.orcamentosService.findOne(+id); + async findOne(@Param('id') id: string) { + return await this.orcamentosService.findOne(+id); } @UsePipes(ValidationPipe) @Patch(':id') - update( + async update( @Param('id') id: string, @Body() updateOrcamentoDto: UpdateOrcamentoDto, ) { - return this.orcamentosService.update(+id, updateOrcamentoDto); + return await this.orcamentosService.update(+id, updateOrcamentoDto); } @Delete(':id') - remove(@Param('id') id: string) { - return this.orcamentosService.remove(+id); + async remove(@Param('id') id: string) { + return await this.orcamentosService.remove(+id); } } From 7c6a7cd6e1e0bea927228b528251df1e31738591 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:41:20 -0300 Subject: [PATCH 056/115] update: async pedidos --- src/modules/pedidos/pedidos.controller.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/modules/pedidos/pedidos.controller.ts b/src/modules/pedidos/pedidos.controller.ts index 3aa04cb..9ea7eff 100644 --- a/src/modules/pedidos/pedidos.controller.ts +++ b/src/modules/pedidos/pedidos.controller.ts @@ -30,8 +30,8 @@ export class PedidosController { @UsePipes(ValidationPipe) @Post() - create(@Body() createPedidoDto: CreatePedidoDto) { - return this.pedidosService.create(createPedidoDto); + async create(@Body() createPedidoDto: CreatePedidoDto) { + return await this.pedidosService.create(createPedidoDto); } @Get() @@ -47,22 +47,22 @@ export class PedidosController { ); const total = await this.pedidosService.countAll(); res.header('x-total-count',total); - return pedidos + return await pedidos } @Get(':id') - findOne(@Param('id') id: string) { - return this.pedidosService.findOne(+id); + async findOne(@Param('id') id: string) { + return await this.pedidosService.findOne(+id); } @UsePipes(ValidationPipe) @Patch(':id') - update(@Param('id') id: string, @Body() updatePedidoDto: UpdatePedidoDto) { - return this.pedidosService.update(+id, updatePedidoDto); + async update(@Param('id') id: string, @Body() updatePedidoDto: UpdatePedidoDto) { + return await this.pedidosService.update(+id, updatePedidoDto); } @Delete(':id') - remove(@Param('id') id: string) { - return this.pedidosService.remove(+id); + async remove(@Param('id') id: string) { + return await this.pedidosService.remove(+id); } } From c3ce25ca4c26d1ac6070361117eb5cca7dea98a2 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:41:28 -0300 Subject: [PATCH 057/115] update: async produtos --- src/modules/produtos/produtos.controller.ts | 34 ++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index bde7f76..1ae775f 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -24,33 +24,33 @@ export class ProdutosController { constructor(private readonly produtosService: ProdutosService) {} @Post('addProdutoBase') - createProdFromBase(@Body() addProdutoBaseDto: addProdutoBaseDto) { - return this.produtosService.pullProdBase(addProdutoBaseDto); + async createProdFromBase(@Body() addProdutoBaseDto: addProdutoBaseDto) { + return await this.produtosService.pullProdBase(addProdutoBaseDto); } @Get('count') - countAll(id:number) { - return this.produtosService.countAll(id); + async countAll(id:number) { + return await this.produtosService.countAll(id); } @UsePipes(ValidationPipe) @Post() - create(@Body() createProdutoDto: CreateProdutoDto) { - return this.produtosService.create(createProdutoDto); + async create(@Body() createProdutoDto: CreateProdutoDto) { + return await this.produtosService.create(createProdutoDto); } @Get('prodOrc/:id') - findProdutoOrc(@Param('id') id: number) { - return this.produtosService.findProdutoOrc(+id); + async findProdutoOrc(@Param('id') id: number) { + return await this.produtosService.findProdutoOrc(+id); } @Get(':id') - findOne(@Param('id') id: string) { - return this.produtosService.findOne(+id); + async findOne(@Param('id') id: string) { + return await this.produtosService.findOne(+id); } @Get(':busca') - findManyByTitle(@Param('titulo') buscaparam: string) { - return this.produtosService.findManyByTitle(buscaparam); + async findManyByTitle(@Param('titulo') buscaparam: string) { + return await this.produtosService.findManyByTitle(buscaparam); } @Get(":id/produtos") @@ -67,17 +67,17 @@ export class ProdutosController { ); const total = await this.produtosService.countAll(+id); res.header('x-total-count',total); - return produtos + return await produtos } @UsePipes(ValidationPipe) @Patch(':id') - update(@Param('id') id: string, @Body() updateProdutoDto: UpdateProdutoDto) { - return this.produtosService.update(+id, updateProdutoDto); + async update(@Param('id') id: string, @Body() updateProdutoDto: UpdateProdutoDto) { + return await this.produtosService.update(+id, updateProdutoDto); } @Delete(':id') - remove(@Param('id') id: string) { - return this.produtosService.remove(+id); + async remove(@Param('id') id: string) { + return await this.produtosService.remove(+id); } } From 2da2a6595af091df4b07bc32330b2265df75ac6d Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:41:36 -0300 Subject: [PATCH 058/115] update: async produtos-base --- .../produtos-base/produtos-base.controller.ts | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/modules/produtos-base/produtos-base.controller.ts b/src/modules/produtos-base/produtos-base.controller.ts index 72df980..7c48f90 100644 --- a/src/modules/produtos-base/produtos-base.controller.ts +++ b/src/modules/produtos-base/produtos-base.controller.ts @@ -24,14 +24,14 @@ export class ProdutosBaseController { @Get('count') - countAll() { - return this.produtosBaseService.countAll(); + async countAll() { + return await this.produtosBaseService.countAll(); } @UsePipes(ValidationPipe) @Post() - create(@Body() createProdutosBaseDto: CreateProdutosBaseDto) { - return this.produtosBaseService.create(createProdutosBaseDto); + async create(@Body() createProdutosBaseDto: CreateProdutosBaseDto) { + return await this.produtosBaseService.create(createProdutosBaseDto); } @Get() @@ -47,25 +47,25 @@ export class ProdutosBaseController { ); const total = await this.produtosBaseService.countAll(); res.header('x-total-count',total); - return produtos + return await produtos } @Get(':id') - findOne(@Param('id') id: string) { - return this.produtosBaseService.findOne(+id); + async findOne(@Param('id') id: string) { + return await this.produtosBaseService.findOne(+id); } @UsePipes(ValidationPipe) @Patch(':id') - update( + async update( @Param('id') id: string, @Body() updateProdutosBaseDto: UpdateProdutosBaseDto, ) { - return this.produtosBaseService.update(+id, updateProdutosBaseDto); + return await this.produtosBaseService.update(+id, updateProdutosBaseDto); } @Delete(':id') - remove(@Param('id') id: string) { - return this.produtosBaseService.remove(+id); + async remove(@Param('id') id: string) { + return await this.produtosBaseService.remove(+id); } } From e58ccdbf379d99327979262836c9eb44ddf445aa Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:41:44 -0300 Subject: [PATCH 059/115] update: async usuarios --- src/modules/usuarios/usuarios.controller.ts | 22 ++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/modules/usuarios/usuarios.controller.ts b/src/modules/usuarios/usuarios.controller.ts index e806850..a0913c6 100644 --- a/src/modules/usuarios/usuarios.controller.ts +++ b/src/modules/usuarios/usuarios.controller.ts @@ -23,14 +23,14 @@ export class UsuariosController { constructor(private readonly usuariosService: UsuariosService) {} @Get('count') - countAll() { - return this.usuariosService.countAll(); + async countAll() { + return await this.usuariosService.countAll(); } @UsePipes(ValidationPipe) @Post() - create(@Body() createUsuarioDto: CreateUsuarioDto) { - return this.usuariosService.create(createUsuarioDto); + async create(@Body() createUsuarioDto: CreateUsuarioDto) { + return await this.usuariosService.create(createUsuarioDto); } @Get() @@ -46,22 +46,22 @@ export class UsuariosController { ); const total = await this.usuariosService.countAll(); res.header('x-total-count',total); - return usuarios + return await usuarios } @Get(':id') - findOne(@Param('id') id: string) { - return this.usuariosService.findOne(+id); + async findOne(@Param('id') id: string) { + return await this.usuariosService.findOne(+id); } @UsePipes(ValidationPipe) @Patch(':id') - update(@Param('id') id: string, @Body() updateUsuarioDto: UpdateUsuarioDto) { - return this.usuariosService.update(+id, updateUsuarioDto); + async update(@Param('id') id: string, @Body() updateUsuarioDto: UpdateUsuarioDto) { + return await this.usuariosService.update(+id, updateUsuarioDto); } @Delete(':id') - remove(@Param('id') id: string) { - return this.usuariosService.remove(+id); + async remove(@Param('id') id: string) { + return await this.usuariosService.remove(+id); } } From ea18c77b236825d11aac1df7fefaa20e2e031e7a Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:44:49 -0300 Subject: [PATCH 060/115] update: response as res from express removido --- src/modules/clientes/clientes.controller.ts | 2 +- src/modules/cotacoes/cotacoes.controller.ts | 1 - src/modules/fornecedores/fornecedores.controller.ts | 1 - src/modules/insumos/insumos.controller.ts | 1 - src/modules/pedidos/pedidos.controller.ts | 2 -- src/modules/produtos-base/produtos-base.controller.ts | 2 +- src/modules/produtos/produtos.controller.ts | 1 - src/modules/usuarios/usuarios.controller.ts | 2 +- 8 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/modules/clientes/clientes.controller.ts b/src/modules/clientes/clientes.controller.ts index 1d43908..65867b9 100644 --- a/src/modules/clientes/clientes.controller.ts +++ b/src/modules/clientes/clientes.controller.ts @@ -3,7 +3,7 @@ import { ClientesService } from './clientes.service'; import { CreateClienteDto } from './dto/create-cliente.dto'; import { UpdateClienteDto } from './dto/update-cliente.dto'; import { ApiTags } from '@nestjs/swagger'; -import { response as res } from 'express'; + @ApiTags('clientes') @Controller('clientes') export class ClientesController { diff --git a/src/modules/cotacoes/cotacoes.controller.ts b/src/modules/cotacoes/cotacoes.controller.ts index b52e59d..cb00b7f 100644 --- a/src/modules/cotacoes/cotacoes.controller.ts +++ b/src/modules/cotacoes/cotacoes.controller.ts @@ -16,7 +16,6 @@ import { CotacoesService } from './cotacoes.service'; import { CreateCotacaoDto } from './dto/create-cotacao.dto'; import { UpdateCotacaoDto } from './dto/update-cotacao.dto'; import { ApiTags } from '@nestjs/swagger'; -import { response as res } from "express"; import { recotarDto } from './dto/recotar.dto'; @ApiTags('cotacoes') @Controller('cotacoes') diff --git a/src/modules/fornecedores/fornecedores.controller.ts b/src/modules/fornecedores/fornecedores.controller.ts index c8919c1..ba4f8a1 100644 --- a/src/modules/fornecedores/fornecedores.controller.ts +++ b/src/modules/fornecedores/fornecedores.controller.ts @@ -16,7 +16,6 @@ import { FornecedoresService } from './fornecedores.service'; import { CreateFornecedorDto } from './dto/create-fornecedor.dto'; import { UpdateFornecedorDto } from './dto/update-fornecedor.dto'; import { ApiTags } from '@nestjs/swagger'; -import { response as res } from "express"; @ApiTags('fornecedores') @Controller('fornecedores') export class FornecedoresController { diff --git a/src/modules/insumos/insumos.controller.ts b/src/modules/insumos/insumos.controller.ts index d5ce4f1..159a81d 100644 --- a/src/modules/insumos/insumos.controller.ts +++ b/src/modules/insumos/insumos.controller.ts @@ -16,7 +16,6 @@ import { InsumosService } from './insumos.service'; import { CreateInsumoDto } from './dto/create-insumo.dto'; import { UpdateInsumoDto } from './dto/update-insumo.dto'; import { ApiTags } from '@nestjs/swagger'; -import { response as res } from "express"; @ApiTags('insumos') @Controller('insumos') export class InsumosController { diff --git a/src/modules/pedidos/pedidos.controller.ts b/src/modules/pedidos/pedidos.controller.ts index 9ea7eff..78ef7e1 100644 --- a/src/modules/pedidos/pedidos.controller.ts +++ b/src/modules/pedidos/pedidos.controller.ts @@ -16,8 +16,6 @@ import { PedidosService } from './pedidos.service'; import { CreatePedidoDto } from './dto/create-pedido.dto'; import { UpdatePedidoDto } from './dto/update-pedido.dto'; import { ApiTags } from '@nestjs/swagger'; -import { response as res } from 'express'; -import { status } from '@prisma/client'; @ApiTags('pedidos') @Controller('pedidos') export class PedidosController { diff --git a/src/modules/produtos-base/produtos-base.controller.ts b/src/modules/produtos-base/produtos-base.controller.ts index 7c48f90..09b31b9 100644 --- a/src/modules/produtos-base/produtos-base.controller.ts +++ b/src/modules/produtos-base/produtos-base.controller.ts @@ -16,7 +16,7 @@ import { ProdutosBaseService } from './produtos-base.service'; import { CreateProdutosBaseDto } from './dto/create-produtos-base.dto'; import { UpdateProdutosBaseDto } from './dto/update-produtos-base.dto'; import { ApiTags } from '@nestjs/swagger'; -import { response as res } from 'express'; + @ApiTags('produtos-base') @Controller('produtos-base') export class ProdutosBaseController { diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index 1ae775f..9893f17 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -16,7 +16,6 @@ import { ProdutosService } from './produtos.service'; import { CreateProdutoDto } from './dto/create-produto.dto'; import { UpdateProdutoDto } from './dto/update-produto.dto'; import { ApiTags } from '@nestjs/swagger'; -import { response as res } from 'express'; import { addProdutoBaseDto } from './dto/addProdutoBase.dto'; @ApiTags('produtos') @Controller('produtos') diff --git a/src/modules/usuarios/usuarios.controller.ts b/src/modules/usuarios/usuarios.controller.ts index a0913c6..402585d 100644 --- a/src/modules/usuarios/usuarios.controller.ts +++ b/src/modules/usuarios/usuarios.controller.ts @@ -16,7 +16,7 @@ import { UsuariosService } from './usuarios.service'; import { CreateUsuarioDto } from './dto/create-usuario.dto'; import { UpdateUsuarioDto } from './dto/update-usuario.dto'; import { ApiTags } from '@nestjs/swagger'; -import { response as res } from 'express'; + @ApiTags('usuarios') @Controller('usuarios') export class UsuariosController { From c51a594247624f6f04a024b5ec7ce1648d4a1627 Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Wed, 8 Nov 2023 00:18:58 -0300 Subject: [PATCH 061/115] =?UTF-8?q?altera=C3=A7=C3=B5es=20no=20schema?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 9 +++-- src/modules/clientes/clientes.service.ts | 47 +++++++++++++----------- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 54f285a..e70b3e1 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -113,6 +113,8 @@ model Pedido { status status @default(Pendente) idOrcamento Int @unique orcamento Orcamento @relation(fields: [idOrcamento], references: [id]) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt @@map("Pedidos") } @@ -120,14 +122,14 @@ model Pedido { model Produto { id Int @id @default(autoincrement()) titulo String - quantidade Int? + quantidade Float? valorUnitario Float? observacoes String? listaInsumos ListaInsumo[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt - Orcamento Orcamento @relation(fields: [orcamentoId], references: [id]) - orcamentoId Int + Orcamento Orcamento @relation(fields: [idOrcamento], references: [id]) + idOrcamento Int @@map("Produtos") } @@ -174,7 +176,6 @@ model Usuario { email String @unique telefone String senha String - token String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/src/modules/clientes/clientes.service.ts b/src/modules/clientes/clientes.service.ts index e43c027..3938c0d 100644 --- a/src/modules/clientes/clientes.service.ts +++ b/src/modules/clientes/clientes.service.ts @@ -8,30 +8,35 @@ import { Cliente } from './entities/cliente.entity'; export class ClientesService { constructor(private readonly prismaService: PrismaService) {} - async findAllWithPagination(page: number, perPage: number, nome_like? : string) { + async findAllWithPagination( + page: number, + perPage: number, + nome_like?: string, + ) { const skip = (page - 1) * perPage; - let clientes = Cliente[""]; - if(nome_like){ + let clientes = Cliente['']; + if (nome_like) { clientes = await this.prismaService.cliente.findMany({ - skip, - take: perPage, - where:{ - OR: [{ nome: { contains: nome_like } }, - { email: { contains: nome_like } }, - { rua: { contains: nome_like } }, - { nomeFantasia: { contains: nome_like } }, - { razaoSocial: { contains: nome_like } },], - }, - }); - }else{ - clientes = await this.prismaService.cliente.findMany({ - skip, - take: perPage, - }); - } - + skip, + take: perPage, + where: { + OR: [ + { nome: { contains: nome_like } }, + { email: { contains: nome_like } }, + { rua: { contains: nome_like } }, + { nomeFantasia: { contains: nome_like } }, + { razaoSocial: { contains: nome_like } }, + ], + }, + }); + } else { + clientes = await this.prismaService.cliente.findMany({ + skip, + take: perPage, + }); + } - return clientes ; + return clientes; } async findExistingCliente(id: number, termo: string) { From 67200175a19dedf0ee93742f9eedc9f04f151258 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Wed, 8 Nov 2023 10:08:03 -0300 Subject: [PATCH 062/115] =?UTF-8?q?Subindo=20corre=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/seed.ts | 2 +- src/modules/cotacoes/cotacoes.service.ts | 6 ++-- src/modules/produtos/produtos.service.ts | 29 ++++++++++--------- .../usuarios/dto/create-usuario.dto.ts | 10 ++----- .../usuarios/dto/update-usuario.dto.ts | 9 +----- .../usuarios/entities/usuario.entity.ts | 1 - 6 files changed, 23 insertions(+), 34 deletions(-) diff --git a/prisma/seed.ts b/prisma/seed.ts index b2f4726..5bb9a9c 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -13,7 +13,7 @@ async function seedDatabase() { email: faker.internet.email(), telefone: faker.phone.number(), senha: faker.internet.password(), - token: faker.string.alphanumeric({ length: 5 }) + }, }); } diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index 615dbf9..c1f2e8c 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -49,9 +49,9 @@ export class CotacoesService { where:{ idInsumo:id, idFornecedor:idfornecedor, - OR: [{ insumo: { titulo: { contains: nome_like } }}, - { fornecedor: {nome: { contains: nome_like }} }, - { fornecedor: {nomeFantasia: { contains: nome_like }} }, + OR: [{ insumo: { titulo: { contains: nome_like }} }, + { fornecedor: {nome: { contains: nome_like }} }, + { fornecedor: {nomeFantasia: { contains: nome_like }} }, { fornecedor: {razaoSocial: { contains: nome_like }} }, ], }, diff --git a/src/modules/produtos/produtos.service.ts b/src/modules/produtos/produtos.service.ts index b956da0..6e24624 100644 --- a/src/modules/produtos/produtos.service.ts +++ b/src/modules/produtos/produtos.service.ts @@ -15,24 +15,27 @@ export class ProdutosService { private readonly insumosProdutosBaseService: InsumosProdutosBaseService, ) {} - async findAllWithPagination(id:number,page: number, perPage: number, titulo_like: string) { + async findAllWithPagination( + id: number, + page: number, + perPage: number, + titulo_like: string, + ) { const skip = (page - 1) * perPage; - - let produtos = Produto[""]; - - produtos = await this.prismaService.produto.findMany({ + + let produtos = Produto['']; + + produtos = await this.prismaService.produto.findMany({ skip, take: perPage, - where:{ + where: { orcamentoId: id, - OR: [{ titulo: { contains: titulo_like } }, - ], + OR: [{ titulo: { contains: titulo_like } }], }, }); - return produtos ; + return produtos; } - async findOneByTitle(titulo: string) { return await this.prismaService.produto.findFirst({ where: { titulo }, @@ -69,11 +72,11 @@ export class ProdutosService { }); } - async countAll(id:number) { + async countAll(id: number) { return await this.prismaService.produto.count({ - where:{ + where: { orcamentoId: id, - } + }, }); } diff --git a/src/modules/usuarios/dto/create-usuario.dto.ts b/src/modules/usuarios/dto/create-usuario.dto.ts index 4bb926c..1c5da08 100644 --- a/src/modules/usuarios/dto/create-usuario.dto.ts +++ b/src/modules/usuarios/dto/create-usuario.dto.ts @@ -56,12 +56,6 @@ export class CreateUsuarioDto { @IsString({message: 'A senha inserida não é válida'}) senha: string; - @ApiProperty({ - description: - 'A token serve para autenticar o usuário dentro da aplicação', - example: '3213211312231', - }) - @ValidateIf((object, value) => value !== undefined) - @IsString({message: 'O token inserido não é válido'}) - token: string; + + } diff --git a/src/modules/usuarios/dto/update-usuario.dto.ts b/src/modules/usuarios/dto/update-usuario.dto.ts index d6c9497..d126134 100644 --- a/src/modules/usuarios/dto/update-usuario.dto.ts +++ b/src/modules/usuarios/dto/update-usuario.dto.ts @@ -57,12 +57,5 @@ export class UpdateUsuarioDto extends PartialType(CreateUsuarioDto) { @IsString({message: 'A senha inserida não é válida'}) senha?: string; - @ApiProperty({ - description: - 'A token serve para autenticar o usuário dentro da aplicação', - example: '3213211312231', - }) - @ValidateIf((object, value) => value !== undefined) - @IsString({message: 'O token inserido não é válido'}) - token?: string; + } diff --git a/src/modules/usuarios/entities/usuario.entity.ts b/src/modules/usuarios/entities/usuario.entity.ts index acb0217..8e05efd 100644 --- a/src/modules/usuarios/entities/usuario.entity.ts +++ b/src/modules/usuarios/entities/usuario.entity.ts @@ -8,7 +8,6 @@ export class Usuario { email: string; telefone: string; senha: string; - token: string; createdAt: Date; updatedAt: Date; } From 87cb8b0a1d2c0ce0059c1a611a080f8f960cd5d0 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Wed, 8 Nov 2023 20:01:32 -0300 Subject: [PATCH 063/115] =?UTF-8?q?Corre=C3=A7=C3=B5es=20campo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/seed.ts | 29 ++++++++++++++----- src/modules/orcamentos/orcamentos.service.ts | 2 +- .../produtos/dto/create-produto.dto.ts | 2 +- src/modules/produtos/produtos.service.ts | 10 +++---- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/prisma/seed.ts b/prisma/seed.ts index 5bb9a9c..ffe044d 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -7,13 +7,16 @@ async function seedDatabase() { for (let i = 0; i < 10; i++) { await prisma.usuario.create({ data: { - tipoUsuario: faker.helpers.arrayElement(['Serralheiro', 'Administrador', 'Vendedor']), + tipoUsuario: faker.helpers.arrayElement([ + 'Serralheiro', + 'Administrador', + 'Vendedor', + ]), nome: faker.person.firstName(), cpf: faker.string.numeric({ length: 11 }), email: faker.internet.email(), telefone: faker.phone.number(), senha: faker.internet.password(), - }, }); } @@ -21,7 +24,11 @@ async function seedDatabase() { for (let i = 0; i < 10; i++) { await prisma.categoria.create({ data: { - tipo: faker.helpers.arrayElement(['Material', 'Mão de obra', 'Serviço']), + tipo: faker.helpers.arrayElement([ + 'Material', + 'Mão de obra', + 'Serviço', + ]), titulo: faker.company.catchPhrase(), descricao: faker.lorem.paragraph(), }, @@ -33,7 +40,11 @@ async function seedDatabase() { data: { titulo: faker.commerce.productName(), descricao: faker.lorem.sentence(), - unidadeMedida: faker.helpers.arrayElement(['Unidade', 'Quilograma', 'Metro']), + unidadeMedida: faker.helpers.arrayElement([ + 'Unidade', + 'Quilograma', + 'Metro', + ]), idCategoria: faker.number.int({ min: 1, max: 10 }), }, }); @@ -81,7 +92,6 @@ async function seedDatabase() { }); } - for (let i = 0; i < 10; i++) { await prisma.orcamento.create({ data: { @@ -89,7 +99,12 @@ async function seedDatabase() { dataOrcamento: faker.date.recent(), totalMaoObra: faker.number.float(), totalMateriais: faker.number.float(), - status: faker.helpers.arrayElement(['Pendente', 'Iniciado', 'Em_Processo', 'Concluido']), + status: faker.helpers.arrayElement([ + 'Pendente', + 'Iniciado', + 'Em_Processo', + 'Concluido', + ]), prazoEstimadoProducao: faker.number.int({ min: 1, max: 30 }), observacoes: faker.lorem.sentence(), idCliente: faker.number.int({ min: 1, max: 10 }), // Gere um ID de cliente aleatório @@ -121,7 +136,7 @@ async function seedDatabase() { quantidade: faker.number.int({ min: 1, max: 10 }), valorUnitario: faker.number.float(), observacoes: faker.lorem.sentence(), - orcamentoId: faker.number.int({ min: 1, max: 10 }), // Gere um ID de orçamento aleatório + idOrcamento: faker.number.int({ min: 1, max: 10 }), // Gere um ID de orçamento aleatório }, }); } diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index 930d0c1..bd6e59f 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -115,7 +115,7 @@ export class OrcamentosService { if (orcamentoExists) { const produtos = await this.prismaService.produto.findMany({ where: { - orcamentoId: id, + idOrcamento: id, }, }); for (const produto of produtos) { diff --git a/src/modules/produtos/dto/create-produto.dto.ts b/src/modules/produtos/dto/create-produto.dto.ts index bc7264e..c40caaf 100644 --- a/src/modules/produtos/dto/create-produto.dto.ts +++ b/src/modules/produtos/dto/create-produto.dto.ts @@ -44,5 +44,5 @@ export class CreateProdutoDto { }) @IsNotEmpty({ message: 'O orçamento não pode estar vazio' }) @IsNumber({}, { message: 'O orçamento inserido não é válido' }) - orcamentoId: number; + idOrcamento: number; } diff --git a/src/modules/produtos/produtos.service.ts b/src/modules/produtos/produtos.service.ts index 6e24624..5b14e15 100644 --- a/src/modules/produtos/produtos.service.ts +++ b/src/modules/produtos/produtos.service.ts @@ -29,7 +29,7 @@ export class ProdutosService { skip, take: perPage, where: { - orcamentoId: id, + idOrcamento: id, OR: [{ titulo: { contains: titulo_like } }], }, }); @@ -50,7 +50,7 @@ export class ProdutosService { async create(createProdutoDto: CreateProdutoDto) { const orcamentoExists = await this.prismaService.orcamento.findFirst({ - where: { id: createProdutoDto.orcamentoId }, + where: { id: createProdutoDto.idOrcamento }, }); if (orcamentoExists) { const produtoExiste = await this.findOneByTitle(createProdutoDto.titulo); @@ -67,7 +67,7 @@ export class ProdutosService { async findProdutoOrc(id: number) { return await this.prismaService.produto.findMany({ where: { - OR: [{ orcamentoId: { equals: id } }], + OR: [{ idOrcamento: { equals: id } }], }, }); } @@ -75,7 +75,7 @@ export class ProdutosService { async countAll(id: number) { return await this.prismaService.produto.count({ where: { - orcamentoId: id, + idOrcamento: id, }, }); } @@ -135,7 +135,7 @@ export class ProdutosService { const copyProd = await this.prismaService.produto.create({ data: { titulo: prodBase.titulo, - orcamentoId: addProdutoBaseDto.orcamentoId, + idOrcamento: addProdutoBaseDto.orcamentoId, observacoes: addProdutoBaseDto.observacoes, quantidade: addProdutoBaseDto.quantidade, }, From 658ab2ab150245f49c9f54b07484f639623e6e74 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Thu, 9 Nov 2023 00:05:58 -0300 Subject: [PATCH 064/115] =?UTF-8?q?Or=C3=A7amento=20por=20completo=20consu?= =?UTF-8?q?lta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "Consertar" --- src/modules/cotacoes/dto/recotar.dto.ts | 5 -- .../orcamentos/orcamentos.controller.ts | 48 ++++++++---- src/modules/orcamentos/orcamentos.service.ts | 76 ++++++++++--------- 3 files changed, 75 insertions(+), 54 deletions(-) diff --git a/src/modules/cotacoes/dto/recotar.dto.ts b/src/modules/cotacoes/dto/recotar.dto.ts index bc793af..1c708db 100644 --- a/src/modules/cotacoes/dto/recotar.dto.ts +++ b/src/modules/cotacoes/dto/recotar.dto.ts @@ -2,11 +2,6 @@ import { ApiProperty } from '@nestjs/swagger'; import { IsDateString, IsNotEmpty, IsNumber } from 'class-validator'; export class recotarDto { - @ApiProperty({ - description: - 'A data serve para descrever quando esta cotação foi realizada', - example: '2023-10-23T17:30:44.382Z', - }) @IsNotEmpty({ message: 'A data não pode estar vazia' }) @IsDateString({}, { message: 'A data inserida não é válida' }) data: Date; diff --git a/src/modules/orcamentos/orcamentos.controller.ts b/src/modules/orcamentos/orcamentos.controller.ts index 3f15884..1ff0781 100644 --- a/src/modules/orcamentos/orcamentos.controller.ts +++ b/src/modules/orcamentos/orcamentos.controller.ts @@ -1,4 +1,17 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, ValidationPipe,UsePipes, Query, Res, Header } from '@nestjs/common'; +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + ValidationPipe, + UsePipes, + Query, + Res, + Header, +} from '@nestjs/common'; import { OrcamentosService } from './orcamentos.service'; import { CreateOrcamentoDto } from './dto/create-orcamento.dto'; import { UpdateOrcamentoDto } from './dto/update-orcamento.dto'; @@ -6,37 +19,44 @@ import { ApiTags } from '@nestjs/swagger'; @ApiTags('orcamentos') @Controller('orcamentos') export class OrcamentosController { - constructor(private readonly orcamentosService: OrcamentosService) {} + constructor(private readonly orcamentosService: OrcamentosService) { } @Get('count') async countAll() { return await this.orcamentosService.countAll(); } - + @Get() @Header('Access-Control-Allow-Origin', '*') @Header('Access-Control-Expose-Headers', 'X-Total-Count') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { - page = page||1; - perPage = perPage|| await this.countAll(); + async findAll( + @Query('page') page: number, + @Query('perPage') perPage: number, + @Query('titulo_like') titulo_like: string, + @Res({ passthrough: true }) res, + ) { + page = page || 1; + perPage = perPage || (await this.countAll()); - const orcamentos = await this.orcamentosService.findAllWithPagination( page, Number(perPage), - titulo_like + titulo_like, ); - const total = await this.orcamentosService.countAll(); - res.header('x-total-count',total); - return await orcamentos + const total = await this.orcamentosService.countAll(); + res.header('x-total-count', total); + return await orcamentos; } - + @Post() async create(@Body() createOrcamentoDto: CreateOrcamentoDto) { - return await this.orcamentosService.create(createOrcamentoDto); } + @Get('full/:id') + async findOneFull(@Param('id') id: string) { + return await this.orcamentosService.findOneFull(+id); + } @Get(':id') async findOne(@Param('id') id: string) { @@ -51,7 +71,7 @@ export class OrcamentosController { ) { return await this.orcamentosService.update(+id, updateOrcamentoDto); } - + @Delete(':id') async remove(@Param('id') id: string) { return await this.orcamentosService.remove(+id); diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index bd6e59f..b5fd395 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -10,7 +10,7 @@ export class OrcamentosService { constructor( private readonly prismaService: PrismaService, private readonly produtoService: ProdutosService, - ) {} + ) { } async countAll() { return await this.prismaService.cliente.count({}); } @@ -21,46 +21,46 @@ export class OrcamentosService { async findAllWithPagination(page: number, perPage: number, titulo_like: string) { const skip = (page - 1) * perPage; - - let orcamentos = Orcamento[""]; - if(titulo_like){ - + + let orcamentos = Orcamento[""]; + if (titulo_like) { + const isNumero = !isNaN(parseInt(titulo_like)); - - if (isNumero) { - orcamentos = await this.prismaService.orcamento.findMany({ - skip, - take: perPage, - where: { - OR: [ - { id: { equals: parseInt(titulo_like) } }, - { cliente: { nome: { contains: titulo_like } } }, - { cliente: { nomeFantasia: { contains: titulo_like } } }, - { cliente: { razaoSocial: { contains: titulo_like } } }, - ], - }, - }); - }else{ + + if (isNumero) { + orcamentos = await this.prismaService.orcamento.findMany({ + skip, + take: perPage, + where: { + OR: [ + { id: { equals: parseInt(titulo_like) } }, + { cliente: { nome: { contains: titulo_like } } }, + { cliente: { nomeFantasia: { contains: titulo_like } } }, + { cliente: { razaoSocial: { contains: titulo_like } } }, + ], + }, + }); + } else { + orcamentos = await this.prismaService.orcamento.findMany({ + skip, + take: perPage, + where: { + OR: [ + { cliente: { nome: { contains: titulo_like } } }, + { cliente: { nomeFantasia: { contains: titulo_like } } }, + { cliente: { razaoSocial: { contains: titulo_like } } }, + ], + }, + }); + } + + } else { orcamentos = await this.prismaService.orcamento.findMany({ skip, take: perPage, - where: { - OR: [ - { cliente: { nome: { contains: titulo_like } } }, - { cliente: { nomeFantasia: { contains: titulo_like } } }, - { cliente: { razaoSocial: { contains: titulo_like } } }, - ], - }, }); } - - }else{ - orcamentos = await this.prismaService.orcamento.findMany({ - skip, - take: perPage, - }); - } - return orcamentos ; + return orcamentos; } async create(createOrcamentoDto: CreateOrcamentoDto) { @@ -81,6 +81,12 @@ export class OrcamentosService { return { data: { message: 'Não há orçamentos' } }; } + async findOneFull(id: number) { + const orcamento = await this.prismaService.orcamento.findFirst(where: { id }, + include: { cliente }); + return orcamento; + } + async findOne(id: number) { return await this.prismaService.orcamento.findFirst({ where: { id } }); } From a520b6f71aa2f4330bfee244c6f0360c2304b565 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Thu, 9 Nov 2023 00:10:35 -0300 Subject: [PATCH 065/115] =?UTF-8?q?Corre=C3=A7=C3=A3o=20fun=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> --- src/modules/cotacoes/cotacoes.controller.ts | 6 +----- src/modules/cotacoes/cotacoes.service.ts | 3 --- src/modules/orcamentos/orcamentos.service.ts | 18 +++++++++++------- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/modules/cotacoes/cotacoes.controller.ts b/src/modules/cotacoes/cotacoes.controller.ts index cb00b7f..2b5620f 100644 --- a/src/modules/cotacoes/cotacoes.controller.ts +++ b/src/modules/cotacoes/cotacoes.controller.ts @@ -61,11 +61,7 @@ export class CotacoesController { nome_like, +idFornecedor ); - - - const total = await this.countById(+idInsumo); - - + const total = await this.countById(+idInsumo); res.header('x-total-count',total); return await cotacoes } diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index c1f2e8c..2d0eaeb 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -16,11 +16,9 @@ export class CotacoesService { obsoleta: true, }, }); - if (!oldQuotation) { return { data: { message: 'Não foi possivel criar a nova cotação' } }; } - const newQuotation = await this.prismaService.cotacao.create({ data: { idInsumo: oldQuotation.idInsumo, @@ -30,7 +28,6 @@ export class CotacoesService { data: recotarDto.data, }, }); - if (!newQuotation) { return { data: { message: 'Não foi possivel criar a nova cotação' } }; } diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index b5fd395..5d11916 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -10,7 +10,7 @@ export class OrcamentosService { constructor( private readonly prismaService: PrismaService, private readonly produtoService: ProdutosService, - ) { } + ) {} async countAll() { return await this.prismaService.cliente.count({}); } @@ -19,12 +19,15 @@ export class OrcamentosService { return await this.prismaService.cliente.findFirst({ where: { id } }); } - async findAllWithPagination(page: number, perPage: number, titulo_like: string) { + async findAllWithPagination( + page: number, + perPage: number, + titulo_like: string, + ) { const skip = (page - 1) * perPage; - let orcamentos = Orcamento[""]; + let orcamentos = Orcamento['']; if (titulo_like) { - const isNumero = !isNaN(parseInt(titulo_like)); if (isNumero) { @@ -53,7 +56,6 @@ export class OrcamentosService { }, }); } - } else { orcamentos = await this.prismaService.orcamento.findMany({ skip, @@ -82,8 +84,10 @@ export class OrcamentosService { } async findOneFull(id: number) { - const orcamento = await this.prismaService.orcamento.findFirst(where: { id }, - include: { cliente }); + const orcamento = await this.prismaService.orcamento.findFirst({ + where: { id }, + include: { cliente: true }, + }); return orcamento; } From 814706d07348cf7027aa0262236f206c79f50234 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Thu, 9 Nov 2023 00:41:31 -0300 Subject: [PATCH 066/115] Update orcamentos.service.ts --- src/modules/orcamentos/orcamentos.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index 5d11916..bda487c 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -86,7 +86,7 @@ export class OrcamentosService { async findOneFull(id: number) { const orcamento = await this.prismaService.orcamento.findFirst({ where: { id }, - include: { cliente: true }, + include: { cliente: true, produtos: true }, }); return orcamento; } From 8c2f8660c68417d2b59971fd67ba0cf81578a69f Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Thu, 9 Nov 2023 21:24:50 -0300 Subject: [PATCH 067/115] Update insumos-produtos-base.controller.ts --- .../insumos-produtos-base.controller.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts index f6b77ef..b9a1872 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts @@ -25,6 +25,11 @@ export class InsumosProdutosBaseController { return await this.insumosProdutosBaseService.create(createInsumosProdutosBaseDto); } + @Get('insumo/:id') + async findOne(@Param('id') id: string) { + return await this.insumosProdutosBaseService.findOne(+id); + } + @Get(":id") @Header('Access-Control-Allow-Origin', '*') @Header('Access-Control-Expose-Headers', 'X-Total-Count') @@ -44,11 +49,6 @@ export class InsumosProdutosBaseController { return await insumosBase } - @Get(':id') - async findOne(@Param('id') id: string) { - return await this.insumosProdutosBaseService.findOne(+id); - } - @UsePipes(ValidationPipe) @Patch(':id') async update(@Param('id') id: string, @Body() updateInsumosProdutosBaseDto: UpdateInsumosProdutosBaseDto) { From f034530229d73acd917f0b3312e6562d93f51b97 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Thu, 9 Nov 2023 21:48:29 -0300 Subject: [PATCH 068/115] Variante Base --- prisma/schema.prisma | 10 +++ src/app.module.ts | 2 + .../variantes/dto/create-variante.dto.ts | 4 ++ .../variantes/dto/update-variante.dto.ts | 7 ++ .../variantes/entities/variante.entity.ts | 8 +++ .../variantes/variantes.controller.spec.ts | 20 ++++++ src/modules/variantes/variantes.controller.ts | 69 +++++++++++++++++++ src/modules/variantes/variantes.module.ts | 10 +++ .../variantes/variantes.service.spec.ts | 18 +++++ src/modules/variantes/variantes.service.ts | 60 ++++++++++++++++ 10 files changed, 208 insertions(+) create mode 100644 src/modules/variantes/dto/create-variante.dto.ts create mode 100644 src/modules/variantes/dto/update-variante.dto.ts create mode 100644 src/modules/variantes/entities/variante.entity.ts create mode 100644 src/modules/variantes/variantes.controller.spec.ts create mode 100644 src/modules/variantes/variantes.controller.ts create mode 100644 src/modules/variantes/variantes.module.ts create mode 100644 src/modules/variantes/variantes.service.spec.ts create mode 100644 src/modules/variantes/variantes.service.ts diff --git a/prisma/schema.prisma b/prisma/schema.prisma index e70b3e1..af93778 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -31,6 +31,7 @@ model Insumo { insumoProdutoBase InsumoProdutoBase[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt + Variante Variante[] @@map("Insumos") } @@ -182,6 +183,15 @@ model Usuario { @@map("Usuarios") } +model Variante { + id Int @id @default(autoincrement()) + variante String + idInsumo Int + insumo Insumo @relation(fields: [idInsumo], references: [id]) + + @@map("Variantes") +} + model ProdutoBase { id Int @id @default(autoincrement()) titulo String diff --git a/src/app.module.ts b/src/app.module.ts index 8b4f61d..d33ab1b 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -13,6 +13,7 @@ import { ListaInsumosModule } from './modules/lista-insumos/lista-insumos.module import { UsuariosModule } from './modules/usuarios/usuarios.module'; import { ProdutosBaseModule } from './modules/produtos-base/produtos-base.module'; import { InsumosProdutosBaseModule } from './modules/insumos-produtos-base/insumos-produtos-base.module'; +import { VariantesModule } from './modules/variantes/variantes.module'; @Module({ imports: [ @@ -28,6 +29,7 @@ import { InsumosProdutosBaseModule } from './modules/insumos-produtos-base/insum UsuariosModule, ProdutosBaseModule, InsumosProdutosBaseModule, + VariantesModule, ], controllers: [AppController], providers: [AppService], diff --git a/src/modules/variantes/dto/create-variante.dto.ts b/src/modules/variantes/dto/create-variante.dto.ts new file mode 100644 index 0000000..5550e0f --- /dev/null +++ b/src/modules/variantes/dto/create-variante.dto.ts @@ -0,0 +1,4 @@ +export class CreateVarianteDto { + variante: string; + idInsumo: number; +} diff --git a/src/modules/variantes/dto/update-variante.dto.ts b/src/modules/variantes/dto/update-variante.dto.ts new file mode 100644 index 0000000..989efe0 --- /dev/null +++ b/src/modules/variantes/dto/update-variante.dto.ts @@ -0,0 +1,7 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreateVarianteDto } from './create-variante.dto'; + +export class UpdateVarianteDto extends PartialType(CreateVarianteDto) { + variante?: string; + idInsumo?: number; +} diff --git a/src/modules/variantes/entities/variante.entity.ts b/src/modules/variantes/entities/variante.entity.ts new file mode 100644 index 0000000..613f3cf --- /dev/null +++ b/src/modules/variantes/entities/variante.entity.ts @@ -0,0 +1,8 @@ +import { Insumo } from 'src/modules/insumos/entities/insumo.entity'; + +export class Variante { + id: number; + variante: string; + idInsumo: number; + insumo?: Insumo; +} diff --git a/src/modules/variantes/variantes.controller.spec.ts b/src/modules/variantes/variantes.controller.spec.ts new file mode 100644 index 0000000..dfc41ef --- /dev/null +++ b/src/modules/variantes/variantes.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { VariantesController } from './variantes.controller'; +import { VariantesService } from './variantes.service'; + +describe('VariantesController', () => { + let controller: VariantesController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [VariantesController], + providers: [VariantesService], + }).compile(); + + controller = module.get(VariantesController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/modules/variantes/variantes.controller.ts b/src/modules/variantes/variantes.controller.ts new file mode 100644 index 0000000..b9f30dc --- /dev/null +++ b/src/modules/variantes/variantes.controller.ts @@ -0,0 +1,69 @@ +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + Query, + Header, + Res, +} from '@nestjs/common'; +import { VariantesService } from './variantes.service'; +import { CreateVarianteDto } from './dto/create-variante.dto'; +import { UpdateVarianteDto } from './dto/update-variante.dto'; + +@Controller('variantes') +export class VariantesController { + constructor(private readonly variantesService: VariantesService) {} + + @Get('count') + async countAll() { + return await this.variantesService.countAll(); + } + + @Post() + create(@Body() createVarianteDto: CreateVarianteDto) { + return this.variantesService.create(createVarianteDto); + } + + @Get() + @Header('Access-Control-Allow-Origin', '*') + @Header('Access-Control-Expose-Headers', 'X-Total-Count') + async findAll( + @Query('page') page: number, + @Query('perPage') perPage: number, + @Query('titulo_like') titulo_like: string, + @Res({ passthrough: true }) res, + ) { + page = page || 1; + perPage = perPage || (await this.countAll()); + const variantes = await this.variantesService.findAll( + page, + Number(perPage), + titulo_like, + ); + const total = await this.variantesService.countAll(); + res.header('x-total-count', total); + return await variantes; + } + + @Get(':id') + findOne(@Param('id') id: string) { + return this.variantesService.findOne(+id); + } + + @Patch(':id') + update( + @Param('id') id: string, + @Body() updateVarianteDto: UpdateVarianteDto, + ) { + return this.variantesService.update(+id, updateVarianteDto); + } + + @Delete(':id') + remove(@Param('id') id: string) { + return this.variantesService.remove(+id); + } +} diff --git a/src/modules/variantes/variantes.module.ts b/src/modules/variantes/variantes.module.ts new file mode 100644 index 0000000..fa2f1a4 --- /dev/null +++ b/src/modules/variantes/variantes.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { VariantesService } from './variantes.service'; +import { VariantesController } from './variantes.controller'; +import { PrismaService } from 'src/databases/prisma.service'; + +@Module({ + controllers: [VariantesController], + providers: [VariantesService, PrismaService], +}) +export class VariantesModule {} diff --git a/src/modules/variantes/variantes.service.spec.ts b/src/modules/variantes/variantes.service.spec.ts new file mode 100644 index 0000000..7441273 --- /dev/null +++ b/src/modules/variantes/variantes.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { VariantesService } from './variantes.service'; + +describe('VariantesService', () => { + let service: VariantesService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [VariantesService], + }).compile(); + + service = module.get(VariantesService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/modules/variantes/variantes.service.ts b/src/modules/variantes/variantes.service.ts new file mode 100644 index 0000000..31a197f --- /dev/null +++ b/src/modules/variantes/variantes.service.ts @@ -0,0 +1,60 @@ +import { Injectable } from '@nestjs/common'; +import { CreateVarianteDto } from './dto/create-variante.dto'; +import { UpdateVarianteDto } from './dto/update-variante.dto'; +import { PrismaService } from 'src/databases/prisma.service'; +import { Variante } from './entities/variante.entity'; + +@Injectable() +export class VariantesService { + constructor(private readonly prismaService: PrismaService) {} + + create(createVarianteDto: CreateVarianteDto) { + return this.prismaService.variante.create({ data: createVarianteDto }); + } + + async findAll(page: number, perPage: number, titulo_like?: string) { + const skip = (page - 1) * perPage; + let variantes = Variante['']; + if (titulo_like) { + variantes = await this.prismaService.variante.findMany({ + skip, + take: perPage, + where: { + OR: [ + /* + { nome: { contains: titulo_like } }, + { email: { contains: titulo_like } }, + { cpf: { contains: titulo_like } }, + */ + ], + }, + include: { insumo: true }, + }); + } else { + variantes = await this.prismaService.variante.findMany({ + skip, + take: perPage, + }); + } + return variantes; + } + + async findOne(id: number) { + return await this.prismaService.variante.findFirst({ where: { id } }); + } + + async update(id: number, updateVarianteDto: UpdateVarianteDto) { + return await this.prismaService.variante.update({ + where: { id }, + data: updateVarianteDto, + }); + } + + async remove(id: number) { + return await this.prismaService.variante.delete({ where: { id } }); + } + + async countAll() { + return await this.prismaService.variante.count(); + } +} From c65821a825467fd7f5e06ef7cc085d50b4fa9ddb Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Thu, 9 Nov 2023 22:39:22 -0300 Subject: [PATCH 069/115] variante --- prisma/schema.prisma | 54 +++++------ prisma/seed.ts | 15 ++- src/modules/cotacoes/cotacoes.service.ts | 95 ++++++++++--------- .../cotacoes/dto/create-cotacao.dto.ts | 2 +- .../cotacoes/dto/update-cotacao.dto.ts | 2 +- .../cotacoes/entities/cotacao.entity.ts | 2 +- .../dto/create-insumo-produtos-base.dto.ts | 17 ++-- .../dto/update-insumo-produtos-base.dto.ts | 2 +- .../entities/insumo-produtos-base.entity.ts | 6 +- .../insumos-produtos-base.service.ts | 39 ++++---- src/modules/insumos/entities/insumo.entity.ts | 2 + src/modules/insumos/insumos.service.ts | 61 ++++++------ .../dto/create-lista-insumo.dto.ts | 15 ++- .../dto/update-lista-insumo.dto.ts | 2 +- .../entities/lista-insumo.entity.ts | 5 +- .../lista-insumos/lista-insumos.service.ts | 58 ++++++----- src/modules/produtos/produtos.service.ts | 2 +- 17 files changed, 215 insertions(+), 164 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index af93778..ff3d881 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -20,18 +20,15 @@ model Categoria { } model Insumo { - id Int @id @default(autoincrement()) - titulo String - descricao String? - unidadeMedida String? - idCategoria Int? - categoria Categoria? @relation(fields: [idCategoria], references: [id]) - cotacoes Cotacao[] - listaInsumo ListaInsumo[] - insumoProdutoBase InsumoProdutoBase[] - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - Variante Variante[] + id Int @id @default(autoincrement()) + titulo String + descricao String? + unidadeMedida String? + idCategoria Int? + categoria Categoria? @relation(fields: [idCategoria], references: [id]) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + variante Variante[] @@map("Insumos") } @@ -141,10 +138,10 @@ model Cotacao { valor Float unidade String idFornecedor Int - idInsumo Int + idVariante Int obsoleta Boolean? @default(false) fornecedor Fornecedor @relation(fields: [idFornecedor], references: [id]) - insumo Insumo @relation(fields: [idInsumo], references: [id]) + variante Variante @relation(fields: [idVariante], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt ListaInsumo ListaInsumo[] @@ -153,18 +150,18 @@ model Cotacao { } model ListaInsumo { - id Int @id @default(autoincrement()) + id Int @id @default(autoincrement()) quantidade Float idProduto Int - idInsumo Int + idVariante Int idCotacao Int? unidade String? valorUnitario Float? - produto Produto? @relation(fields: [idProduto], references: [id]) - insumo Insumo? @relation(fields: [idInsumo], references: [id]) - cotacao Cotacao? @relation(fields: [idCotacao], references: [id]) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt + produto Produto? @relation(fields: [idProduto], references: [id]) + variante Variante? @relation(fields: [idVariante], references: [id]) + cotacao Cotacao? @relation(fields: [idCotacao], references: [id]) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt @@map("ListaInsumos") } @@ -184,10 +181,13 @@ model Usuario { } model Variante { - id Int @id @default(autoincrement()) - variante String - idInsumo Int - insumo Insumo @relation(fields: [idInsumo], references: [id]) + id Int @id @default(autoincrement()) + variante String + idInsumo Int + insumo Insumo @relation(fields: [idInsumo], references: [id]) + listaInsumo ListaInsumo[] + insumoProdutoBase InsumoProdutoBase[] + Cotacao Cotacao[] @@map("Variantes") } @@ -207,10 +207,10 @@ model InsumoProdutoBase { id Int @id @default(autoincrement()) quantidade Float @default(1) idProdutoBase Int - idInsumo Int + idVariante Int unidade String? produtoBase ProdutoBase @relation(fields: [idProdutoBase], references: [id]) - insumos Insumo @relation(fields: [idInsumo], references: [id]) + variantes Variante @relation(fields: [idVariante], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/prisma/seed.ts b/prisma/seed.ts index ffe044d..4646c2b 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -50,6 +50,15 @@ async function seedDatabase() { }); } + for (let i = 0; i < 20; i++) { + await prisma.variante.create({ + data: { + variante: faker.commerce.productName(), + idInsumo: faker.number.int({ min: 1, max: 20 }), + }, + }); + } + for (let i = 0; i < 10; i++) { await prisma.fornecedor.create({ data: { @@ -148,7 +157,7 @@ async function seedDatabase() { valor: faker.number.float(), unidade: faker.helpers.arrayElement(['Kg', 'Unidade', 'M', 'L']), idFornecedor: faker.number.int({ min: 1, max: 10 }), // Gere um ID de fornecedor aleatório - idInsumo: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório + idVariante: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório }, }); } @@ -158,7 +167,7 @@ async function seedDatabase() { data: { quantidade: faker.number.int(), idProduto: faker.number.int({ min: 1, max: 20 }), // Gere um ID de produto aleatório - idInsumo: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório + idVariante: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório idCotacao: faker.number.int({ min: 1, max: 10 }), // Gere um ID de cotação aleatório unidade: faker.helpers.arrayElement(['Kg', 'Unidade', 'M', 'L']), valorUnitario: faker.number.float(), @@ -180,7 +189,7 @@ async function seedDatabase() { data: { quantidade: faker.number.float(), idProdutoBase: faker.number.int({ min: 1, max: 10 }), // Gere um ID de produto base aleatório - idInsumo: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório + idVariante: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório unidade: faker.helpers.arrayElement(['Kg', 'Unidade', 'M', 'L']), }, }); diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index 2d0eaeb..dee83f6 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -21,7 +21,7 @@ export class CotacoesService { } const newQuotation = await this.prismaService.cotacao.create({ data: { - idInsumo: oldQuotation.idInsumo, + idVariante: oldQuotation.idVariante, idFornecedor: oldQuotation.idFornecedor, unidade: oldQuotation.unidade, valor: recotarDto.valor, @@ -35,55 +35,63 @@ export class CotacoesService { return newQuotation; } - async findAllWithPagination(id:number,page: number, perPage: number, nome_like? : string,idfornecedor?:number) { + async findAllWithPagination( + id: number, + page: number, + perPage: number, + nome_like?: string, + idfornecedor?: number, + ) { const skip = (page - 1) * perPage; - let cotacoes = Cotacao[""]; - - if(id && idfornecedor){ + let cotacoes = Cotacao['']; + + if (id && idfornecedor) { cotacoes = await this.prismaService.cotacao.findMany({ skip, take: perPage, - where:{ - idInsumo:id, - idFornecedor:idfornecedor, - OR: [{ insumo: { titulo: { contains: nome_like }} }, - { fornecedor: {nome: { contains: nome_like }} }, - { fornecedor: {nomeFantasia: { contains: nome_like }} }, - { fornecedor: {razaoSocial: { contains: nome_like }} }, - ], + where: { + idVariante: id, + idFornecedor: idfornecedor, + OR: [ + { variante: { insumo: { titulo: { contains: nome_like } } } }, + { fornecedor: { nome: { contains: nome_like } } }, + { fornecedor: { nomeFantasia: { contains: nome_like } } }, + { fornecedor: { razaoSocial: { contains: nome_like } } }, + ], }, }); - }else if(id){ + } else if (id) { cotacoes = await this.prismaService.cotacao.findMany({ skip, take: perPage, - where:{ - idInsumo:id, - - OR: [{ insumo: { titulo: { contains: nome_like } }}, - { fornecedor: {nome: { contains: nome_like }} }, - { fornecedor: {nomeFantasia: { contains: nome_like }} }, - { fornecedor: {razaoSocial: { contains: nome_like }} }, - ], + where: { + idVariante: id, + + OR: [ + { variante: { insumo: { titulo: { contains: nome_like } } } }, + { fornecedor: { nome: { contains: nome_like } } }, + { fornecedor: { nomeFantasia: { contains: nome_like } } }, + { fornecedor: { razaoSocial: { contains: nome_like } } }, + ], }, }); - }else{ + } else { cotacoes = await this.prismaService.cotacao.findMany({ - skip, - take: perPage, - where:{ - OR: [{ insumo: { titulo: { contains: nome_like } }}, - { fornecedor: {nome: { contains: nome_like }} }, - { fornecedor: {nomeFantasia: { contains: nome_like }} }, - { fornecedor: {razaoSocial: { contains: nome_like }} }, - ], - }, - }); - } - - return cotacoes ; - } + skip, + take: perPage, + where: { + OR: [ + { variante: { insumo: { titulo: { contains: nome_like } } } }, + { fornecedor: { nome: { contains: nome_like } } }, + { fornecedor: { nomeFantasia: { contains: nome_like } } }, + { fornecedor: { razaoSocial: { contains: nome_like } } }, + ], + }, + }); + } + return cotacoes; + } async countAllCotacaos() { return await this.prismaService.cotacao.count({}); @@ -91,20 +99,19 @@ export class CotacoesService { async countByIdInsumoCotacaos(id: number) { return await this.prismaService.cotacao.count({ - where:{ - idInsumo : id - } + where: { + idVariante: id, + }, }); } - async create(createCotacaoDto: CreateCotacaoDto) { const fornecedorExists = await this.prismaService.fornecedor.findFirst({ where: { id: createCotacaoDto.idFornecedor }, }); if (fornecedorExists) { const insumoExists = await this.prismaService.insumo.findFirst({ - where: { id: createCotacaoDto.idInsumo }, + where: { id: createCotacaoDto.idVariante }, }); if (insumoExists) { return await this.prismaService.cotacao.create({ @@ -128,7 +135,7 @@ export class CotacoesService { async findManyByInsumo(id: number) { return await this.prismaService.cotacao.findMany({ - where: { idInsumo: id }, + where: { idVariante: id }, }); } @@ -150,7 +157,7 @@ export class CotacoesService { }); if (fornecedorExists) { const insumoExists = await this.prismaService.insumo.findFirst({ - where: { id: updateCotacaoDto.idInsumo }, + where: { id: updateCotacaoDto.idVariante }, }); if (insumoExists) { return await this.prismaService.cotacao.update({ diff --git a/src/modules/cotacoes/dto/create-cotacao.dto.ts b/src/modules/cotacoes/dto/create-cotacao.dto.ts index a777eeb..0ea1f07 100644 --- a/src/modules/cotacoes/dto/create-cotacao.dto.ts +++ b/src/modules/cotacoes/dto/create-cotacao.dto.ts @@ -36,7 +36,7 @@ export class CreateCotacaoDto { }) @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) @IsNumber({}, { message: 'O insumo inserido não é válido' }) - idInsumo: number; + idVariante: number; @ApiProperty({ description: diff --git a/src/modules/cotacoes/dto/update-cotacao.dto.ts b/src/modules/cotacoes/dto/update-cotacao.dto.ts index 5951ee1..b071104 100644 --- a/src/modules/cotacoes/dto/update-cotacao.dto.ts +++ b/src/modules/cotacoes/dto/update-cotacao.dto.ts @@ -54,7 +54,7 @@ export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { }) @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) @IsNumber({}, { message: 'O insumo inserido não é válido' }) - idInsumo?: number; + idVariante?: number; @ApiProperty({ description: 'A unidade serve para descrever as dimensões do insumo', diff --git a/src/modules/cotacoes/entities/cotacao.entity.ts b/src/modules/cotacoes/entities/cotacao.entity.ts index 61d40d8..b4df55b 100644 --- a/src/modules/cotacoes/entities/cotacao.entity.ts +++ b/src/modules/cotacoes/entities/cotacao.entity.ts @@ -4,7 +4,7 @@ export class Cotacao { obsoleta: boolean; valor: number; idFornecedor: number; - idInsumo: number; + idVariante: number; unidade: string; createdAt: Date; updatedAt: Date; diff --git a/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts b/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts index f3ae66a..5591843 100644 --- a/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts +++ b/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts @@ -7,8 +7,8 @@ export class CreateInsumosProdutosBaseDto { 'A quantidade serve para descrever quantas unidades deste insumo serão necessárias para produzir o produto', example: '5', }) - @IsNotEmpty({message: 'A quantidade não pode estar vazia'}) - @IsNumber({},{message: 'A quantidade inserida não é válida'}) + @IsNotEmpty({ message: 'A quantidade não pode estar vazia' }) + @IsNumber({}, { message: 'A quantidade inserida não é válida' }) quantidade: number; @ApiProperty({ @@ -16,8 +16,8 @@ export class CreateInsumosProdutosBaseDto { 'O id do produto base serve para descrever a qual produto base que um determinado insumo pertence', example: '1', }) - @IsNotEmpty({message: 'O produto base não pode estar vazio'}) - @IsNumber({},{message: 'O produto base inserido não é válido'}) + @IsNotEmpty({ message: 'O produto base não pode estar vazio' }) + @IsNumber({}, { message: 'O produto base inserido não é válido' }) idProdutoBase: number; @ApiProperty({ @@ -25,13 +25,12 @@ export class CreateInsumosProdutosBaseDto { 'O id do insumo serve para descrever para qual insumo este insumo produto base aponta', example: '1', }) - @IsNotEmpty({message: 'O insumo não pode estar vazio'}) - @IsNumber({},{message: 'O insumo inserido não é válido'}) - idInsumo: number; + @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) + @IsNumber({}, { message: 'O insumo inserido não é válido' }) + idVariante: number; @ApiProperty({ - description: - 'A unidade serve para descrever as dimensões do insumo', + description: 'A unidade serve para descrever as dimensões do insumo', example: '1M', }) @ValidateIf((object, value) => value !== undefined) diff --git a/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts b/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts index c6561bc..eddf152 100644 --- a/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts +++ b/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts @@ -31,7 +31,7 @@ export class UpdateInsumosProdutosBaseDto extends PartialType( }) @IsNotEmpty({message: 'O insumo não pode estar vazio'}) @IsNumber({},{message: 'O insumo inserido não é válido'}) - idInsumo?: number; + idVariante?: number; @ApiProperty({ description: diff --git a/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts b/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts index d3545c3..f69d6cc 100644 --- a/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts +++ b/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts @@ -1,14 +1,14 @@ import { ProdutoBase } from '@prisma/client'; -import { Insumo } from 'src/modules/insumos/entities/insumo.entity'; +import { Variante } from 'src/modules/variantes/entities/variante.entity'; export class InsumoProdutosBase { id: number; quantidade: number; idProdutoBase: number; - idInsumo: number; + idVariante: number; unidade: string; produtoBase: ProdutoBase; - insumo: Insumo; + variante: Variante; createdAt: Date; updatedAt: Date; } diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts index 71cff6f..2dc2a28 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts @@ -8,27 +8,32 @@ import { InsumoProdutosBase } from './entities/insumo-produtos-base.entity'; export class InsumosProdutosBaseService { constructor(private readonly prismaService: PrismaService) {} - async findAllWithPagination(idProdutobase: number,page: number, perPage: number, busca: string) { + async findAllWithPagination( + idProdutobase: number, + page: number, + perPage: number, + busca: string, + ) { const skip = (page - 1) * perPage; - let insumosProdutoBase = InsumoProdutosBase[""]; - - insumosProdutoBase = await this.prismaService.insumoProdutoBase.findMany({ + let insumosProdutoBase = InsumoProdutosBase['']; + + insumosProdutoBase = await this.prismaService.insumoProdutoBase.findMany({ skip, take: perPage, - where:{ - idProdutoBase:idProdutobase, - OR: [ { insumos: {titulo: { contains: busca }} }, - { unidade: { contains: busca } }, - ], + where: { + idProdutoBase: idProdutobase, + OR: [ + { variantes: { insumo: { titulo: { contains: busca } } } }, + { unidade: { contains: busca } }, + ], }, - }); - return insumosProdutoBase ; + return insumosProdutoBase; } async create(createInsumosProdutosBaseDto: CreateInsumosProdutosBaseDto) { const insumoExists = await this.prismaService.insumo.findFirst({ - where: { id: createInsumosProdutosBaseDto.idInsumo }, + where: { id: createInsumosProdutosBaseDto.idVariante }, }); if (insumoExists) { const produtoBaseExists = await this.prismaService.produtoBase.findFirst({ @@ -45,9 +50,11 @@ export class InsumosProdutosBaseService { } async countAll(idProdutobase: number) { - return await this.prismaService.insumoProdutoBase.count({where:{ - idProdutoBase: idProdutobase - }}); + return await this.prismaService.insumoProdutoBase.count({ + where: { + idProdutoBase: idProdutobase, + }, + }); } async findInsumoProdBase(id: number) { @@ -73,7 +80,7 @@ export class InsumosProdutosBaseService { updateInsumosProdutosBaseDto: UpdateInsumosProdutosBaseDto, ) { const insumoExists = await this.prismaService.insumo.findFirst({ - where: { id: updateInsumosProdutosBaseDto.idInsumo }, + where: { id: updateInsumosProdutosBaseDto.idVariante }, }); if (insumoExists) { const produtoBaseExists = await this.prismaService.produtoBase.findFirst({ diff --git a/src/modules/insumos/entities/insumo.entity.ts b/src/modules/insumos/entities/insumo.entity.ts index 3f40fc2..df07403 100644 --- a/src/modules/insumos/entities/insumo.entity.ts +++ b/src/modules/insumos/entities/insumo.entity.ts @@ -1,3 +1,4 @@ +import { Variante } from 'src/modules/variantes/entities/variante.entity'; import { Categoria } from '../../categorias/entities/categoria.entity'; export class Insumo { @@ -7,6 +8,7 @@ export class Insumo { unidadeMedida?: string; idCategoria?: number; categoria?: Categoria; + variante?: Variante; createdAt: Date; updatedAt: Date; } diff --git a/src/modules/insumos/insumos.service.ts b/src/modules/insumos/insumos.service.ts index b2aeab4..9ac90ac 100644 --- a/src/modules/insumos/insumos.service.ts +++ b/src/modules/insumos/insumos.service.ts @@ -8,30 +8,34 @@ import { Insumo } from './entities/insumo.entity'; export class InsumosService { constructor(private readonly prismaService: PrismaService) {} - async findAllWithPagination(page: number, perPage: number, titulo_like: string) { + async findAllWithPagination( + page: number, + perPage: number, + titulo_like: string, + ) { const skip = (page - 1) * perPage; - let insumos = Insumo[""]; - if(titulo_like){ + let insumos = Insumo['']; + if (titulo_like) { insumos = await this.prismaService.insumo.findMany({ - skip, - take: perPage, - where:{ - OR: [{ titulo: { contains: titulo_like } }, - { unidadeMedida: { contains: titulo_like } }, - { descricao: { contains: titulo_like } }, - { categoria: {titulo: { contains: titulo_like }} }, - ], - }, - }); - }else{ - insumos = await this.prismaService.insumo.findMany({ - skip, - take: perPage, - }); - } - + skip, + take: perPage, + where: { + OR: [ + { titulo: { contains: titulo_like } }, + { unidadeMedida: { contains: titulo_like } }, + { descricao: { contains: titulo_like } }, + { categoria: { titulo: { contains: titulo_like } } }, + ], + }, + }); + } else { + insumos = await this.prismaService.insumo.findMany({ + skip, + take: perPage, + }); + } - return insumos ; + return insumos; } async findOneByTitle(titulo: string) { @@ -101,18 +105,21 @@ export class InsumosService { const insumoExists = await this.findOne(id); if (insumoExists) { const insumoProds = await this.prismaService.listaInsumo.findFirst({ - where: { idInsumo: id }, - }); - const insumoProdsBase = await this.prismaService.insumoProdutoBase.findFirst({ - where: { idInsumo: id }, + where: { idVariante: id }, }); + const insumoProdsBase = + await this.prismaService.insumoProdutoBase.findFirst({ + where: { idVariante: id }, + }); const insumoCota = await this.prismaService.cotacao.findFirst({ - where: { idInsumo: id }, + where: { idVariante: id }, }); if (!insumoProds && !insumoProdsBase && !insumoCota) { return await this.prismaService.insumo.delete({ where: { id } }); } - return { data: { message: 'Insumo está sendo utilizado em outro local' } }; + return { + data: { message: 'Insumo está sendo utilizado em outro local' }, + }; } return { data: { message: 'Insumo não existe' } }; } diff --git a/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts b/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts index 12d9e8a..fb55ac0 100644 --- a/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts +++ b/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts @@ -1,5 +1,11 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber, IsNumberString, IsString, ValidateIf } from 'class-validator'; +import { + IsNotEmpty, + IsNumber, + IsNumberString, + IsString, + ValidateIf, +} from 'class-validator'; export class CreateListaInsumoDto { @ApiProperty({ @@ -27,7 +33,7 @@ export class CreateListaInsumoDto { }) @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) @IsNumber({}, { message: 'O insumo inserido não é válido' }) - idInsumo: number; + idVariante: number; @ApiProperty({ description: @@ -39,8 +45,7 @@ export class CreateListaInsumoDto { idCotacao?: number; @ApiProperty({ - description: - 'A unidade serve para descrever as dimensões do insumo', + description: 'A unidade serve para descrever as dimensões do insumo', example: '1M', }) @ValidateIf((object, value) => value !== undefined) @@ -53,6 +58,6 @@ export class CreateListaInsumoDto { example: '100,00', }) @ValidateIf((object, value) => value !== undefined) - @IsNumberString({},{message: 'O valor unitário inserido não é válido'}) + @IsNumberString({}, { message: 'O valor unitário inserido não é válido' }) valorUnitario?: number; } diff --git a/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts b/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts index b4077c6..0feb6e7 100644 --- a/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts +++ b/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts @@ -29,7 +29,7 @@ export class UpdateListaInsumoDto extends PartialType(CreateListaInsumoDto) { }) @IsNotEmpty({ message: 'O insumo não pode estar vazio' }) @IsNumber({}, { message: 'O insumo inserido não é válido' }) - idInsumo: number; + idVariante: number; @ApiProperty({ description: diff --git a/src/modules/lista-insumos/entities/lista-insumo.entity.ts b/src/modules/lista-insumos/entities/lista-insumo.entity.ts index 6b04e72..7168ded 100644 --- a/src/modules/lista-insumos/entities/lista-insumo.entity.ts +++ b/src/modules/lista-insumos/entities/lista-insumo.entity.ts @@ -1,17 +1,18 @@ import { Cotacao } from 'src/modules/cotacoes/entities/cotacao.entity'; import { Insumo } from 'src/modules/insumos/entities/insumo.entity'; import { Produto } from 'src/modules/produtos/entities/produto.entity'; +import { Variante } from 'src/modules/variantes/entities/variante.entity'; export class ListaInsumo { id: number; quantidade: number; idProduto: number; - idInsumo: number; + idVariante: number; idCotacao?: number; unidade?: string; valorUnitario?: number; produto?: Produto; - insumo?: Insumo; + variante?: Variante; cotacao?: Cotacao; createdAt: Date; updatedAt: Date; diff --git a/src/modules/lista-insumos/lista-insumos.service.ts b/src/modules/lista-insumos/lista-insumos.service.ts index 0646aa6..6dbd990 100644 --- a/src/modules/lista-insumos/lista-insumos.service.ts +++ b/src/modules/lista-insumos/lista-insumos.service.ts @@ -12,41 +12,55 @@ export class ListaInsumosService { private readonly cotacaoServices: CotacoesService, ) {} - async findAllWithPagination(id:number,page: number, perPage: number, titulo_like: string) { + async findAllWithPagination( + id: number, + page: number, + perPage: number, + titulo_like: string, + ) { const skip = (page - 1) * perPage; - let listainsumos = ListaInsumo[""]; - - - listainsumos = await this.prismaService.listaInsumo.findMany({ + let listainsumos = ListaInsumo['']; + + listainsumos = await this.prismaService.listaInsumo.findMany({ skip, take: perPage, - where:{ - idProduto:id, - OR: - [{ insumo: {titulo: { contains: titulo_like }} }, - { cotacao: {fornecedor: { nome:{ contains: titulo_like }}} }, - { cotacao: {fornecedor: { nomeFantasia:{ contains: titulo_like }}} }, - { cotacao: {fornecedor: { razaoSocial:{ contains: titulo_like }}} }, + where: { + idProduto: id, + OR: [ + { variante: { insumo: { titulo: { contains: titulo_like } } } }, + { cotacao: { fornecedor: { nome: { contains: titulo_like } } } }, + { + cotacao: { + fornecedor: { nomeFantasia: { contains: titulo_like } }, + }, + }, + { + cotacao: { fornecedor: { razaoSocial: { contains: titulo_like } } }, + }, { unidade: { contains: titulo_like } }, - { insumo: {categoria: { titulo: { contains: titulo_like }}} }, + { + variante: { + insumo: { categoria: { titulo: { contains: titulo_like } } }, + }, + }, ], }, }); - return listainsumos ; + return listainsumos; } - async countAll(id:number) { + async countAll(id: number) { return await this.prismaService.listaInsumo.count({ - where:{ - idProduto:id, - } + where: { + idProduto: id, + }, }); } async create(createListaInsumoDto: CreateListaInsumoDto) { const insumoExists = await this.prismaService.insumo.findFirst({ - where: { id: createListaInsumoDto.idInsumo }, + where: { id: createListaInsumoDto.idVariante }, }); if (insumoExists) { const produtoExists = await this.prismaService.produto.findFirst({ @@ -75,14 +89,14 @@ export class ListaInsumosService { } async findOne(id: number) { - console.log(id) + console.log(id); console.log(this.prismaService.listaInsumo.findFirst({ where: { id } })); return await this.prismaService.listaInsumo.findFirst({ where: { id } }); } async update(id: number, updateListaInsumoDto: UpdateListaInsumoDto) { const insumoExists = await this.prismaService.insumo.findFirst({ - where: { id: updateListaInsumoDto.idInsumo }, + where: { id: updateListaInsumoDto.idVariante }, }); if (insumoExists) { const produtoExists = await this.prismaService.produto.findFirst({ @@ -126,7 +140,7 @@ export class ListaInsumosService { return { data: { message: 'Essa cotação não existe' } }; } - const listaInsumoExists = await this.findOne(idItemListaInsumo) + const listaInsumoExists = await this.findOne(idItemListaInsumo); if (!listaInsumoExists) { return { data: { message: 'Esse insumo não existe' } }; } diff --git a/src/modules/produtos/produtos.service.ts b/src/modules/produtos/produtos.service.ts index 5b14e15..e3ff572 100644 --- a/src/modules/produtos/produtos.service.ts +++ b/src/modules/produtos/produtos.service.ts @@ -145,7 +145,7 @@ export class ProdutosService { await this.prismaService.listaInsumo.create({ data: { quantidade: insumoBase.quantidade, - idInsumo: insumoBase.idInsumo, + idVariante: insumoBase.idVariante, idProduto: copyProd.id, unidade: insumoBase.unidade, }, From aa10fbdb251409633d55b485a1f4c9410fd06136 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Thu, 9 Nov 2023 23:06:26 -0300 Subject: [PATCH 070/115] =?UTF-8?q?alte=C3=A7=C3=A3o=20schema=20variante?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 2 ++ src/modules/variantes/entities/variante.entity.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index ff3d881..2b59429 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -188,6 +188,8 @@ model Variante { listaInsumo ListaInsumo[] insumoProdutoBase InsumoProdutoBase[] Cotacao Cotacao[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt @@map("Variantes") } diff --git a/src/modules/variantes/entities/variante.entity.ts b/src/modules/variantes/entities/variante.entity.ts index 613f3cf..23d0450 100644 --- a/src/modules/variantes/entities/variante.entity.ts +++ b/src/modules/variantes/entities/variante.entity.ts @@ -5,4 +5,6 @@ export class Variante { variante: string; idInsumo: number; insumo?: Insumo; + createdAt: Date; + updatedAt: Date; } From a56fdf8f4529242c9b4a1db9132d307e607c1f63 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Thu, 9 Nov 2023 23:26:53 -0300 Subject: [PATCH 071/115] Variantes Rota Co-Authored-By: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> --- src/modules/variantes/variantes.controller.ts | 2 ++ src/modules/variantes/variantes.service.ts | 20 ++++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/modules/variantes/variantes.controller.ts b/src/modules/variantes/variantes.controller.ts index b9f30dc..7ef96db 100644 --- a/src/modules/variantes/variantes.controller.ts +++ b/src/modules/variantes/variantes.controller.ts @@ -32,6 +32,7 @@ export class VariantesController { @Header('Access-Control-Allow-Origin', '*') @Header('Access-Control-Expose-Headers', 'X-Total-Count') async findAll( + @Param('idInsumo') idInsumo: number, @Query('page') page: number, @Query('perPage') perPage: number, @Query('titulo_like') titulo_like: string, @@ -40,6 +41,7 @@ export class VariantesController { page = page || 1; perPage = perPage || (await this.countAll()); const variantes = await this.variantesService.findAll( + +idInsumo, page, Number(perPage), titulo_like, diff --git a/src/modules/variantes/variantes.service.ts b/src/modules/variantes/variantes.service.ts index 31a197f..1e633e2 100644 --- a/src/modules/variantes/variantes.service.ts +++ b/src/modules/variantes/variantes.service.ts @@ -12,7 +12,12 @@ export class VariantesService { return this.prismaService.variante.create({ data: createVarianteDto }); } - async findAll(page: number, perPage: number, titulo_like?: string) { + async findAll( + idInsumo: number, + page: number, + perPage: number, + titulo_like?: string, + ) { const skip = (page - 1) * perPage; let variantes = Variante['']; if (titulo_like) { @@ -20,13 +25,14 @@ export class VariantesService { skip, take: perPage, where: { - OR: [ - /* + idInsumo, + //OR: [ + /* { nome: { contains: titulo_like } }, { email: { contains: titulo_like } }, { cpf: { contains: titulo_like } }, */ - ], + //], }, include: { insumo: true }, }); @@ -34,13 +40,17 @@ export class VariantesService { variantes = await this.prismaService.variante.findMany({ skip, take: perPage, + include: { insumo: true }, }); } return variantes; } async findOne(id: number) { - return await this.prismaService.variante.findFirst({ where: { id } }); + return await this.prismaService.variante.findFirst({ + where: { id }, + include: { insumo: true }, + }); } async update(id: number, updateVarianteDto: UpdateVarianteDto) { From aa92aaaaebe7bd3bd017bd9217be9c3c61f9868d Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Fri, 10 Nov 2023 00:14:48 -0300 Subject: [PATCH 072/115] =?UTF-8?q?corre=C3=A7=C3=B5es=20variantes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> --- .../insumos-produtos-base.service.ts | 2 +- src/modules/variantes/variantes.controller.ts | 22 +++++++++++++++++-- src/modules/variantes/variantes.service.ts | 11 ++++++++-- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts index 2dc2a28..7a79fa9 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts @@ -32,7 +32,7 @@ export class InsumosProdutosBaseService { } async create(createInsumosProdutosBaseDto: CreateInsumosProdutosBaseDto) { - const insumoExists = await this.prismaService.insumo.findFirst({ + const insumoExists = await this.prismaService.variante.findFirst({ where: { id: createInsumosProdutosBaseDto.idVariante }, }); if (insumoExists) { diff --git a/src/modules/variantes/variantes.controller.ts b/src/modules/variantes/variantes.controller.ts index 7ef96db..6a84509 100644 --- a/src/modules/variantes/variantes.controller.ts +++ b/src/modules/variantes/variantes.controller.ts @@ -32,7 +32,6 @@ export class VariantesController { @Header('Access-Control-Allow-Origin', '*') @Header('Access-Control-Expose-Headers', 'X-Total-Count') async findAll( - @Param('idInsumo') idInsumo: number, @Query('page') page: number, @Query('perPage') perPage: number, @Query('titulo_like') titulo_like: string, @@ -40,7 +39,26 @@ export class VariantesController { ) { page = page || 1; perPage = perPage || (await this.countAll()); - const variantes = await this.variantesService.findAll( + const variantes = await this.variantesService.findAll(); + const total = await this.variantesService.countAll(); + res.header('x-total-count', total); + return await variantes; + } + + @Get('insumo/:idInsumo') + @Header('Access-Control-Allow-Origin', '*') + @Header('Access-Control-Expose-Headers', 'X-Total-Count') + async findAllWithId( + @Param('idInsumo') idInsumo: string, + @Query('page') page: number, + @Query('perPage') perPage: number, + @Query('titulo_like') titulo_like: string, + @Res({ passthrough: true }) res, + ) { + console.log(idInsumo) + page = page || 1; + perPage = perPage || (await this.countAll()); + const variantes = await this.variantesService.findAllWithId( +idInsumo, page, Number(perPage), diff --git a/src/modules/variantes/variantes.service.ts b/src/modules/variantes/variantes.service.ts index 1e633e2..3a35cc6 100644 --- a/src/modules/variantes/variantes.service.ts +++ b/src/modules/variantes/variantes.service.ts @@ -12,7 +12,7 @@ export class VariantesService { return this.prismaService.variante.create({ data: createVarianteDto }); } - async findAll( + async findAllWithId( idInsumo: number, page: number, perPage: number, @@ -25,7 +25,7 @@ export class VariantesService { skip, take: perPage, where: { - idInsumo, + idInsumo:idInsumo //OR: [ /* { nome: { contains: titulo_like } }, @@ -40,12 +40,19 @@ export class VariantesService { variantes = await this.prismaService.variante.findMany({ skip, take: perPage, + where:{idInsumo: idInsumo}, include: { insumo: true }, }); } return variantes; } + async findAll() { + return await this.prismaService.variante.findMany({ + include:{insumo:true} + }); + } + async findOne(id: number) { return await this.prismaService.variante.findFirst({ where: { id }, From f1539520bb1b83c96bdd16136f9744de4a036a65 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Fri, 10 Nov 2023 00:23:00 -0300 Subject: [PATCH 073/115] Count Service Variante Co-Authored-By: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> --- src/modules/cotacoes/cotacoes.service.ts | 2 +- src/modules/variantes/variantes.controller.ts | 2 +- src/modules/variantes/variantes.service.ts | 9 ++++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index dee83f6..5d3dd1f 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -110,7 +110,7 @@ export class CotacoesService { where: { id: createCotacaoDto.idFornecedor }, }); if (fornecedorExists) { - const insumoExists = await this.prismaService.insumo.findFirst({ + const insumoExists = await this.prismaService.variante.findFirst({ where: { id: createCotacaoDto.idVariante }, }); if (insumoExists) { diff --git a/src/modules/variantes/variantes.controller.ts b/src/modules/variantes/variantes.controller.ts index 6a84509..3140955 100644 --- a/src/modules/variantes/variantes.controller.ts +++ b/src/modules/variantes/variantes.controller.ts @@ -64,7 +64,7 @@ export class VariantesController { Number(perPage), titulo_like, ); - const total = await this.variantesService.countAll(); + const total = await this.variantesService.countAllById(+idInsumo); res.header('x-total-count', total); return await variantes; } diff --git a/src/modules/variantes/variantes.service.ts b/src/modules/variantes/variantes.service.ts index 3a35cc6..53101e3 100644 --- a/src/modules/variantes/variantes.service.ts +++ b/src/modules/variantes/variantes.service.ts @@ -25,7 +25,7 @@ export class VariantesService { skip, take: perPage, where: { - idInsumo:idInsumo + idInsumo: idInsumo, //OR: [ /* { nome: { contains: titulo_like } }, @@ -40,7 +40,7 @@ export class VariantesService { variantes = await this.prismaService.variante.findMany({ skip, take: perPage, - where:{idInsumo: idInsumo}, + where: { idInsumo: idInsumo }, include: { insumo: true }, }); } @@ -49,7 +49,7 @@ export class VariantesService { async findAll() { return await this.prismaService.variante.findMany({ - include:{insumo:true} + include: { insumo: true }, }); } @@ -74,4 +74,7 @@ export class VariantesService { async countAll() { return await this.prismaService.variante.count(); } + async countAllById(idInsumo: number) { + return await this.prismaService.variante.count({ where: { idInsumo:idInsumo } }); + } } From 099eba2952361ea9ed9691a95fa3a3780043e93a Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Fri, 10 Nov 2023 00:53:00 -0300 Subject: [PATCH 074/115] =?UTF-8?q?Corre=C3=A7=C3=B5es=20para=20variante?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> --- src/modules/cotacoes/cotacoes.service.ts | 2 +- .../insumos-produtos-base/insumos-produtos-base.service.ts | 2 +- src/modules/lista-insumos/lista-insumos.service.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index 5d3dd1f..b1abfd4 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -156,7 +156,7 @@ export class CotacoesService { where: { id: updateCotacaoDto.idFornecedor }, }); if (fornecedorExists) { - const insumoExists = await this.prismaService.insumo.findFirst({ + const insumoExists = await this.prismaService.variante.findFirst({ where: { id: updateCotacaoDto.idVariante }, }); if (insumoExists) { diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts index 7a79fa9..1f1709a 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts @@ -79,7 +79,7 @@ export class InsumosProdutosBaseService { id: number, updateInsumosProdutosBaseDto: UpdateInsumosProdutosBaseDto, ) { - const insumoExists = await this.prismaService.insumo.findFirst({ + const insumoExists = await this.prismaService.variante.findFirst({ where: { id: updateInsumosProdutosBaseDto.idVariante }, }); if (insumoExists) { diff --git a/src/modules/lista-insumos/lista-insumos.service.ts b/src/modules/lista-insumos/lista-insumos.service.ts index 6dbd990..e772bdd 100644 --- a/src/modules/lista-insumos/lista-insumos.service.ts +++ b/src/modules/lista-insumos/lista-insumos.service.ts @@ -59,7 +59,7 @@ export class ListaInsumosService { } async create(createListaInsumoDto: CreateListaInsumoDto) { - const insumoExists = await this.prismaService.insumo.findFirst({ + const insumoExists = await this.prismaService.variante.findFirst({ where: { id: createListaInsumoDto.idVariante }, }); if (insumoExists) { @@ -95,7 +95,7 @@ export class ListaInsumosService { } async update(id: number, updateListaInsumoDto: UpdateListaInsumoDto) { - const insumoExists = await this.prismaService.insumo.findFirst({ + const insumoExists = await this.prismaService.variante.findFirst({ where: { id: updateListaInsumoDto.idVariante }, }); if (insumoExists) { From 5fdf3341a361b3e651ec38da98fba85e6913b954 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Fri, 10 Nov 2023 23:31:38 -0300 Subject: [PATCH 075/115] =?UTF-8?q?Corre=C3=A7=C3=A3o=20retirado=20Unidade?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 8 ++++---- prisma/seed.ts | 11 +++-------- src/modules/cotacoes/cotacoes.service.ts | 2 +- src/modules/cotacoes/dto/create-cotacao.dto.ts | 9 +-------- src/modules/cotacoes/dto/update-cotacao.dto.ts | 8 +------- src/modules/cotacoes/entities/cotacao.entity.ts | 2 +- .../dto/create-insumo-produtos-base.dto.ts | 8 +------- .../dto/update-insumo-produtos-base.dto.ts | 9 +-------- .../entities/insumo-produtos-base.entity.ts | 2 +- .../insumos-produtos-base.service.ts | 3 ++- src/modules/insumos/insumos.service.ts | 3 +-- .../lista-insumos/dto/create-lista-insumo.dto.ts | 8 +------- .../lista-insumos/dto/update-lista-insumo.dto.ts | 9 +-------- .../lista-insumos/entities/lista-insumo.entity.ts | 2 +- src/modules/lista-insumos/lista-insumos.service.ts | 2 +- src/modules/produtos/produtos.service.ts | 2 +- 16 files changed, 22 insertions(+), 66 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 2b59429..c5aed26 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -23,7 +23,7 @@ model Insumo { id Int @id @default(autoincrement()) titulo String descricao String? - unidadeMedida String? + idCategoria Int? categoria Categoria? @relation(fields: [idCategoria], references: [id]) createdAt DateTime @default(now()) @@ -136,7 +136,7 @@ model Cotacao { id Int @id @default(autoincrement()) data DateTime valor Float - unidade String + idFornecedor Int idVariante Int obsoleta Boolean? @default(false) @@ -155,7 +155,7 @@ model ListaInsumo { idProduto Int idVariante Int idCotacao Int? - unidade String? + valorUnitario Float? produto Produto? @relation(fields: [idProduto], references: [id]) variante Variante? @relation(fields: [idVariante], references: [id]) @@ -210,7 +210,7 @@ model InsumoProdutoBase { quantidade Float @default(1) idProdutoBase Int idVariante Int - unidade String? + produtoBase ProdutoBase @relation(fields: [idProdutoBase], references: [id]) variantes Variante @relation(fields: [idVariante], references: [id]) createdAt DateTime @default(now()) diff --git a/prisma/seed.ts b/prisma/seed.ts index 4646c2b..f8e3662 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -40,11 +40,6 @@ async function seedDatabase() { data: { titulo: faker.commerce.productName(), descricao: faker.lorem.sentence(), - unidadeMedida: faker.helpers.arrayElement([ - 'Unidade', - 'Quilograma', - 'Metro', - ]), idCategoria: faker.number.int({ min: 1, max: 10 }), }, }); @@ -155,7 +150,7 @@ async function seedDatabase() { data: { data: faker.date.past(), valor: faker.number.float(), - unidade: faker.helpers.arrayElement(['Kg', 'Unidade', 'M', 'L']), + idFornecedor: faker.number.int({ min: 1, max: 10 }), // Gere um ID de fornecedor aleatório idVariante: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório }, @@ -169,7 +164,7 @@ async function seedDatabase() { idProduto: faker.number.int({ min: 1, max: 20 }), // Gere um ID de produto aleatório idVariante: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório idCotacao: faker.number.int({ min: 1, max: 10 }), // Gere um ID de cotação aleatório - unidade: faker.helpers.arrayElement(['Kg', 'Unidade', 'M', 'L']), + valorUnitario: faker.number.float(), }, }); @@ -190,7 +185,7 @@ async function seedDatabase() { quantidade: faker.number.float(), idProdutoBase: faker.number.int({ min: 1, max: 10 }), // Gere um ID de produto base aleatório idVariante: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório - unidade: faker.helpers.arrayElement(['Kg', 'Unidade', 'M', 'L']), + }, }); } diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index b1abfd4..4b21aaf 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -23,7 +23,7 @@ export class CotacoesService { data: { idVariante: oldQuotation.idVariante, idFornecedor: oldQuotation.idFornecedor, - unidade: oldQuotation.unidade, + valor: recotarDto.valor, data: recotarDto.data, }, diff --git a/src/modules/cotacoes/dto/create-cotacao.dto.ts b/src/modules/cotacoes/dto/create-cotacao.dto.ts index 0ea1f07..506833a 100644 --- a/src/modules/cotacoes/dto/create-cotacao.dto.ts +++ b/src/modules/cotacoes/dto/create-cotacao.dto.ts @@ -38,12 +38,5 @@ export class CreateCotacaoDto { @IsNumber({}, { message: 'O insumo inserido não é válido' }) idVariante: number; - @ApiProperty({ - description: - 'A unidade serve para descrever as dimensões do insumo', - example: '1M', - }) - @IsNotEmpty({ message: 'A unidade não pode estar vazia' }) - @IsString({ message: 'A unidade inserida não é válida' }) - unidade: string; + } diff --git a/src/modules/cotacoes/dto/update-cotacao.dto.ts b/src/modules/cotacoes/dto/update-cotacao.dto.ts index b071104..3e2ca20 100644 --- a/src/modules/cotacoes/dto/update-cotacao.dto.ts +++ b/src/modules/cotacoes/dto/update-cotacao.dto.ts @@ -56,11 +56,5 @@ export class UpdateCotacaoDto extends PartialType(CreateCotacaoDto) { @IsNumber({}, { message: 'O insumo inserido não é válido' }) idVariante?: number; - @ApiProperty({ - description: 'A unidade serve para descrever as dimensões do insumo', - example: '1M', - }) - @IsNotEmpty({ message: 'A unidade não pode estar vazia' }) - @IsString({ message: 'A unidade inserida não é válida' }) - unidade?: string; + } diff --git a/src/modules/cotacoes/entities/cotacao.entity.ts b/src/modules/cotacoes/entities/cotacao.entity.ts index b4df55b..64bd072 100644 --- a/src/modules/cotacoes/entities/cotacao.entity.ts +++ b/src/modules/cotacoes/entities/cotacao.entity.ts @@ -5,7 +5,7 @@ export class Cotacao { valor: number; idFornecedor: number; idVariante: number; - unidade: string; + createdAt: Date; updatedAt: Date; } diff --git a/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts b/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts index 5591843..eb8a60b 100644 --- a/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts +++ b/src/modules/insumos-produtos-base/dto/create-insumo-produtos-base.dto.ts @@ -29,11 +29,5 @@ export class CreateInsumosProdutosBaseDto { @IsNumber({}, { message: 'O insumo inserido não é válido' }) idVariante: number; - @ApiProperty({ - description: 'A unidade serve para descrever as dimensões do insumo', - example: '1M', - }) - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A unidade inserida não é válida' }) - unidade?: string; + } diff --git a/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts b/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts index eddf152..b6edb67 100644 --- a/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts +++ b/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts @@ -33,12 +33,5 @@ export class UpdateInsumosProdutosBaseDto extends PartialType( @IsNumber({},{message: 'O insumo inserido não é válido'}) idVariante?: number; - @ApiProperty({ - description: - 'A unidade serve para descrever as dimensões do insumo', - example: '1M', - }) - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A unidade inserida não é válida' }) - unidade?: string; + } diff --git a/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts b/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts index f69d6cc..c3f1fd4 100644 --- a/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts +++ b/src/modules/insumos-produtos-base/entities/insumo-produtos-base.entity.ts @@ -6,7 +6,7 @@ export class InsumoProdutosBase { quantidade: number; idProdutoBase: number; idVariante: number; - unidade: string; + produtoBase: ProdutoBase; variante: Variante; createdAt: Date; diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts index 1f1709a..f6ea364 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts @@ -24,7 +24,8 @@ export class InsumosProdutosBaseService { idProdutoBase: idProdutobase, OR: [ { variantes: { insumo: { titulo: { contains: busca } } } }, - { unidade: { contains: busca } }, + + ], }, }); diff --git a/src/modules/insumos/insumos.service.ts b/src/modules/insumos/insumos.service.ts index 9ac90ac..c45d6b2 100644 --- a/src/modules/insumos/insumos.service.ts +++ b/src/modules/insumos/insumos.service.ts @@ -21,8 +21,7 @@ export class InsumosService { take: perPage, where: { OR: [ - { titulo: { contains: titulo_like } }, - { unidadeMedida: { contains: titulo_like } }, + { titulo: { contains: titulo_like } }, { descricao: { contains: titulo_like } }, { categoria: { titulo: { contains: titulo_like } } }, ], diff --git a/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts b/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts index fb55ac0..4231d31 100644 --- a/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts +++ b/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts @@ -44,13 +44,7 @@ export class CreateListaInsumoDto { @IsNumber({}, { message: 'A cotação inserida não é válida' }) idCotacao?: number; - @ApiProperty({ - description: 'A unidade serve para descrever as dimensões do insumo', - example: '1M', - }) - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A unidade inserida não é válida' }) - unidade?: string; + @ApiProperty({ description: diff --git a/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts b/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts index 0feb6e7..4465a01 100644 --- a/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts +++ b/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts @@ -40,14 +40,7 @@ export class UpdateListaInsumoDto extends PartialType(CreateListaInsumoDto) { @IsNumber({}, { message: 'A cotação inserida não é válida' }) idCotacao?: number; - @ApiProperty({ - description: - 'A unidade serve para descrever as dimensões do insumo', - example: '1M', - }) - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A unidade inserida não é válida' }) - unidade?: string; + @ApiProperty({ description: diff --git a/src/modules/lista-insumos/entities/lista-insumo.entity.ts b/src/modules/lista-insumos/entities/lista-insumo.entity.ts index 7168ded..85cb068 100644 --- a/src/modules/lista-insumos/entities/lista-insumo.entity.ts +++ b/src/modules/lista-insumos/entities/lista-insumo.entity.ts @@ -9,7 +9,7 @@ export class ListaInsumo { idProduto: number; idVariante: number; idCotacao?: number; - unidade?: string; + valorUnitario?: number; produto?: Produto; variante?: Variante; diff --git a/src/modules/lista-insumos/lista-insumos.service.ts b/src/modules/lista-insumos/lista-insumos.service.ts index e772bdd..57bf2da 100644 --- a/src/modules/lista-insumos/lista-insumos.service.ts +++ b/src/modules/lista-insumos/lista-insumos.service.ts @@ -38,7 +38,7 @@ export class ListaInsumosService { { cotacao: { fornecedor: { razaoSocial: { contains: titulo_like } } }, }, - { unidade: { contains: titulo_like } }, + { variante: { insumo: { categoria: { titulo: { contains: titulo_like } } }, diff --git a/src/modules/produtos/produtos.service.ts b/src/modules/produtos/produtos.service.ts index e3ff572..ed547c3 100644 --- a/src/modules/produtos/produtos.service.ts +++ b/src/modules/produtos/produtos.service.ts @@ -147,7 +147,7 @@ export class ProdutosService { quantidade: insumoBase.quantidade, idVariante: insumoBase.idVariante, idProduto: copyProd.id, - unidade: insumoBase.unidade, + }, }); } From 452fb7e5d10d81356bdb0b3f2b348c5726000a38 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Sat, 11 Nov 2023 10:45:38 -0300 Subject: [PATCH 076/115] =?UTF-8?q?corrigido=20count=20do=20or=C3=A7amento?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/orcamentos/orcamentos.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index bda487c..afa3160 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -12,7 +12,7 @@ export class OrcamentosService { private readonly produtoService: ProdutosService, ) {} async countAll() { - return await this.prismaService.cliente.count({}); + return await this.prismaService.orcamento.count({}); } async findCliente(id: number) { From 7e79258ee2cd0308ab52ab091e15d78ebab668f4 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Sat, 11 Nov 2023 21:10:29 -0300 Subject: [PATCH 077/115] =?UTF-8?q?corre=C3=A7=C3=A3o=20module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/cotacoes/cotacoes.controller.spec.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/modules/cotacoes/cotacoes.controller.spec.ts b/src/modules/cotacoes/cotacoes.controller.spec.ts index ab99d07..d11de12 100644 --- a/src/modules/cotacoes/cotacoes.controller.spec.ts +++ b/src/modules/cotacoes/cotacoes.controller.spec.ts @@ -1,17 +1,17 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { CotacaosController } from './cotacaos.controller'; -import { CotacaosService } from './cotacaos.service'; +import { CotacoesController } from './cotacoes.controller'; +import { CotacoesService } from './cotacoes.service'; describe('CotacaosController', () => { - let controller: CotacaosController; + let controller: CotacoesController; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ - controllers: [CotacaosController], - providers: [CotacaosService], + controllers: [CotacoesController], + providers: [CotacoesService], }).compile(); - controller = module.get(CotacaosController); + controller = module.get(CotacoesController); }); it('should be defined', () => { From c8e454cf69498342673e4d78b0792020592c57bc Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Sun, 12 Nov 2023 12:44:41 -0300 Subject: [PATCH 078/115] =?UTF-8?q?corre=C3=A7=C3=B5es=20pedido?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../orcamentos/orcamentos.controller.ts | 6 +++++- src/modules/orcamentos/orcamentos.service.ts | 21 +++++++++++++++---- src/modules/pedidos/pedidos.service.ts | 1 + 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/modules/orcamentos/orcamentos.controller.ts b/src/modules/orcamentos/orcamentos.controller.ts index 1ff0781..473117a 100644 --- a/src/modules/orcamentos/orcamentos.controller.ts +++ b/src/modules/orcamentos/orcamentos.controller.ts @@ -43,7 +43,7 @@ export class OrcamentosController { Number(perPage), titulo_like, ); - const total = await this.orcamentosService.countAll(); + const total = orcamentos.length; res.header('x-total-count', total); return await orcamentos; } @@ -57,6 +57,10 @@ export class OrcamentosController { async findOneFull(@Param('id') id: string) { return await this.orcamentosService.findOneFull(+id); } + @Get('concluded') + async findAllconcluded() { + return await this.orcamentosService.findAllconcluded(); + } @Get(':id') async findOne(@Param('id') id: string) { diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index afa3160..626c1d6 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -41,6 +41,7 @@ export class OrcamentosService { { cliente: { nomeFantasia: { contains: titulo_like } } }, { cliente: { razaoSocial: { contains: titulo_like } } }, ], + pedido: null, }, }); } else { @@ -53,6 +54,7 @@ export class OrcamentosService { { cliente: { nomeFantasia: { contains: titulo_like } } }, { cliente: { razaoSocial: { contains: titulo_like } } }, ], + pedido: null, }, }); } @@ -60,6 +62,9 @@ export class OrcamentosService { orcamentos = await this.prismaService.orcamento.findMany({ skip, take: perPage, + where:{ + pedido: null, + } }); } return orcamentos; @@ -75,12 +80,20 @@ export class OrcamentosService { return { data: { message: 'Cliente não existe' } }; } - async findAll() { - const orcamentos = await this.prismaService.orcamento.findMany(); - if (orcamentos) { + async findAllconcluded() { + const orcamentos = await this.prismaService.orcamento.findMany({ + where: { + status: "Concluido", + pedido: null, + }, + include:{cliente:true} + }); + + if (orcamentos.length > 0) { return orcamentos; } - return { data: { message: 'Não há orçamentos' } }; + + return { data: { message: 'Não há orçamentos concluídos sem pedidos' } }; } async findOneFull(id: number) { diff --git a/src/modules/pedidos/pedidos.service.ts b/src/modules/pedidos/pedidos.service.ts index 2e9ba06..63c4709 100644 --- a/src/modules/pedidos/pedidos.service.ts +++ b/src/modules/pedidos/pedidos.service.ts @@ -16,6 +16,7 @@ export class PedidosService { const skip = (page - 1) * perPage; let pedidos = Pedido[""]; if(titulo_like){ + pedidos = await this.prismaService.pedido.findMany({ skip, take: perPage, From 49e672404f179c27ca297135999c9754a147ea4c Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Sun, 12 Nov 2023 15:57:45 -0300 Subject: [PATCH 079/115] update: status iniciado removido --- prisma/schema.prisma | 1 - 1 file changed, 1 deletion(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index c5aed26..6e91459 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -231,7 +231,6 @@ enum produtoTipo { enum status { Pendente - Iniciado Em_Processo @map("Em Processo") Concluido } From 16e263bbdbbd8d6a36952c8f92d8b743680c77a1 Mon Sep 17 00:00:00 2001 From: antonioN313 <47403160+antonioN313@users.noreply.github.com> Date: Sun, 12 Nov 2023 16:33:49 -0300 Subject: [PATCH 080/115] update: async await variantes controller service --- src/modules/variantes/variantes.controller.ts | 16 ++++++++-------- src/modules/variantes/variantes.service.ts | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/modules/variantes/variantes.controller.ts b/src/modules/variantes/variantes.controller.ts index 3140955..480bd98 100644 --- a/src/modules/variantes/variantes.controller.ts +++ b/src/modules/variantes/variantes.controller.ts @@ -24,8 +24,8 @@ export class VariantesController { } @Post() - create(@Body() createVarianteDto: CreateVarianteDto) { - return this.variantesService.create(createVarianteDto); + async create(@Body() createVarianteDto: CreateVarianteDto) { + return await this.variantesService.create(createVarianteDto); } @Get() @@ -70,20 +70,20 @@ export class VariantesController { } @Get(':id') - findOne(@Param('id') id: string) { - return this.variantesService.findOne(+id); + async findOne(@Param('id') id: string) { + return await this.variantesService.findOne(+id); } @Patch(':id') - update( + async update( @Param('id') id: string, @Body() updateVarianteDto: UpdateVarianteDto, ) { - return this.variantesService.update(+id, updateVarianteDto); + return await this.variantesService.update(+id, updateVarianteDto); } @Delete(':id') - remove(@Param('id') id: string) { - return this.variantesService.remove(+id); + async remove(@Param('id') id: string) { + return await this.variantesService.remove(+id); } } diff --git a/src/modules/variantes/variantes.service.ts b/src/modules/variantes/variantes.service.ts index 53101e3..1166de6 100644 --- a/src/modules/variantes/variantes.service.ts +++ b/src/modules/variantes/variantes.service.ts @@ -8,8 +8,8 @@ import { Variante } from './entities/variante.entity'; export class VariantesService { constructor(private readonly prismaService: PrismaService) {} - create(createVarianteDto: CreateVarianteDto) { - return this.prismaService.variante.create({ data: createVarianteDto }); + async create(createVarianteDto: CreateVarianteDto) { + return await this.prismaService.variante.create({ data: createVarianteDto }); } async findAllWithId( From 9be11406981a329ca943ef09bd55c55cab053fdb Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Sun, 12 Nov 2023 17:08:49 -0300 Subject: [PATCH 081/115] =?UTF-8?q?corre=C3=A7=C3=B5es=20e=20remo=C3=A7?= =?UTF-8?q?=C3=B5es=20de=20console.log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/cotacoes/cotacoes.controller.ts | 1 + src/modules/cotacoes/cotacoes.service.ts | 6 +++--- src/modules/variantes/variantes.controller.ts | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/modules/cotacoes/cotacoes.controller.ts b/src/modules/cotacoes/cotacoes.controller.ts index 2b5620f..ceed9bb 100644 --- a/src/modules/cotacoes/cotacoes.controller.ts +++ b/src/modules/cotacoes/cotacoes.controller.ts @@ -54,6 +54,7 @@ export class CotacoesController { async findAll(@Query('fornecedor') idFornecedor: number,@Query('insumo') idInsumo: number, @Query('page') page: number,@Query('perPage') perPage: number,@Query('nome_like') nome_like : string, @Res({ passthrough: true }) res) { page = page||1; perPage = perPage||await this.countAll(); + const cotacoes = await this.cotacoesService.findAllWithPagination( +idInsumo, page, diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index 4b21aaf..e93011e 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -23,7 +23,6 @@ export class CotacoesService { data: { idVariante: oldQuotation.idVariante, idFornecedor: oldQuotation.idFornecedor, - valor: recotarDto.valor, data: recotarDto.data, }, @@ -44,7 +43,7 @@ export class CotacoesService { ) { const skip = (page - 1) * perPage; let cotacoes = Cotacao['']; - + if (id && idfornecedor) { cotacoes = await this.prismaService.cotacao.findMany({ skip, @@ -52,6 +51,7 @@ export class CotacoesService { where: { idVariante: id, idFornecedor: idfornecedor, + obsoleta:false, OR: [ { variante: { insumo: { titulo: { contains: nome_like } } } }, { fornecedor: { nome: { contains: nome_like } } }, @@ -66,7 +66,7 @@ export class CotacoesService { take: perPage, where: { idVariante: id, - + obsoleta:false, OR: [ { variante: { insumo: { titulo: { contains: nome_like } } } }, { fornecedor: { nome: { contains: nome_like } } }, diff --git a/src/modules/variantes/variantes.controller.ts b/src/modules/variantes/variantes.controller.ts index 3140955..0b1ae14 100644 --- a/src/modules/variantes/variantes.controller.ts +++ b/src/modules/variantes/variantes.controller.ts @@ -55,7 +55,7 @@ export class VariantesController { @Query('titulo_like') titulo_like: string, @Res({ passthrough: true }) res, ) { - console.log(idInsumo) + page = page || 1; perPage = perPage || (await this.countAll()); const variantes = await this.variantesService.findAllWithId( @@ -71,6 +71,7 @@ export class VariantesController { @Get(':id') findOne(@Param('id') id: string) { + return this.variantesService.findOne(+id); } From c29872f5a010067d25caf011929d7e75d658c924 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Sun, 12 Nov 2023 17:09:42 -0300 Subject: [PATCH 082/115] Refatorando prisma service e usuarios, global validation --- package-lock.json | 589 +++++++++++++++++- package.json | 9 + src/main.ts | 9 + .../usuarios/dto/create-usuario.dto.ts | 59 +- src/modules/usuarios/usuarios.module.ts | 5 +- src/modules/usuarios/usuarios.service.ts | 106 ++-- src/prisma/prisma.module.ts | 8 + src/prisma/prisma.service.ts | 9 + 8 files changed, 657 insertions(+), 137 deletions(-) create mode 100644 src/prisma/prisma.module.ts create mode 100644 src/prisma/prisma.service.ts diff --git a/package-lock.json b/package-lock.json index 5e96a84..b72c1dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,13 +11,19 @@ "dependencies": { "@nestjs/common": "^10.0.0", "@nestjs/core": "^10.0.0", + "@nestjs/jwt": "^10.2.0", "@nestjs/mapped-types": "*", + "@nestjs/passport": "^10.0.2", "@nestjs/platform-express": "^10.0.0", "@nestjs/swagger": "^7.1.14", "@prisma/client": "^5.5.2", + "bcrypt": "^5.1.1", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "express": "^4.18.2", + "passport": "^0.6.0", + "passport-jwt": "^4.0.1", + "passport-local": "^1.0.0", "reflect-metadata": "^0.1.13", "rxjs": "^7.8.1", "swagger-ui-express": "^5.0.0" @@ -27,9 +33,12 @@ "@nestjs/cli": "^10.0.0", "@nestjs/schematics": "^10.0.0", "@nestjs/testing": "^10.0.0", + "@types/bcrypt": "^5.0.2", "@types/express": "^4.17.17", "@types/jest": "^29.5.2", "@types/node": "^20.3.1", + "@types/passport-jwt": "^3.0.13", + "@types/passport-local": "^1.0.38", "@types/supertest": "^2.0.12", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", @@ -1443,6 +1452,61 @@ "node": ">=8" } }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@nestjs/cli": { "version": "10.1.18", "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.1.18.tgz", @@ -1625,6 +1689,18 @@ } } }, + "node_modules/@nestjs/jwt": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.2.0.tgz", + "integrity": "sha512-x8cG90SURkEiLOehNaN2aRlotxT0KZESUliOPKKnjWiyJOcWurkF3w345WOX0P4MgFzUjGoZ1Sy0aZnxeihT0g==", + "dependencies": { + "@types/jsonwebtoken": "9.0.5", + "jsonwebtoken": "9.0.2" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0" + } + }, "node_modules/@nestjs/mapped-types": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.2.tgz", @@ -1644,6 +1720,15 @@ } } }, + "node_modules/@nestjs/passport": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@nestjs/passport/-/passport-10.0.2.tgz", + "integrity": "sha512-od31vfB2z3y05IDB5dWSbCGE2+pAf2k2WCBinNuTTOxN0O0+wtO1L3kawj/aCW3YR9uxsTOVbTDwtwgpNNsnjQ==", + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "passport": "^0.4.0 || ^0.5.0 || ^0.6.0" + } + }, "node_modules/@nestjs/platform-express": { "version": "10.2.7", "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.2.7.tgz", @@ -1987,6 +2072,15 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/bcrypt": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.2.tgz", + "integrity": "sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/body-parser": { "version": "1.19.4", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.4.tgz", @@ -2117,6 +2211,14 @@ "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", "dev": true }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz", + "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz", @@ -2127,7 +2229,6 @@ "version": "20.8.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.6.tgz", "integrity": "sha512-eWO4K2Ji70QzKUqRy6oyJWUeB7+g2cRagT3T/nxYibYcT4y2BDL8lqolRXjTHmkZCdJfIPaY73KbJAZmcryxTQ==", - "dev": true, "dependencies": { "undici-types": "~5.25.1" } @@ -2138,6 +2239,47 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "node_modules/@types/passport": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.15.tgz", + "integrity": "sha512-oHOgzPBp5eLI1U/7421qYV/ZySQXMYCBSfRkDe1tQ0YrIbLY/M/76qIXE7Bs7lFyvw1x5QqiNQ9imvh0fQHe9Q==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/passport-jwt": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@types/passport-jwt/-/passport-jwt-3.0.13.tgz", + "integrity": "sha512-fjHaC6Bv8EpMMqzTnHP32SXlZGaNfBPC/Po5dmRGYi2Ky7ljXPbGnOy+SxZqa6iZvFgVhoJ1915Re3m93zmcfA==", + "dev": true, + "dependencies": { + "@types/express": "*", + "@types/jsonwebtoken": "*", + "@types/passport-strategy": "*" + } + }, + "node_modules/@types/passport-local": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/passport-local/-/passport-local-1.0.38.tgz", + "integrity": "sha512-nsrW4A963lYE7lNTv9cr5WmiUD1ibYJvWrpE13oxApFsRt77b0RdtZvKbCdNIY4v/QZ6TRQWaDDEwV1kCTmcXg==", + "dev": true, + "dependencies": { + "@types/express": "*", + "@types/passport": "*", + "@types/passport-strategy": "*" + } + }, + "node_modules/@types/passport-strategy": { + "version": "0.2.38", + "resolved": "https://registry.npmjs.org/@types/passport-strategy/-/passport-strategy-0.2.38.tgz", + "integrity": "sha512-GC6eMqqojOooq993Tmnmp7AUTbbQSgilyvpCYQjT+H6JfG/g6RGc7nXEniZlp0zyKJ0WUdOiZWLBZft9Yug1uA==", + "dev": true, + "dependencies": { + "@types/express": "*", + "@types/passport": "*" + } + }, "node_modules/@types/qs": { "version": "6.9.8", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", @@ -2569,6 +2711,11 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -2620,6 +2767,17 @@ "node": ">=0.4.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -2693,7 +2851,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -2730,6 +2887,36 @@ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -2892,8 +3079,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -2915,6 +3101,19 @@ } ] }, + "node_modules/bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/big-integer": { "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", @@ -3010,7 +3209,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3105,6 +3303,11 @@ "ieee754": "^1.1.13" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -3251,6 +3454,14 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -3416,6 +3627,14 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3462,8 +3681,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -3484,6 +3702,11 @@ "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -3606,7 +3829,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -3825,6 +4047,11 @@ "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -3842,6 +4069,14 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -3903,6 +4138,14 @@ "node": ">=6.0.0" } }, + "node_modules/ecdsa-sig-formatter": { + "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" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -3929,8 +4172,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -4686,6 +4928,33 @@ "node": ">=12" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/fs-monkey": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", @@ -4695,8 +4964,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.3", @@ -4720,6 +4988,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4777,7 +5064,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4905,6 +5191,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, "node_modules/hexoid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", @@ -4935,6 +5226,18 @@ "node": ">= 0.8" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -5032,7 +5335,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -5144,7 +5446,6 @@ "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==", - "dev": true, "engines": { "node": ">=8" } @@ -6017,6 +6318,46 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "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": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "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" + } + }, + "node_modules/jws": { + "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" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -6097,6 +6438,36 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -6109,6 +6480,11 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -6292,7 +6668,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6317,6 +6692,34 @@ "node": ">=8" } }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -6331,8 +6734,7 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multer": { "version": "1.4.4-lts.1", @@ -6383,6 +6785,11 @@ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "dev": true }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", @@ -6423,6 +6830,20 @@ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -6444,6 +6865,17 @@ "node": ">=8" } }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6475,7 +6907,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -6655,6 +7086,51 @@ "node": ">= 0.8" } }, + "node_modules/passport": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz", + "integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==", + "dependencies": { + "passport-strategy": "1.x.x", + "pause": "0.0.1", + "utils-merge": "^1.0.1" + }, + "engines": { + "node": ">= 0.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, + "node_modules/passport-jwt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz", + "integrity": "sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==", + "dependencies": { + "jsonwebtoken": "^9.0.0", + "passport-strategy": "^1.0.0" + } + }, + "node_modules/passport-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", + "integrity": "sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==", + "dependencies": { + "passport-strategy": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -6668,7 +7144,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -6736,6 +7211,11 @@ "node": ">=8" } }, + "node_modules/pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -7396,7 +7876,6 @@ "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -7411,7 +7890,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -7422,8 +7900,7 @@ "node_modules/semver/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/send": { "version": "0.18.0", @@ -7489,6 +7966,11 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -7548,8 +8030,7 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/sisteransi": { "version": "1.0.5", @@ -7667,7 +8148,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7681,7 +8161,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7841,6 +8320,46 @@ "node": ">=6" } }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/terser": { "version": "5.22.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.22.0.tgz", @@ -8264,8 +8783,7 @@ "node_modules/undici-types": { "version": "5.25.3", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", - "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", - "dev": true + "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==" }, "node_modules/universalify": { "version": "2.0.0", @@ -8531,6 +9049,14 @@ "node": ">= 8" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/windows-release": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", @@ -8610,8 +9136,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "4.0.2", diff --git a/package.json b/package.json index f3d712c..8d8c5f9 100644 --- a/package.json +++ b/package.json @@ -22,13 +22,19 @@ "dependencies": { "@nestjs/common": "^10.0.0", "@nestjs/core": "^10.0.0", + "@nestjs/jwt": "^10.2.0", "@nestjs/mapped-types": "*", + "@nestjs/passport": "^10.0.2", "@nestjs/platform-express": "^10.0.0", "@nestjs/swagger": "^7.1.14", "@prisma/client": "^5.5.2", + "bcrypt": "^5.1.1", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "express": "^4.18.2", + "passport": "^0.6.0", + "passport-jwt": "^4.0.1", + "passport-local": "^1.0.0", "reflect-metadata": "^0.1.13", "rxjs": "^7.8.1", "swagger-ui-express": "^5.0.0" @@ -38,9 +44,12 @@ "@nestjs/cli": "^10.0.0", "@nestjs/schematics": "^10.0.0", "@nestjs/testing": "^10.0.0", + "@types/bcrypt": "^5.0.2", "@types/express": "^4.17.17", "@types/jest": "^29.5.2", "@types/node": "^20.3.1", + "@types/passport-jwt": "^3.0.13", + "@types/passport-local": "^1.0.38", "@types/supertest": "^2.0.12", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", diff --git a/src/main.ts b/src/main.ts index ce12dc0..71d5d43 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,11 +1,20 @@ import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; +import { ValidationPipe } from '@nestjs/common'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.enableCors(); + app.useGlobalPipes( + new ValidationPipe({ + transform: true, + whitelist: true, + forbidNonWhitelisted: true, + }), + ); + const config = new DocumentBuilder() .setTitle('Documentação com Swagger - Fábrica de Sinapse') .setDescription( diff --git a/src/modules/usuarios/dto/create-usuario.dto.ts b/src/modules/usuarios/dto/create-usuario.dto.ts index 1c5da08..2275dcc 100644 --- a/src/modules/usuarios/dto/create-usuario.dto.ts +++ b/src/modules/usuarios/dto/create-usuario.dto.ts @@ -1,61 +1,42 @@ import { ApiProperty } from '@nestjs/swagger'; import { tipoUsuario } from '@prisma/client'; -import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches, ValidateIf } from 'class-validator'; +import { + IsEmail, + IsEnum, + IsNotEmpty, + IsNumberString, + IsString, + Matches, + MaxLength, + MinLength, + ValidateIf, +} from 'class-validator'; +import { Usuario } from '../entities/usuario.entity'; -export class CreateUsuarioDto { - @ApiProperty({ - description: - 'O tipo de usuario serve para descrever o nivel de acesso dele', - example: 'Vendedor', - }) - @IsNotEmpty({message: 'O tipo do usuário não poder estar vazio'}) - @IsEnum(tipoUsuario, {message: 'O tipo de usuário inserido não é válido'}) +export class CreateUsuarioDto extends Usuario { + @IsNotEmpty({ message: 'O tipo do usuário não poder estar vazio' }) + @IsEnum(tipoUsuario, { message: 'O tipo de usuário inserido não é válido' }) tipoUsuario: tipoUsuario; - @ApiProperty({ - description: - 'O nome do usuário serve para identificar e pesquisar o usuário', - example: 'Sérgio Moraes', - }) - @ValidateIf((object, value) => value !== undefined) @IsString({ message: 'O nome inserido não é válido' }) nome: string; - @ApiProperty({ - description: 'O CPF serve para identificar o usuario', - example: '02370334029', - }) - @ValidateIf((object, value) => value !== undefined) @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf: string; - @ApiProperty({ - description: 'O email serve para descrever o email do usuario', - example: 'email@gmail.com', - }) - @ValidateIf((object, value) => value !== undefined) @IsNotEmpty({ message: 'O e-mail não pode estar vazio' }) @IsEmail({}, { message: 'O e-mail inserido não é válido' }) email: string; - @ApiProperty({ - description: - 'O telefone serve para descrever o numero de telefone do usuario', - example: '1734112736', - }) @IsNotEmpty({ message: 'O telefone não pode estar vazio' }) @IsNumberString({}, { message: 'O telefone inserido não é válido' }) telefone: string; - @ApiProperty({ - description: - 'A senha serve para o usuário realizar o acesso dentro da aplicação', - example: '1234', + @IsString() + @MinLength(4) + @MaxLength(20) + @Matches(/((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/, { + message: 'password too weak', }) - @ValidateIf((object, value) => value !== undefined) - @IsString({message: 'A senha inserida não é válida'}) senha: string; - - - } diff --git a/src/modules/usuarios/usuarios.module.ts b/src/modules/usuarios/usuarios.module.ts index 50b2c1d..954c668 100644 --- a/src/modules/usuarios/usuarios.module.ts +++ b/src/modules/usuarios/usuarios.module.ts @@ -1,10 +1,11 @@ import { Module } from '@nestjs/common'; import { UsuariosService } from './usuarios.service'; import { UsuariosController } from './usuarios.controller'; -import { PrismaService } from 'src/databases/prisma.service'; +import { PrismaModule } from 'src/prisma/prisma.module'; @Module({ + imports: [PrismaModule], controllers: [UsuariosController], - providers: [UsuariosService, PrismaService], + providers: [UsuariosService], }) export class UsuariosModule {} diff --git a/src/modules/usuarios/usuarios.service.ts b/src/modules/usuarios/usuarios.service.ts index fad4c35..cb8fdc6 100644 --- a/src/modules/usuarios/usuarios.service.ts +++ b/src/modules/usuarios/usuarios.service.ts @@ -1,46 +1,58 @@ import { Injectable } from '@nestjs/common'; import { CreateUsuarioDto } from './dto/create-usuario.dto'; import { UpdateUsuarioDto } from './dto/update-usuario.dto'; -import { PrismaService } from '../../databases/prisma.service'; import { Usuario } from './entities/usuario.entity'; +import * as bcrypt from 'bcrypt'; +import { PrismaService } from 'src/prisma/prisma.service'; + @Injectable() export class UsuariosService { constructor(private readonly prismaService: PrismaService) {} - async findAllWithPagination(page: number, perPage: number, titulo_like? : string) { + async findAllWithPagination( + page: number, + perPage: number, + titulo_like?: string, + ) { const skip = (page - 1) * perPage; - let usuarios = Usuario[""]; - if(titulo_like){ + let usuarios = Usuario['']; + if (titulo_like) { usuarios = await this.prismaService.usuario.findMany({ - skip, - take: perPage, - where:{ - OR: [{ nome: { contains: titulo_like } }, - { email: { contains: titulo_like } }, - { cpf: { contains: titulo_like}}], - }, - }); - }else{ - usuarios = await this.prismaService.usuario.findMany({ - skip, - take: perPage, - }); - } - return usuarios ; + skip, + take: perPage, + where: { + OR: [ + { nome: { contains: titulo_like } }, + { email: { contains: titulo_like } }, + { cpf: { contains: titulo_like } }, + ], + }, + }); + } else { + usuarios = await this.prismaService.usuario.findMany({ + skip, + take: perPage, + }); + } + return usuarios; } async create(createUsuarioDto: CreateUsuarioDto) { - if ( - !(await this.findExistingUsuario(undefined, createUsuarioDto.email)) && - !(await this.findExistingUsuario(undefined, createUsuarioDto.cpf)) - ) { - return await this.prismaService.usuario.create({ + const userExists = this.prismaService.usuario.findUnique({ + where: { + cpf: createUsuarioDto.cpf, + }, + }); + if (!userExists) { + createUsuarioDto.senha = await bcrypt.hash(createUsuarioDto.senha, 10); + const user = await this.prismaService.usuario.create({ data: createUsuarioDto, }); + user.senha = undefined; + return user; } - - return { data: { message: 'Usuário com dados repetidos' } }; + return { data: { message: 'Cpf ja cadastrado' } }; } async findByEmail(email: string) { @@ -49,33 +61,6 @@ export class UsuariosService { }); } - async findExistingUsuario(id: number, termo: string) { - if (!termo === undefined) { - var emailExists = await this.prismaService.usuario.findUnique({ - where: { - email: termo, - NOT: { - id: id, - }, - }, - }); - } - if (!termo === undefined) { - var cpfExists = await this.prismaService.usuario.findUnique({ - where: { - cpf: termo, - NOT: { - id: id, - }, - }, - }); - } - if (!emailExists && !cpfExists) { - return await 0; - } - return await 1; - } - async countAll() { return await this.prismaService.usuario.count(); } @@ -91,17 +76,10 @@ export class UsuariosService { async update(id: number, updateUsuarioDto: UpdateUsuarioDto) { const usuarioExists = await this.findOne(id); if (usuarioExists) { - if ( - !(await this.findExistingUsuario(id, updateUsuarioDto.email)) && - !(await this.findExistingUsuario(id, updateUsuarioDto.cpf)) - ) { - return await this.prismaService.usuario.update({ - where: { id }, - data: updateUsuarioDto, - }); - } - - return { data: { message: 'Usuário com dados repetidos' } }; + return await this.prismaService.usuario.update({ + where: { id }, + data: updateUsuarioDto, + }); } return { data: { message: 'Usuário não existe' } }; } diff --git a/src/prisma/prisma.module.ts b/src/prisma/prisma.module.ts new file mode 100644 index 0000000..ec0ce32 --- /dev/null +++ b/src/prisma/prisma.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { PrismaService } from './prisma.service'; + +@Module({ + providers: [PrismaService], + exports: [PrismaService], +}) +export class PrismaModule {} diff --git a/src/prisma/prisma.service.ts b/src/prisma/prisma.service.ts new file mode 100644 index 0000000..ed98c67 --- /dev/null +++ b/src/prisma/prisma.service.ts @@ -0,0 +1,9 @@ +import { INestApplication, Injectable, OnModuleInit } from '@nestjs/common'; +import { PrismaClient } from '@prisma/client'; + +@Injectable() +export class PrismaService extends PrismaClient implements OnModuleInit { + async onModuleInit() { + await this.$connect(); + } +} From 3751e4d61563a9c5825957f3025cfd54eb2c1822 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Sun, 12 Nov 2023 17:10:12 -0300 Subject: [PATCH 083/115] Update app.module.ts --- src/app.module.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/app.module.ts b/src/app.module.ts index d33ab1b..dc62e22 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -14,6 +14,8 @@ import { UsuariosModule } from './modules/usuarios/usuarios.module'; import { ProdutosBaseModule } from './modules/produtos-base/produtos-base.module'; import { InsumosProdutosBaseModule } from './modules/insumos-produtos-base/insumos-produtos-base.module'; import { VariantesModule } from './modules/variantes/variantes.module'; +import { PrismaModule } from './prisma/prisma.module'; +import { AuthModule } from './auth/auth.module'; @Module({ imports: [ @@ -30,6 +32,8 @@ import { VariantesModule } from './modules/variantes/variantes.module'; ProdutosBaseModule, InsumosProdutosBaseModule, VariantesModule, + PrismaModule, + ], controllers: [AppController], providers: [AppService], From 31f7ad0a7101aa2c01f4ce699d964d4c47ca93e5 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Sun, 12 Nov 2023 17:10:38 -0300 Subject: [PATCH 084/115] Auth stategy and guard --- src/auth/auth.controller.ts | 22 ++++++++++++++++++++++ src/auth/auth.module.ts | 10 ++++++++++ src/auth/auth.service.ts | 8 ++++++++ src/auth/guards/local-auth.guard.ts | 21 +++++++++++++++++++++ src/auth/stategies/local.strategy.ts | 15 +++++++++++++++ 5 files changed, 76 insertions(+) create mode 100644 src/auth/auth.controller.ts create mode 100644 src/auth/auth.module.ts create mode 100644 src/auth/auth.service.ts create mode 100644 src/auth/guards/local-auth.guard.ts create mode 100644 src/auth/stategies/local.strategy.ts diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts new file mode 100644 index 0000000..7cb188b --- /dev/null +++ b/src/auth/auth.controller.ts @@ -0,0 +1,22 @@ +import { + Controller, + Post, + HttpCode, + HttpStatus, + UseGuards, +} from '@nestjs/common'; +import { AuthService } from './auth.service'; +import { LocalAuthGuard } from './guards/local-auth.guard'; + +@Controller() +export class AuthController { + constructor(private readonly authService: AuthService) {} + + @UseGuards(LocalAuthGuard) + @Post('login') + @HttpCode(HttpStatus.OK) + async login() { + console.log('Login Controller'); + // return await this.authService.login(); + } +} diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts new file mode 100644 index 0000000..4f684f7 --- /dev/null +++ b/src/auth/auth.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { AuthController } from './auth.controller'; +import { AuthService } from './auth.service'; +import { LocalStrategy } from './stategies/local.strategy'; + +@Module({ + controllers: [AuthController], + providers: [AuthService, LocalStrategy], +}) +export class AuthModule {} diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts new file mode 100644 index 0000000..a1e048e --- /dev/null +++ b/src/auth/auth.service.ts @@ -0,0 +1,8 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class AuthService { + validateUser(email: string, password: string) { + throw new Error('Method not implemented.'); + } +} diff --git a/src/auth/guards/local-auth.guard.ts b/src/auth/guards/local-auth.guard.ts new file mode 100644 index 0000000..b80a300 --- /dev/null +++ b/src/auth/guards/local-auth.guard.ts @@ -0,0 +1,21 @@ +import { + ExecutionContext, + Injectable, + UnauthorizedException, +} from '@nestjs/common'; +import { AuthGuard } from '@nestjs/passport'; + +@Injectable() +export class LocalAuthGuard extends AuthGuard('local') { + canActivate(context: ExecutionContext) { + return super.canActivate(context); + } + + handleRequest(err, user) { + if (err || !user) { + throw new UnauthorizedException(err?.message); + } + + return user; + } +} diff --git a/src/auth/stategies/local.strategy.ts b/src/auth/stategies/local.strategy.ts new file mode 100644 index 0000000..5bb2e5a --- /dev/null +++ b/src/auth/stategies/local.strategy.ts @@ -0,0 +1,15 @@ +import { Injectable } from '@nestjs/common'; +import { PassportStrategy } from '@nestjs/passport'; +import { Strategy } from 'passport-local'; +import { AuthService } from '../auth.service'; + +@Injectable() +export class LocalStrategy extends PassportStrategy(Strategy) { + constructor(private authService: AuthService) { + super({ usernameField: 'email' }); + } + + validate(email: string, password: string) { + return this.authService.validateUser(email, password); + } +} From 91cbfe9c180f9878bf29bd1952c3e132e1f0e0c8 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Sun, 12 Nov 2023 17:10:44 -0300 Subject: [PATCH 085/115] Update app.module.ts --- src/app.module.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.module.ts b/src/app.module.ts index dc62e22..291b713 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -33,7 +33,7 @@ import { AuthModule } from './auth/auth.module'; InsumosProdutosBaseModule, VariantesModule, PrismaModule, - + AuthModule, ], controllers: [AppController], providers: [AppService], From 7e0248a4a159a3c81bb3359a2599a133623f78b8 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Sun, 12 Nov 2023 21:58:22 -0300 Subject: [PATCH 086/115] =?UTF-8?q?Valida=C3=A7=C3=A3o=20do=20login?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/auth/auth.controller.ts | 1 - src/auth/auth.module.ts | 2 ++ src/auth/auth.service.ts | 18 ++++++++++++++++-- src/auth/guards/local-auth.guard.ts | 6 +++--- src/auth/strategies/local.strategy.ts | 16 ++++++++++++++++ src/modules/usuarios/usuarios.module.ts | 1 + src/modules/usuarios/usuarios.service.ts | 7 +------ 7 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 src/auth/strategies/local.strategy.ts diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index 7cb188b..9ac5e5a 100644 --- a/src/auth/auth.controller.ts +++ b/src/auth/auth.controller.ts @@ -16,7 +16,6 @@ export class AuthController { @Post('login') @HttpCode(HttpStatus.OK) async login() { - console.log('Login Controller'); // return await this.authService.login(); } } diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts index 4f684f7..3d1731c 100644 --- a/src/auth/auth.module.ts +++ b/src/auth/auth.module.ts @@ -2,8 +2,10 @@ import { Module } from '@nestjs/common'; import { AuthController } from './auth.controller'; import { AuthService } from './auth.service'; import { LocalStrategy } from './stategies/local.strategy'; +import { UsuariosModule } from 'src/modules/usuarios/usuarios.module'; @Module({ + imports: [UsuariosModule], controllers: [AuthController], providers: [AuthService, LocalStrategy], }) diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index a1e048e..386d868 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -1,8 +1,22 @@ import { Injectable } from '@nestjs/common'; +import { UsuariosService } from 'src/modules/usuarios/usuarios.service'; +import * as bcrypt from 'bcrypt'; @Injectable() export class AuthService { - validateUser(email: string, password: string) { - throw new Error('Method not implemented.'); + constructor(private readonly usuariosService: UsuariosService) {} + + async validateUser(email: string, password: string) { + const usuario = await this.usuariosService.findByEmail(email); + if (usuario) { + const isPasswordValid = await bcrypt.compare(password, usuario.senha); + if (isPasswordValid) { + usuario.senha = undefined; + return usuario; + } + throw new Error('O Email ou senha informado não esta correto'); + } + + throw new Error('O Email ou senha informado não esta correto'); } } diff --git a/src/auth/guards/local-auth.guard.ts b/src/auth/guards/local-auth.guard.ts index b80a300..c389c44 100644 --- a/src/auth/guards/local-auth.guard.ts +++ b/src/auth/guards/local-auth.guard.ts @@ -11,11 +11,11 @@ export class LocalAuthGuard extends AuthGuard('local') { return super.canActivate(context); } - handleRequest(err, user) { - if (err || !user) { + handleRequest(err, usuario) { + if (err || !usuario) { throw new UnauthorizedException(err?.message); } - return user; + return usuario; } } diff --git a/src/auth/strategies/local.strategy.ts b/src/auth/strategies/local.strategy.ts new file mode 100644 index 0000000..f6abfa7 --- /dev/null +++ b/src/auth/strategies/local.strategy.ts @@ -0,0 +1,16 @@ +import { Injectable } from '@nestjs/common'; +import { PassportStrategy } from '@nestjs/passport'; +import { Strategy } from 'passport-local'; +import { AuthService } from '../auth.service'; + +@Injectable() +export class LocalStrategy extends PassportStrategy(Strategy) { + constructor(private authService: AuthService) { + super({ usernameField: 'email' }); + } + + validate(email: string, password: string) { + console.log(email); + return this.authService.validateUser(email, password); + } +} diff --git a/src/modules/usuarios/usuarios.module.ts b/src/modules/usuarios/usuarios.module.ts index 954c668..bb341a9 100644 --- a/src/modules/usuarios/usuarios.module.ts +++ b/src/modules/usuarios/usuarios.module.ts @@ -7,5 +7,6 @@ import { PrismaModule } from 'src/prisma/prisma.module'; imports: [PrismaModule], controllers: [UsuariosController], providers: [UsuariosService], + exports: [UsuariosService], }) export class UsuariosModule {} diff --git a/src/modules/usuarios/usuarios.service.ts b/src/modules/usuarios/usuarios.service.ts index cb8fdc6..5ddaae7 100644 --- a/src/modules/usuarios/usuarios.service.ts +++ b/src/modules/usuarios/usuarios.service.ts @@ -39,12 +39,7 @@ export class UsuariosService { } async create(createUsuarioDto: CreateUsuarioDto) { - const userExists = this.prismaService.usuario.findUnique({ - where: { - cpf: createUsuarioDto.cpf, - }, - }); - if (!userExists) { + if (true) { createUsuarioDto.senha = await bcrypt.hash(createUsuarioDto.senha, 10); const user = await this.prismaService.usuario.create({ data: createUsuarioDto, From 9de2dfed082d0fa07093c8fa8f0a47090be91ce6 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Sun, 12 Nov 2023 22:49:40 -0300 Subject: [PATCH 087/115] Login --- src/auth/auth.controller.ts | 7 +++++-- src/auth/auth.module.ts | 11 ++++++++-- src/auth/auth.service.ts | 26 ++++++++++++++++++++++-- src/auth/models/AuthRequest.ts | 6 ++++++ src/auth/models/UsuarioPayload.ts | 7 +++++++ src/auth/models/UsuarioToken.ts | 3 +++ src/auth/stategies/local.strategy.ts | 15 -------------- src/auth/strategies/local.strategy.ts | 6 +++--- src/modules/usuarios/usuarios.service.ts | 9 ++++---- 9 files changed, 62 insertions(+), 28 deletions(-) create mode 100644 src/auth/models/AuthRequest.ts create mode 100644 src/auth/models/UsuarioPayload.ts create mode 100644 src/auth/models/UsuarioToken.ts delete mode 100644 src/auth/stategies/local.strategy.ts diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index 9ac5e5a..9219760 100644 --- a/src/auth/auth.controller.ts +++ b/src/auth/auth.controller.ts @@ -4,9 +4,11 @@ import { HttpCode, HttpStatus, UseGuards, + Request, } from '@nestjs/common'; import { AuthService } from './auth.service'; import { LocalAuthGuard } from './guards/local-auth.guard'; +import { AuthRequest } from './models/AuthRequest'; @Controller() export class AuthController { @@ -15,7 +17,8 @@ export class AuthController { @UseGuards(LocalAuthGuard) @Post('login') @HttpCode(HttpStatus.OK) - async login() { - // return await this.authService.login(); + async login(@Request() req: AuthRequest) { + console.log(req.user); + return await this.authService.login(req.user); } } diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts index 3d1731c..819f9e4 100644 --- a/src/auth/auth.module.ts +++ b/src/auth/auth.module.ts @@ -1,11 +1,18 @@ import { Module } from '@nestjs/common'; import { AuthController } from './auth.controller'; import { AuthService } from './auth.service'; -import { LocalStrategy } from './stategies/local.strategy'; import { UsuariosModule } from 'src/modules/usuarios/usuarios.module'; +import { LocalStrategy } from './strategies/local.strategy'; +import { JwtModule } from '@nestjs/jwt/dist'; @Module({ - imports: [UsuariosModule], + imports: [ + UsuariosModule, + JwtModule.register({ + secret: process.env.JWT_SECRET, + signOptions: { expiresIn: '30y' }, + }), + ], controllers: [AuthController], providers: [AuthService, LocalStrategy], }) diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 386d868..1d02fe2 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -1,12 +1,34 @@ import { Injectable } from '@nestjs/common'; import { UsuariosService } from 'src/modules/usuarios/usuarios.service'; import * as bcrypt from 'bcrypt'; +import { Usuario } from 'src/modules/usuarios/entities/usuario.entity'; +import { UsuarioPayload } from './models/UsuarioPayload'; +import { JwtService } from '@nestjs/jwt'; +import { UsuarioToken } from './models/UsuarioToken'; @Injectable() export class AuthService { - constructor(private readonly usuariosService: UsuariosService) {} + constructor( + private readonly usuariosService: UsuariosService, + private readonly jwtService: JwtService, + ) {} - async validateUser(email: string, password: string) { + async login(usuario: Usuario): Promise { + const payload: UsuarioPayload = { + sub: usuario.id, + email: usuario.email, + nome: usuario.nome, + }; + + const jwtToken = this.jwtService.sign(payload); + + return { access_token: jwtToken }; + } + + async validateUser( + email: string, + password: string, + ): Promise { const usuario = await this.usuariosService.findByEmail(email); if (usuario) { const isPasswordValid = await bcrypt.compare(password, usuario.senha); diff --git a/src/auth/models/AuthRequest.ts b/src/auth/models/AuthRequest.ts new file mode 100644 index 0000000..c3384c8 --- /dev/null +++ b/src/auth/models/AuthRequest.ts @@ -0,0 +1,6 @@ +import { Request } from 'express'; +import { Usuario } from 'src/modules/usuarios/entities/usuario.entity'; + +export interface AuthRequest extends Request { + user: Usuario; +} diff --git a/src/auth/models/UsuarioPayload.ts b/src/auth/models/UsuarioPayload.ts new file mode 100644 index 0000000..75c8494 --- /dev/null +++ b/src/auth/models/UsuarioPayload.ts @@ -0,0 +1,7 @@ +export interface UsuarioPayload { + sub: number; + email: string; + nome: string; + iat?: number; + exp?: number; +} diff --git a/src/auth/models/UsuarioToken.ts b/src/auth/models/UsuarioToken.ts new file mode 100644 index 0000000..2f640d3 --- /dev/null +++ b/src/auth/models/UsuarioToken.ts @@ -0,0 +1,3 @@ +export interface UsuarioToken { + access_token: string; +} diff --git a/src/auth/stategies/local.strategy.ts b/src/auth/stategies/local.strategy.ts deleted file mode 100644 index 5bb2e5a..0000000 --- a/src/auth/stategies/local.strategy.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { PassportStrategy } from '@nestjs/passport'; -import { Strategy } from 'passport-local'; -import { AuthService } from '../auth.service'; - -@Injectable() -export class LocalStrategy extends PassportStrategy(Strategy) { - constructor(private authService: AuthService) { - super({ usernameField: 'email' }); - } - - validate(email: string, password: string) { - return this.authService.validateUser(email, password); - } -} diff --git a/src/auth/strategies/local.strategy.ts b/src/auth/strategies/local.strategy.ts index f6abfa7..694e02f 100644 --- a/src/auth/strategies/local.strategy.ts +++ b/src/auth/strategies/local.strategy.ts @@ -9,8 +9,8 @@ export class LocalStrategy extends PassportStrategy(Strategy) { super({ usernameField: 'email' }); } - validate(email: string, password: string) { - console.log(email); - return this.authService.validateUser(email, password); + async validate(email: string, password: string) { + const usuario = await this.authService.validateUser(email, password); + return usuario; } } diff --git a/src/modules/usuarios/usuarios.service.ts b/src/modules/usuarios/usuarios.service.ts index 5ddaae7..b63a96e 100644 --- a/src/modules/usuarios/usuarios.service.ts +++ b/src/modules/usuarios/usuarios.service.ts @@ -41,19 +41,20 @@ export class UsuariosService { async create(createUsuarioDto: CreateUsuarioDto) { if (true) { createUsuarioDto.senha = await bcrypt.hash(createUsuarioDto.senha, 10); - const user = await this.prismaService.usuario.create({ + const usuario = await this.prismaService.usuario.create({ data: createUsuarioDto, }); - user.senha = undefined; - return user; + usuario.senha = undefined; + return usuario; } return { data: { message: 'Cpf ja cadastrado' } }; } async findByEmail(email: string) { - return await this.prismaService.usuario.findFirst({ + const usuario = await this.prismaService.usuario.findFirst({ where: { email }, }); + return usuario; } async countAll() { From 7efcd02cf3b8568bc7f6f574e6630f778db81588 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Mon, 13 Nov 2023 00:10:50 -0300 Subject: [PATCH 088/115] =?UTF-8?q?Corre=C3=A7=C3=B5es=20dto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 6 ++-- prisma/seed.ts | 6 ++-- .../categorias/dto/create-categoria.dto.ts | 4 +-- .../categorias/dto/update-categoria.dto.ts | 4 +-- .../clientes/dto/create-cliente.dto.ts | 29 +++++++++--------- .../clientes/dto/update-cliente.dto.ts | 29 +++++++++--------- .../fornecedores/dto/create-fornecedor.dto.ts | 30 +++++++++---------- .../fornecedores/dto/update-fornecedor.dto.ts | 30 +++++++++---------- .../dto/update-insumo-produtos-base.dto.ts | 2 +- src/modules/insumos/dto/create-insumo.dto.ts | 23 ++------------ src/modules/insumos/dto/update-insumo.dto.ts | 25 +++------------- src/modules/insumos/entities/insumo.entity.ts | 4 +-- src/modules/insumos/insumos.service.ts | 2 +- .../dto/create-lista-insumo.dto.ts | 5 ++-- .../dto/update-lista-insumo.dto.ts | 6 ++-- .../orcamentos/dto/create-orcamento.dto.ts | 12 ++++---- .../orcamentos/dto/update-orcamento.dto.ts | 11 +++---- .../dto/create-produtos-base.dto.ts | 4 +-- .../dto/update-produtos-base.dto.ts | 4 +-- .../produtos/dto/addProdutoBase.dto.ts | 4 +-- .../produtos/dto/create-produto.dto.ts | 6 ++-- .../produtos/dto/update-produto.dto.ts | 10 +++---- .../produtos/entities/produto.entity.ts | 2 +- 23 files changed, 113 insertions(+), 145 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 6e91459..13b6d01 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -22,9 +22,7 @@ model Categoria { model Insumo { id Int @id @default(autoincrement()) titulo String - descricao String? - - idCategoria Int? + idCategoria Int categoria Categoria? @relation(fields: [idCategoria], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -120,7 +118,7 @@ model Pedido { model Produto { id Int @id @default(autoincrement()) titulo String - quantidade Float? + quantidade Float valorUnitario Float? observacoes String? listaInsumos ListaInsumo[] diff --git a/prisma/seed.ts b/prisma/seed.ts index f8e3662..caa10ae 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -39,7 +39,7 @@ async function seedDatabase() { await prisma.insumo.create({ data: { titulo: faker.commerce.productName(), - descricao: faker.lorem.sentence(), + idCategoria: faker.number.int({ min: 1, max: 10 }), }, }); @@ -105,7 +105,7 @@ async function seedDatabase() { totalMateriais: faker.number.float(), status: faker.helpers.arrayElement([ 'Pendente', - 'Iniciado', + 'Em_Processo', 'Concluido', ]), @@ -127,7 +127,7 @@ async function seedDatabase() { await prisma.pedido.create({ data: { pagamento: faker.number.float(), - status: faker.helpers.arrayElement(['Pendente', 'Iniciado']), + status: faker.helpers.arrayElement(['Pendente']), idOrcamento: generateUniqueOrcamentoId(), // Gere um ID de orçamento aleatório }, }); diff --git a/src/modules/categorias/dto/create-categoria.dto.ts b/src/modules/categorias/dto/create-categoria.dto.ts index b2501c8..34fadf4 100644 --- a/src/modules/categorias/dto/create-categoria.dto.ts +++ b/src/modules/categorias/dto/create-categoria.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsString, ValidateIf } from 'class-validator'; +import { IsNotEmpty, IsOptional, IsString, ValidateIf } from 'class-validator'; export class CreateCategoriaDto { @ApiProperty({ @@ -22,7 +22,7 @@ export class CreateCategoriaDto { description: 'A descrição serve para detalhar a categoria', example: 'Grupo de materiais de aço, ferro e aluminio', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({message: 'A descrição deve ser uma string'}) descricao?: string; } diff --git a/src/modules/categorias/dto/update-categoria.dto.ts b/src/modules/categorias/dto/update-categoria.dto.ts index 7df3e81..a30fc64 100644 --- a/src/modules/categorias/dto/update-categoria.dto.ts +++ b/src/modules/categorias/dto/update-categoria.dto.ts @@ -1,7 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateCategoriaDto } from './create-categoria.dto'; import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsString, ValidateIf } from 'class-validator'; +import { IsNotEmpty, IsOptional, IsString, ValidateIf } from 'class-validator'; export class UpdateCategoriaDto extends PartialType(CreateCategoriaDto) { @ApiProperty({ @@ -24,7 +24,7 @@ export class UpdateCategoriaDto extends PartialType(CreateCategoriaDto) { description: 'A descrição serve para detalhar a categoria', example: 'Grupo de materiais de aço, ferro e aluminio', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({message: 'A descrição deve ser uma string'}) descricao?: string; } diff --git a/src/modules/clientes/dto/create-cliente.dto.ts b/src/modules/clientes/dto/create-cliente.dto.ts index 2977adf..56915ae 100644 --- a/src/modules/clientes/dto/create-cliente.dto.ts +++ b/src/modules/clientes/dto/create-cliente.dto.ts @@ -5,6 +5,7 @@ import { IsEnum, IsNotEmpty, IsNumberString, + IsOptional, IsString, Matches, ValidateIf, @@ -43,7 +44,7 @@ export class CreateClienteDto { 'O nome serve para identificar o cliente, caso seja pessoa fisica', example: 'João Pedro', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Fisica" ) @IsString({ message: 'O nome inserido não é válido' }) nome?: string; @@ -52,7 +53,7 @@ export class CreateClienteDto { 'O CPF serve para identificar o cliente, caso seja pessoa fisica', example: '02370334029', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Fisica" ) @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; @@ -61,7 +62,7 @@ export class CreateClienteDto { 'O RG serve para identificar o cliente, caso seja pessoa fisica', example: '114421225', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Fisica" ) @IsNumberString({}, { message: 'O RG inserido não é válido' }) rg?: string; @@ -70,7 +71,7 @@ export class CreateClienteDto { 'O nome fantasia serve para identificar o cliente, caso seja pessoa juridica', example: 'ZawnTech', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Juridica" ) @IsString({ message: 'O nome fantasia inserido não é válido' }) nomeFantasia?: string; @@ -79,7 +80,7 @@ export class CreateClienteDto { 'A razão social serve para identificar o cliente, caso seja pessoa juridica', example: 'Industria mecanica modelo Ltda.', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Juridica" ) @IsString({ message: 'A razão social inserida não é válida' }) razaoSocial?: string; @@ -88,7 +89,7 @@ export class CreateClienteDto { 'O CNPJ serve para identificar o cliente, caso seja pessoa juridica', example: '31895255000193', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Juridica" ) @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) cnpj?: string; @@ -97,7 +98,7 @@ export class CreateClienteDto { 'O pais serve para identificar a região onde o cliente se encontra', example: 'Brasil', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O país inserido não é válido' }) pais?: string; @@ -106,7 +107,7 @@ export class CreateClienteDto { 'O CEP serve para identificar a região onde o cliente se encontra', example: '69918170', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; @@ -115,7 +116,7 @@ export class CreateClienteDto { 'O estado serve para identificar a região onde o cliente se encontra', example: 'SP', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O estado inserido não é válido' }) estado?: string; @@ -124,7 +125,7 @@ export class CreateClienteDto { 'A cidade serve para identificar a região onde o cliente se encontra', example: 'Sorocaba', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; @@ -133,7 +134,7 @@ export class CreateClienteDto { 'O bairro serve para identificar o local onde o cliente se encontra', example: 'Vila Barão', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; @@ -142,7 +143,7 @@ export class CreateClienteDto { 'A rua serve para identificar o local onde o cliente se encontra', example: 'Rua Manuel Lourenço Rodrigues', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'A rua inserida não é válida' }) rua?: string; @@ -151,7 +152,7 @@ export class CreateClienteDto { 'O numero serve para identificar o local onde o cliente se encontra', example: '44', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; @@ -160,7 +161,7 @@ export class CreateClienteDto { 'O complemento serve para dar informações adicionais para identificar o local onde o cliente se encontra', example: 'apt. 42', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; } diff --git a/src/modules/clientes/dto/update-cliente.dto.ts b/src/modules/clientes/dto/update-cliente.dto.ts index 3bef00c..2feeccf 100644 --- a/src/modules/clientes/dto/update-cliente.dto.ts +++ b/src/modules/clientes/dto/update-cliente.dto.ts @@ -7,6 +7,7 @@ import { IsEnum, IsNotEmpty, IsNumberString, + IsOptional, IsString, Matches, ValidateIf, @@ -45,7 +46,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O nome serve para identificar o cliente, caso seja pessoa fisica', example: 'João Pedro', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Fisica" ) @IsString({ message: 'O nome inserido não é válido' }) nome?: string; @@ -54,7 +55,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O CPF serve para identificar o cliente, caso seja pessoa fisica', example: '02370334029', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Fisica" ) @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; @@ -63,7 +64,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O RG serve para identificar o cliente, caso seja pessoa fisica', example: '114421225', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Fisica" ) @IsNumberString({}, { message: 'O RG inserido não é válido' }) rg?: string; @@ -72,7 +73,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O nome fantasia serve para identificar o cliente, caso seja pessoa juridica', example: 'ZawnTech', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Juridica" ) @IsString({ message: 'O nome fantasia inserido não é válido' }) nomeFantasia?: string; @@ -81,7 +82,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'A razão social serve para identificar o cliente, caso seja pessoa juridica', example: 'Industria mecanica modelo Ltda.', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Juridica" ) @IsString({ message: 'A razão social inserida não é válida' }) razaoSocial?: string; @@ -90,7 +91,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O CNPJ serve para identificar o cliente, caso seja pessoa juridica', example: '31895255000193', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Juridica" ) @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) cnpj?: string; @@ -99,7 +100,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O pais serve para identificar a região onde o cliente se encontra', example: 'Brasil', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O país inserido não é válido' }) pais?: string; @@ -108,7 +109,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O CEP serve para identificar a região onde o cliente se encontra', example: '69918170', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; @@ -117,7 +118,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O estado serve para identificar a região onde o cliente se encontra', example: 'SP', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O estado inserido não é válido' }) estado?: string; @@ -126,7 +127,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'A cidade serve para identificar a região onde o cliente se encontra', example: 'Sorocaba', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; @@ -135,7 +136,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O bairro serve para identificar o local onde o cliente se encontra', example: 'Vila Barão', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; @@ -144,7 +145,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'A rua serve para identificar o local onde o cliente se encontra', example: 'Rua Manuel Lourenço Rodrigues', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'A rua inserida não é válida' }) rua?: string; @@ -153,7 +154,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O numero serve para identificar o local onde o cliente se encontra', example: '44', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; @@ -162,7 +163,7 @@ export class UpdateClienteDto extends PartialType(CreateClienteDto) { 'O complemento serve para dar informações adicionais para identificar o local onde o cliente se encontra', example: 'apt. 42', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; } diff --git a/src/modules/fornecedores/dto/create-fornecedor.dto.ts b/src/modules/fornecedores/dto/create-fornecedor.dto.ts index 7e6989f..355c768 100644 --- a/src/modules/fornecedores/dto/create-fornecedor.dto.ts +++ b/src/modules/fornecedores/dto/create-fornecedor.dto.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; import { contaTipo } from '@prisma/client'; -import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches, ValidateIf } from 'class-validator'; +import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsOptional, IsString, Matches, ValidateIf } from 'class-validator'; export class CreateFornecedorDto { @ApiProperty({ @@ -35,7 +35,7 @@ export class CreateFornecedorDto { 'O nome serve para identificar o fornecedor, caso seja pessoa fisica', example: 'João Pedro', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Fisica" ) @IsString({ message: 'O nome inserido não é válido' }) nome?: string; @@ -44,7 +44,7 @@ export class CreateFornecedorDto { 'O CPF serve para identificar o fornecedor, caso seja pessoa fisica', example: '02370334029', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Fisica" ) @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; @@ -53,7 +53,7 @@ export class CreateFornecedorDto { 'O RG serve para identificar o fornecedor, caso seja pessoa fisica', example: '114421225', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Fisica" ) @IsNumberString({}, { message: 'O RG inserido não é válido' }) rg?: string; @@ -62,7 +62,7 @@ export class CreateFornecedorDto { 'O nome fantasia serve para identificar o fornecedor, caso seja pessoa juridica', example: 'ZawnTech', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Juridica" ) @IsString({ message: 'O nome fantasia inserido não é válido' }) nomeFantasia?: string; @@ -71,7 +71,7 @@ export class CreateFornecedorDto { 'A razão social serve para identificar o fornecedor, caso seja pessoa juridica', example: 'Industria mecanica modelo Ltda.', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Juridica" ) @IsString({ message: 'A razão social inserida não é válida' }) razaoSocial?: string; @@ -80,7 +80,7 @@ export class CreateFornecedorDto { 'O CNPJ serve para identificar o fornecedor, caso seja pessoa juridica', example: '31895255000193', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Juridica" ) @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) cnpj?: string; @@ -89,7 +89,7 @@ export class CreateFornecedorDto { 'O pais serve para identificar a região onde o fornecedor se encontra', example: 'Brasil', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O país inserido não é válido' }) pais?: string; @@ -98,7 +98,7 @@ export class CreateFornecedorDto { 'O CEP serve para identificar a região onde o fornecedor se encontra', example: '69918170', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; @@ -107,7 +107,7 @@ export class CreateFornecedorDto { 'O estado serve para identificar a região onde o fornecedor se encontra', example: 'SP', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O estado inserido não é válido' }) estado?: string; @@ -116,7 +116,7 @@ export class CreateFornecedorDto { 'A cidade serve para identificar a região onde o fornecedor se encontra', example: 'Sorocaba', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; @@ -125,7 +125,7 @@ export class CreateFornecedorDto { 'O bairro serve para identificar o local onde o fornecedor se encontra', example: 'Vila Barão', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; @@ -134,7 +134,7 @@ export class CreateFornecedorDto { 'A rua serve para identificar o local onde o fornecedor se encontra', example: 'Rua Manuel Lourenço Rodrigues', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'A rua inserida não é válida' }) rua?: string; @@ -143,7 +143,7 @@ export class CreateFornecedorDto { 'O numero serve para identificar o local onde o fornecedor se encontra', example: '44', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; @@ -152,7 +152,7 @@ export class CreateFornecedorDto { 'O complemento serve para dar informações adicionais para identificar o local onde o fornecedor se encontra', example: 'apt. 42', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; } diff --git a/src/modules/fornecedores/dto/update-fornecedor.dto.ts b/src/modules/fornecedores/dto/update-fornecedor.dto.ts index 494edbd..2adc122 100644 --- a/src/modules/fornecedores/dto/update-fornecedor.dto.ts +++ b/src/modules/fornecedores/dto/update-fornecedor.dto.ts @@ -2,7 +2,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateFornecedorDto } from './create-fornecedor.dto'; import { contaTipo } from '@prisma/client'; import { ApiProperty } from '@nestjs/swagger'; -import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsString, Matches, ValidateIf } from 'class-validator'; +import { IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsOptional, IsString, Matches, ValidateIf } from 'class-validator'; export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { @ApiProperty({ @@ -37,7 +37,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O nome serve para identificar o fornecedor, caso seja pessoa fisica', example: 'João Pedro', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Fisica" ) @IsString({ message: 'O nome inserido não é válido' }) nome?: string; @@ -46,7 +46,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O CPF serve para identificar o fornecedor, caso seja pessoa fisica', example: '02370334029', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Fisica" ) @IsNumberString({}, { message: 'O CPF inserido não é válido' }) cpf?: string; @@ -55,7 +55,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O RG serve para identificar o fornecedor, caso seja pessoa fisica', example: '114421225', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Fisica" ) @IsNumberString({}, { message: 'O RG inserido não é válido' }) rg?: string; @@ -64,7 +64,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O nome fantasia serve para identificar o fornecedor, caso seja pessoa juridica', example: 'ZawnTech', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Juridica" ) @IsString({ message: 'O nome fantasia inserido não é válido' }) nomeFantasia?: string; @@ -73,7 +73,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'A razão social serve para identificar o fornecedor, caso seja pessoa juridica', example: 'Industria mecanica modelo Ltda.', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Juridica" ) @IsString({ message: 'A razão social inserida não é válida' }) razaoSocial?: string; @@ -82,7 +82,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O CNPJ serve para identificar o fornecedor, caso seja pessoa juridica', example: '31895255000193', }) - @ValidateIf((object, value) => value !== undefined) + @ValidateIf(o => o.contaTipo == "Juridica" ) @IsNumberString({}, { message: 'O CNPJ inserido não é válido' }) cnpj?: string; @@ -91,7 +91,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O pais serve para identificar a região onde o fornecedor se encontra', example: 'Brasil', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O país inserido não é válido' }) pais?: string; @@ -100,7 +100,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O CEP serve para identificar a região onde o fornecedor se encontra', example: '69918170', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumberString({}, { message: 'O CEP inserido não é válido' }) cep?: string; @@ -109,7 +109,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O estado serve para identificar a região onde o fornecedor se encontra', example: 'SP', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O estado inserido não é válido' }) estado?: string; @@ -118,7 +118,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'A cidade serve para identificar a região onde o fornecedor se encontra', example: 'Sorocaba', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'A cidade inserida não é válida' }) cidade?: string; @@ -127,7 +127,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O bairro serve para identificar o local onde o fornecedor se encontra', example: 'Vila Barão', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O bairro inserido não é válido' }) bairro?: string; @@ -136,7 +136,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'A rua serve para identificar o local onde o fornecedor se encontra', example: 'Rua Manuel Lourenço Rodrigues', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'A rua inserida não é válida' }) rua?: string; @@ -145,7 +145,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O numero serve para identificar o local onde o fornecedor se encontra', example: '44', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumberString({}, { message: 'O numero inserido não é válido' }) numero?: string; @@ -154,7 +154,7 @@ export class UpdateFornecedorDto extends PartialType(CreateFornecedorDto) { 'O complemento serve para dar informações adicionais para identificar o local onde o fornecedor se encontra', example: 'apt. 42', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'O complemento inserido não é válido' }) complemento?: string; } diff --git a/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts b/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts index b6edb67..903ca4a 100644 --- a/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts +++ b/src/modules/insumos-produtos-base/dto/update-insumo-produtos-base.dto.ts @@ -29,7 +29,7 @@ export class UpdateInsumosProdutosBaseDto extends PartialType( 'O id do insumo serve para descrever para qual insumo este insumo produto base aponta', example: '1', }) - @IsNotEmpty({message: 'O insumo não pode estar vazio'}) + @IsNotEmpty({message: 'Selecione um insumo'}) @IsNumber({},{message: 'O insumo inserido não é válido'}) idVariante?: number; diff --git a/src/modules/insumos/dto/create-insumo.dto.ts b/src/modules/insumos/dto/create-insumo.dto.ts index b6ff960..d856b14 100644 --- a/src/modules/insumos/dto/create-insumo.dto.ts +++ b/src/modules/insumos/dto/create-insumo.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber, IsString, Matches, ValidateIf } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsOptional, IsString, Matches, ValidateIf } from 'class-validator'; export class CreateInsumoDto { @ApiProperty({ @@ -9,24 +9,7 @@ export class CreateInsumoDto { @IsNotEmpty({ message: 'O titulo não pode estar vazio' }) @IsString({ message: 'O titulo inserido não é válido' }) titulo: string; - - @ApiProperty({ - description: 'A descrição serve para detalhar o insumo', - example: '20 x 30 x 6.000 mm', - }) - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A descrição inserida não é válida' }) - descricao?: string; - - @ApiProperty({ - description: - 'A unidade de medida serve para destacar a forma que o insumo é medido', - example: 'mm', - }) - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A unidade de medida inserida não é válida' }) - unidadeMedida?: string; - + @ApiProperty({ description: 'O Id da categoria serve para conectar o insumo a uma categoria', @@ -34,5 +17,5 @@ export class CreateInsumoDto { }) @ValidateIf((object, value) => value !== undefined) @IsNumber({}, { message: 'A categoria inserida não é válida' }) - idCategoria?: number; + idCategoria: number; } diff --git a/src/modules/insumos/dto/update-insumo.dto.ts b/src/modules/insumos/dto/update-insumo.dto.ts index 02a0174..85d7452 100644 --- a/src/modules/insumos/dto/update-insumo.dto.ts +++ b/src/modules/insumos/dto/update-insumo.dto.ts @@ -1,7 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateInsumoDto } from './create-insumo.dto'; import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsOptional, IsString, ValidateIf } from 'class-validator'; export class UpdateInsumoDto extends PartialType(CreateInsumoDto) { @ApiProperty({ @@ -11,30 +11,13 @@ export class UpdateInsumoDto extends PartialType(CreateInsumoDto) { @IsNotEmpty({ message: 'O titulo não pode estar vazio' }) @IsString({ message: 'O titulo inserido não é válido' }) titulo?: string; - - @ApiProperty({ - description: 'A descrição serve para detalhar o insumo', - example: '20 x 30 x 6.000 mm', - }) - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A descrição inserida não é válida' }) - descricao?: string; - - @ApiProperty({ - description: - 'A unidade de medida serve para destacar a forma que o insumo é medido', - example: 'mm', - }) - @ValidateIf((object, value) => value !== undefined) - @IsString({ message: 'A unidade de medida inserida não é válida' }) - unidadeMedida?: string; - + @ApiProperty({ description: 'O Id da categoria serve para conectar o insumo a uma categoria', example: '1', }) - @ValidateIf((object, value) => value !== undefined) + @IsNotEmpty({ message: 'Selecione uma categoria' }) @IsNumber({}, { message: 'A categoria inserida não é válida' }) - idCategoria?: number; + idCategoria: number; } diff --git a/src/modules/insumos/entities/insumo.entity.ts b/src/modules/insumos/entities/insumo.entity.ts index df07403..1dd549e 100644 --- a/src/modules/insumos/entities/insumo.entity.ts +++ b/src/modules/insumos/entities/insumo.entity.ts @@ -4,9 +4,7 @@ import { Categoria } from '../../categorias/entities/categoria.entity'; export class Insumo { id: number; titulo: string; - descricao?: string; - unidadeMedida?: string; - idCategoria?: number; + idCategoria: number; categoria?: Categoria; variante?: Variante; createdAt: Date; diff --git a/src/modules/insumos/insumos.service.ts b/src/modules/insumos/insumos.service.ts index c45d6b2..23dbfe8 100644 --- a/src/modules/insumos/insumos.service.ts +++ b/src/modules/insumos/insumos.service.ts @@ -22,7 +22,7 @@ export class InsumosService { where: { OR: [ { titulo: { contains: titulo_like } }, - { descricao: { contains: titulo_like } }, + { categoria: { titulo: { contains: titulo_like } } }, ], }, diff --git a/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts b/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts index 4231d31..b2366dc 100644 --- a/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts +++ b/src/modules/lista-insumos/dto/create-lista-insumo.dto.ts @@ -3,6 +3,7 @@ import { IsNotEmpty, IsNumber, IsNumberString, + IsOptional, IsString, ValidateIf, } from 'class-validator'; @@ -40,7 +41,7 @@ export class CreateListaInsumoDto { 'O id da cotação serve para descrever qual a cotação que determinará o custo do insumo', example: '5', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumber({}, { message: 'A cotação inserida não é válida' }) idCotacao?: number; @@ -51,7 +52,7 @@ export class CreateListaInsumoDto { 'O valor unitario serve para descrever qual é o valor do insumo', example: '100,00', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumberString({}, { message: 'O valor unitário inserido não é válido' }) valorUnitario?: number; } diff --git a/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts b/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts index 4465a01..47edd86 100644 --- a/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts +++ b/src/modules/lista-insumos/dto/update-lista-insumo.dto.ts @@ -1,7 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateListaInsumoDto } from './create-lista-insumo.dto'; import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber, IsNumberString, IsString, ValidateIf } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsNumberString, IsOptional, IsString, ValidateIf } from 'class-validator'; export class UpdateListaInsumoDto extends PartialType(CreateListaInsumoDto) { @ApiProperty({ @@ -36,7 +36,7 @@ export class UpdateListaInsumoDto extends PartialType(CreateListaInsumoDto) { 'O id da cotação serve para descrever qual a cotação que determinará o custo do insumo', example: '5', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumber({}, { message: 'A cotação inserida não é válida' }) idCotacao?: number; @@ -47,7 +47,7 @@ export class UpdateListaInsumoDto extends PartialType(CreateListaInsumoDto) { 'O valor unitario serve para descrever qual é o valor do insumo', example: '100,00', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumberString({},{message: 'O valor unitário inserido não é válido'}) valorUnitario?: number; } diff --git a/src/modules/orcamentos/dto/create-orcamento.dto.ts b/src/modules/orcamentos/dto/create-orcamento.dto.ts index 1c30572..069eced 100644 --- a/src/modules/orcamentos/dto/create-orcamento.dto.ts +++ b/src/modules/orcamentos/dto/create-orcamento.dto.ts @@ -5,8 +5,10 @@ import { IsEnum, IsNotEmpty, IsNumber, + IsOptional, IsString, ValidateIf, + isNotEmpty, } from 'class-validator'; export class CreateOrcamentoDto { @@ -15,7 +17,7 @@ export class CreateOrcamentoDto { 'A validade serve para descrever até qual data o orçamento será valido', example: '2023-10-23T17:30:44.382Z', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsDateString({},{ message: 'A validade inserida não é válida' }) validade?: Date; @@ -24,7 +26,7 @@ export class CreateOrcamentoDto { 'O total mão de obra serve para descrever o custo total de mão de obra para produzir os itens do orçamento', example: '750', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumber({}, { message: 'O valor de mão de obra inserido não é válido' }) totalMaoObra?: number; @@ -33,7 +35,7 @@ export class CreateOrcamentoDto { 'O total materiais serve para descrever o custo total das compras do materiais para produzir os itens do orçamento', example: '700', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumber({}, { message: 'O valor total de materiais inserido não é válido' }) totalMateriais?: number; @@ -50,7 +52,7 @@ export class CreateOrcamentoDto { 'O prazo estimado de produção serve para descrever uma estimativa de quanto tempo será necessário para concluir o orçamento, descrito em dias', example: '90', }) - @ValidateIf((object, value) => value !== undefined) + @IsNotEmpty({ message: 'Informe uma Valor em Dias' }) @IsNumber({}, { message: 'O prazo estimado inserido não é válido' }) prazoEstimadoProducao: number; @@ -59,7 +61,7 @@ export class CreateOrcamentoDto { 'As observações servem para descrever caracteristicas relevantes obre o orçamento', example: '2 portões e 1 grade para janela', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; diff --git a/src/modules/orcamentos/dto/update-orcamento.dto.ts b/src/modules/orcamentos/dto/update-orcamento.dto.ts index 03ba5bb..459472c 100644 --- a/src/modules/orcamentos/dto/update-orcamento.dto.ts +++ b/src/modules/orcamentos/dto/update-orcamento.dto.ts @@ -7,6 +7,7 @@ import { IsEnum, IsNotEmpty, IsNumber, + IsOptional, IsString, ValidateIf, } from 'class-validator'; @@ -17,7 +18,7 @@ export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { 'A validade serve para descrever até qual data o orçamento será valido', example: '2023-10-23T17:30:44.382Z', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsDateString({},{ message: 'A validade inserida não é válida' }) validade?: Date; @@ -35,7 +36,7 @@ export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { 'O total materiais serve para descrever o custo total das compras do materiais para produzir os itens do orçamento', example: '700', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumber({}, { message: 'O valor total de materiais inserido não é válido' }) totalMateriais?: number; @@ -52,16 +53,16 @@ export class UpdateOrcamentoDto extends PartialType(CreateOrcamentoDto) { 'O prazo estimado de produção serve para descrever uma estimativa de quanto tempo será necessário para concluir o orçamento, descrito em dias', example: '90', }) - @ValidateIf((object, value) => value !== undefined) + @IsNotEmpty({ message: 'Informe uma Valor em Dias' }) @IsNumber({}, { message: 'O prazo estimado inserido não é válido' }) prazoEstimadoProducao?: number; - + @ApiProperty({ description: 'As observações servem para descrever caracteristicas relevantes obre o orçamento', example: '2 portões e 1 grade para janela', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; diff --git a/src/modules/produtos-base/dto/create-produtos-base.dto.ts b/src/modules/produtos-base/dto/create-produtos-base.dto.ts index 43c1784..ab136aa 100644 --- a/src/modules/produtos-base/dto/create-produtos-base.dto.ts +++ b/src/modules/produtos-base/dto/create-produtos-base.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty } from "@nestjs/swagger"; -import { IsNotEmpty, IsString, ValidateIf } from "class-validator"; +import { IsNotEmpty, IsOptional, IsString, ValidateIf } from "class-validator"; export class CreateProdutosBaseDto { @ApiProperty({ @@ -16,7 +16,7 @@ export class CreateProdutosBaseDto { 'As observações servem para descrever caracteristicas relevantes sobre o produto base', example: '2" x 6 m', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; } diff --git a/src/modules/produtos-base/dto/update-produtos-base.dto.ts b/src/modules/produtos-base/dto/update-produtos-base.dto.ts index 2f90850..3d280cd 100644 --- a/src/modules/produtos-base/dto/update-produtos-base.dto.ts +++ b/src/modules/produtos-base/dto/update-produtos-base.dto.ts @@ -1,7 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateProdutosBaseDto } from './create-produtos-base.dto'; import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsString, ValidateIf } from 'class-validator'; +import { IsNotEmpty, IsOptional, IsString, ValidateIf } from 'class-validator'; export class UpdateProdutosBaseDto extends PartialType(CreateProdutosBaseDto) { @ApiProperty({ @@ -18,7 +18,7 @@ export class UpdateProdutosBaseDto extends PartialType(CreateProdutosBaseDto) { 'As observações servem para descrever caracteristicas relevantes sobre o produto base', example: '2" x 6 m', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; } diff --git a/src/modules/produtos/dto/addProdutoBase.dto.ts b/src/modules/produtos/dto/addProdutoBase.dto.ts index 02c8c5c..861476f 100644 --- a/src/modules/produtos/dto/addProdutoBase.dto.ts +++ b/src/modules/produtos/dto/addProdutoBase.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsOptional, IsString, ValidateIf } from 'class-validator'; export class addProdutoBaseDto { @ApiProperty({ @@ -24,7 +24,7 @@ export class addProdutoBaseDto { 'As observações servem para descrever caracteristicas relevantes sobre o produto', example: '2" x 6 m', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({message: 'A observação inserida não é válida'}) observacoes?: string; diff --git a/src/modules/produtos/dto/create-produto.dto.ts b/src/modules/produtos/dto/create-produto.dto.ts index c40caaf..df03023 100644 --- a/src/modules/produtos/dto/create-produto.dto.ts +++ b/src/modules/produtos/dto/create-produto.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsOptional, IsString, ValidateIf, isNotEmpty } from 'class-validator'; export class CreateProdutoDto { @ApiProperty({ @@ -15,9 +15,9 @@ export class CreateProdutoDto { 'A quantidade serve para descrever quantas unidades deste produto serão necessárias para o orçamento', example: '3', }) - @ValidateIf((object, value) => value !== undefined) + @IsNotEmpty({ message: 'Informe a Quantidade do Produto' }) @IsNumber({}, { message: 'A quantidade inserida não é válida' }) - quantidade?: number; + quantidade: number; @ApiProperty({ description: diff --git a/src/modules/produtos/dto/update-produto.dto.ts b/src/modules/produtos/dto/update-produto.dto.ts index 53f3be3..7fd0c24 100644 --- a/src/modules/produtos/dto/update-produto.dto.ts +++ b/src/modules/produtos/dto/update-produto.dto.ts @@ -1,7 +1,7 @@ import { PartialType } from '@nestjs/mapped-types'; import { CreateProdutoDto } from './create-produto.dto'; import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsNumber, IsString, ValidateIf } from 'class-validator'; +import { IsNotEmpty, IsNumber, IsOptional, IsString, ValidateIf } from 'class-validator'; export class UpdateProdutoDto extends PartialType(CreateProdutoDto) { @ApiProperty({ @@ -17,16 +17,16 @@ export class UpdateProdutoDto extends PartialType(CreateProdutoDto) { 'A quantidade serve para descrever quantas unidades deste produto serão necessárias para o orçamento', example: '3', }) - @ValidateIf((object, value) => value !== undefined) + @IsNotEmpty({ message: 'Informe a Quantidade' }) @IsNumber({}, { message: 'A quantidade inserida não é válida' }) - quantidade?: number; + quantidade: number; @ApiProperty({ description: 'O valor unitario serve para descrever o valor do produto como uma unica unidade', example: '340', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsNumber({}, { message: 'O valor unitário inserido não é válido' }) valorUnitario?: number; @@ -35,7 +35,7 @@ export class UpdateProdutoDto extends PartialType(CreateProdutoDto) { 'As observações servem para descrever caracteristicas relevantes sobre o produto', example: '2" x 6 m', }) - @ValidateIf((object, value) => value !== undefined) + @IsOptional() @IsString({ message: 'A observação inserida não é válida' }) observacoes?: string; diff --git a/src/modules/produtos/entities/produto.entity.ts b/src/modules/produtos/entities/produto.entity.ts index 1178063..8ef45c7 100644 --- a/src/modules/produtos/entities/produto.entity.ts +++ b/src/modules/produtos/entities/produto.entity.ts @@ -4,7 +4,7 @@ import { Orcamento } from 'src/modules/orcamentos/entities/orcamento.entity'; export class Produto { id: number; titulo: string; - quantidade?: number; + quantidade: number; valorUnitario?: number; observacoes?: string; listaInsumos: ListaInsumo[]; From 32c913459282ad50fb151bcba329b42c20a314c3 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Mon, 13 Nov 2023 00:16:55 -0300 Subject: [PATCH 089/115] =?UTF-8?q?Corre=C3=A7=C3=A3o=20validationPipe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/categorias/categorias.controller.ts | 4 ++-- src/modules/clientes/clientes.controller.ts | 4 ++-- src/modules/cotacoes/cotacoes.controller.ts | 4 ++-- src/modules/fornecedores/fornecedores.controller.ts | 4 ++-- .../insumos-produtos-base/insumos-produtos-base.controller.ts | 4 ++-- src/modules/insumos/insumos.controller.ts | 4 ++-- src/modules/lista-insumos/lista-insumos.controller.ts | 4 ++-- src/modules/orcamentos/orcamentos.controller.ts | 2 +- src/modules/pedidos/pedidos.controller.ts | 4 ++-- src/modules/produtos-base/produtos-base.controller.ts | 4 ++-- src/modules/produtos/produtos.controller.ts | 4 ++-- src/modules/usuarios/usuarios.controller.ts | 4 ++-- 12 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/modules/categorias/categorias.controller.ts b/src/modules/categorias/categorias.controller.ts index bd6ef85..84a7ca4 100644 --- a/src/modules/categorias/categorias.controller.ts +++ b/src/modules/categorias/categorias.controller.ts @@ -28,7 +28,7 @@ export class CategoriasController { async countAll() { return await this.categoriasService.countAllCategorias(); } - @UsePipes(ValidationPipe) + @Post() async create(@Body() createCategoriaDto: CreateCategoriaDto) { return await this.categoriasService.create(createCategoriaDto); @@ -59,7 +59,7 @@ export class CategoriasController { async findManyByTitle(@Param('busca') buscaParam: string) { return await this.categoriasService.findManyByTitle(buscaParam); } - @UsePipes(ValidationPipe) + @Patch(':id') async update( @Param('id') id: string, diff --git a/src/modules/clientes/clientes.controller.ts b/src/modules/clientes/clientes.controller.ts index 65867b9..f708384 100644 --- a/src/modules/clientes/clientes.controller.ts +++ b/src/modules/clientes/clientes.controller.ts @@ -16,7 +16,7 @@ export class ClientesController { return await this.clientesService.countAllCliente(); } - @UsePipes(ValidationPipe) + @Post() async create(@Body() createClienteDto: CreateClienteDto) { return await this.clientesService.create(createClienteDto); @@ -49,7 +49,7 @@ export class ClientesController { return await this.clientesService.findOne(+id); } - @UsePipes(ValidationPipe) + @Patch(':id') async update(@Param('id') id: string, @Body() updateClienteDto: UpdateClienteDto) { return await this.clientesService.update(+id, updateClienteDto); diff --git a/src/modules/cotacoes/cotacoes.controller.ts b/src/modules/cotacoes/cotacoes.controller.ts index ceed9bb..9658889 100644 --- a/src/modules/cotacoes/cotacoes.controller.ts +++ b/src/modules/cotacoes/cotacoes.controller.ts @@ -42,7 +42,7 @@ export class CotacoesController { return await this.cotacoesService.countAllCotacaos(); } - @UsePipes(ValidationPipe) + @Post() async create(@Body() createCotacaoDto: CreateCotacaoDto) { return await this.cotacoesService.create(createCotacaoDto); @@ -72,7 +72,7 @@ export class CotacoesController { return await this.cotacoesService.findOne(+id); } - @UsePipes(ValidationPipe) + @Patch(':id') async update(@Param('id') id: string, @Body() updateCotacaoDto: UpdateCotacaoDto) { return await this.cotacoesService.update(+id, updateCotacaoDto); diff --git a/src/modules/fornecedores/fornecedores.controller.ts b/src/modules/fornecedores/fornecedores.controller.ts index ba4f8a1..3f91545 100644 --- a/src/modules/fornecedores/fornecedores.controller.ts +++ b/src/modules/fornecedores/fornecedores.controller.ts @@ -26,7 +26,7 @@ export class FornecedoresController { return await this.fornecedoresService.countAllFornecedor(); } - @UsePipes(ValidationPipe) + @Post() async create(@Body() CreateFornecedoresDto: CreateFornecedorDto) { return await this.fornecedoresService.create(CreateFornecedoresDto); @@ -53,7 +53,7 @@ export class FornecedoresController { return await this.fornecedoresService.findOne(+id); } - @UsePipes(ValidationPipe) + @Patch(':id') async update( @Param('id') id: string, diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts index b9a1872..c7a4827 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts @@ -19,7 +19,7 @@ export class InsumosProdutosBaseController { return await this.insumosProdutosBaseService.findInsumoProdBase(+id); } - @UsePipes(ValidationPipe) + @Post() async create(@Body() createInsumosProdutosBaseDto: CreateInsumosProdutosBaseDto) { return await this.insumosProdutosBaseService.create(createInsumosProdutosBaseDto); @@ -49,7 +49,7 @@ export class InsumosProdutosBaseController { return await insumosBase } - @UsePipes(ValidationPipe) + @Patch(':id') async update(@Param('id') id: string, @Body() updateInsumosProdutosBaseDto: UpdateInsumosProdutosBaseDto) { return await this.insumosProdutosBaseService.update(+id, updateInsumosProdutosBaseDto); diff --git a/src/modules/insumos/insumos.controller.ts b/src/modules/insumos/insumos.controller.ts index 159a81d..c67198c 100644 --- a/src/modules/insumos/insumos.controller.ts +++ b/src/modules/insumos/insumos.controller.ts @@ -26,7 +26,7 @@ export class InsumosController { return await this.insumosService.countAll(); } - @UsePipes(ValidationPipe) + @Post() async create(@Body() createInsumoDto: CreateInsumoDto) { return await this.insumosService.create(createInsumoDto); @@ -53,7 +53,7 @@ export class InsumosController { return await this.insumosService.findOne(+id); } - @UsePipes(ValidationPipe) + @Patch(':id') async update(@Param('id') id: string, @Body() updateInsumoDto: UpdateInsumoDto) { return await this.insumosService.update(+id, updateInsumoDto); diff --git a/src/modules/lista-insumos/lista-insumos.controller.ts b/src/modules/lista-insumos/lista-insumos.controller.ts index 370719e..101da75 100644 --- a/src/modules/lista-insumos/lista-insumos.controller.ts +++ b/src/modules/lista-insumos/lista-insumos.controller.ts @@ -22,7 +22,7 @@ import { ApiBody, ApiTags } from '@nestjs/swagger'; export class ListaInsumosController { constructor(private readonly listaInsumosService: ListaInsumosService) {} - @UsePipes(ValidationPipe) + @Post() async create(@Body() createListaInsumoDto: CreateListaInsumoDto) { return await this.listaInsumosService.create(createListaInsumoDto); @@ -58,7 +58,7 @@ export class ListaInsumosController { return await this.listaInsumosService.findOne(+id); } - @UsePipes(ValidationPipe) + @Patch(':id') async update( @Param('id') id: string, diff --git a/src/modules/orcamentos/orcamentos.controller.ts b/src/modules/orcamentos/orcamentos.controller.ts index 473117a..f3e3dcf 100644 --- a/src/modules/orcamentos/orcamentos.controller.ts +++ b/src/modules/orcamentos/orcamentos.controller.ts @@ -67,7 +67,7 @@ export class OrcamentosController { return await this.orcamentosService.findOne(+id); } - @UsePipes(ValidationPipe) + @Patch(':id') async update( @Param('id') id: string, diff --git a/src/modules/pedidos/pedidos.controller.ts b/src/modules/pedidos/pedidos.controller.ts index 78ef7e1..9342781 100644 --- a/src/modules/pedidos/pedidos.controller.ts +++ b/src/modules/pedidos/pedidos.controller.ts @@ -26,7 +26,7 @@ export class PedidosController { return await this.pedidosService.countAll(); } - @UsePipes(ValidationPipe) + @Post() async create(@Body() createPedidoDto: CreatePedidoDto) { return await this.pedidosService.create(createPedidoDto); @@ -53,7 +53,7 @@ export class PedidosController { return await this.pedidosService.findOne(+id); } - @UsePipes(ValidationPipe) + @Patch(':id') async update(@Param('id') id: string, @Body() updatePedidoDto: UpdatePedidoDto) { return await this.pedidosService.update(+id, updatePedidoDto); diff --git a/src/modules/produtos-base/produtos-base.controller.ts b/src/modules/produtos-base/produtos-base.controller.ts index 09b31b9..a14452f 100644 --- a/src/modules/produtos-base/produtos-base.controller.ts +++ b/src/modules/produtos-base/produtos-base.controller.ts @@ -28,7 +28,7 @@ export class ProdutosBaseController { return await this.produtosBaseService.countAll(); } - @UsePipes(ValidationPipe) + @Post() async create(@Body() createProdutosBaseDto: CreateProdutosBaseDto) { return await this.produtosBaseService.create(createProdutosBaseDto); @@ -55,7 +55,7 @@ export class ProdutosBaseController { return await this.produtosBaseService.findOne(+id); } - @UsePipes(ValidationPipe) + @Patch(':id') async update( @Param('id') id: string, diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index 9893f17..a6aae06 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -32,7 +32,7 @@ export class ProdutosController { return await this.produtosService.countAll(id); } - @UsePipes(ValidationPipe) + @Post() async create(@Body() createProdutoDto: CreateProdutoDto) { return await this.produtosService.create(createProdutoDto); @@ -69,7 +69,7 @@ export class ProdutosController { return await produtos } - @UsePipes(ValidationPipe) + @Patch(':id') async update(@Param('id') id: string, @Body() updateProdutoDto: UpdateProdutoDto) { return await this.produtosService.update(+id, updateProdutoDto); diff --git a/src/modules/usuarios/usuarios.controller.ts b/src/modules/usuarios/usuarios.controller.ts index 402585d..f885b2d 100644 --- a/src/modules/usuarios/usuarios.controller.ts +++ b/src/modules/usuarios/usuarios.controller.ts @@ -27,7 +27,7 @@ export class UsuariosController { return await this.usuariosService.countAll(); } - @UsePipes(ValidationPipe) + @Post() async create(@Body() createUsuarioDto: CreateUsuarioDto) { return await this.usuariosService.create(createUsuarioDto); @@ -54,7 +54,7 @@ export class UsuariosController { return await this.usuariosService.findOne(+id); } - @UsePipes(ValidationPipe) + @Patch(':id') async update(@Param('id') id: string, @Body() updateUsuarioDto: UpdateUsuarioDto) { return await this.usuariosService.update(+id, updateUsuarioDto); From b856b1ec4dfcb62626f32fd05d1b8047deac6e94 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Mon, 13 Nov 2023 00:44:27 -0300 Subject: [PATCH 090/115] =?UTF-8?q?Autentica=C3=A7=C3=A3o=20com=20nivel=20?= =?UTF-8?q?de=20acesso?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.controller.ts | 7 ++++ src/app.module.ts | 4 +- src/auth/auth.controller.ts | 3 +- src/auth/auth.module.ts | 12 ++++-- src/auth/decorators/current-user.decorator.ts | 11 +++++ src/auth/decorators/is-public.decorator.ts | 4 ++ src/auth/guards/jwt-auth.guard.ts | 41 +++++++++++++++++++ .../login-validation.middleware.ts | 31 ++++++++++++++ src/auth/models/Login.dto.ts | 9 ++++ src/auth/models/UsuarioFromJwt.ts | 5 +++ src/auth/strategies/jwt.strategy.ts | 24 +++++++++++ .../orcamentos/orcamentos.controller.ts | 14 +++++-- src/modules/orcamentos/orcamentos.service.ts | 16 ++++---- src/modules/usuarios/usuarios.controller.ts | 32 ++++++++++----- 14 files changed, 188 insertions(+), 25 deletions(-) create mode 100644 src/auth/decorators/current-user.decorator.ts create mode 100644 src/auth/decorators/is-public.decorator.ts create mode 100644 src/auth/guards/jwt-auth.guard.ts create mode 100644 src/auth/middlewares/login-validation.middleware.ts create mode 100644 src/auth/models/Login.dto.ts create mode 100644 src/auth/models/UsuarioFromJwt.ts create mode 100644 src/auth/strategies/jwt.strategy.ts diff --git a/src/app.controller.ts b/src/app.controller.ts index cce879e..ce36d52 100644 --- a/src/app.controller.ts +++ b/src/app.controller.ts @@ -1,5 +1,7 @@ import { Controller, Get } from '@nestjs/common'; import { AppService } from './app.service'; +import { CurrentUser } from './auth/decorators/current-user.decorator'; +import { Usuario } from './modules/usuarios/entities/usuario.entity'; @Controller() export class AppController { @@ -9,4 +11,9 @@ export class AppController { getHello(): string { return this.appService.getHello(); } + + @Get('me') + getMe(@CurrentUser() usuario: Usuario): Usuario { + return usuario; + } } diff --git a/src/app.module.ts b/src/app.module.ts index 291b713..b3d81ee 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -16,6 +16,8 @@ import { InsumosProdutosBaseModule } from './modules/insumos-produtos-base/insum import { VariantesModule } from './modules/variantes/variantes.module'; import { PrismaModule } from './prisma/prisma.module'; import { AuthModule } from './auth/auth.module'; +import { APP_GUARD } from '@nestjs/core'; +import { JwtAuthGuard } from './auth/guards/jwt-auth.guard'; @Module({ imports: [ @@ -36,6 +38,6 @@ import { AuthModule } from './auth/auth.module'; AuthModule, ], controllers: [AppController], - providers: [AppService], + providers: [AppService, { provide: APP_GUARD, useClass: JwtAuthGuard }], }) export class AppModule {} diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index 9219760..76313c7 100644 --- a/src/auth/auth.controller.ts +++ b/src/auth/auth.controller.ts @@ -9,16 +9,17 @@ import { import { AuthService } from './auth.service'; import { LocalAuthGuard } from './guards/local-auth.guard'; import { AuthRequest } from './models/AuthRequest'; +import { IsPublic } from './decorators/is-public.decorator'; @Controller() export class AuthController { constructor(private readonly authService: AuthService) {} + @IsPublic() @UseGuards(LocalAuthGuard) @Post('login') @HttpCode(HttpStatus.OK) async login(@Request() req: AuthRequest) { - console.log(req.user); return await this.authService.login(req.user); } } diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts index 819f9e4..9378f12 100644 --- a/src/auth/auth.module.ts +++ b/src/auth/auth.module.ts @@ -1,9 +1,11 @@ -import { Module } from '@nestjs/common'; +import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common'; import { AuthController } from './auth.controller'; import { AuthService } from './auth.service'; import { UsuariosModule } from 'src/modules/usuarios/usuarios.module'; import { LocalStrategy } from './strategies/local.strategy'; import { JwtModule } from '@nestjs/jwt/dist'; +import { JwtStrategy } from './strategies/jwt.strategy'; +import { LoginValidationMiddleware } from './middlewares/login-validation.middleware'; @Module({ imports: [ @@ -14,6 +16,10 @@ import { JwtModule } from '@nestjs/jwt/dist'; }), ], controllers: [AuthController], - providers: [AuthService, LocalStrategy], + providers: [AuthService, LocalStrategy, JwtStrategy], }) -export class AuthModule {} +export class AuthModule implements NestModule { + configure(consumer: MiddlewareConsumer) { + consumer.apply(LoginValidationMiddleware).forRoutes('login'); + } +} diff --git a/src/auth/decorators/current-user.decorator.ts b/src/auth/decorators/current-user.decorator.ts new file mode 100644 index 0000000..ae299e4 --- /dev/null +++ b/src/auth/decorators/current-user.decorator.ts @@ -0,0 +1,11 @@ +import { createParamDecorator, ExecutionContext } from '@nestjs/common'; +import { AuthRequest } from '../models/AuthRequest'; +import { Usuario } from 'src/modules/usuarios/entities/usuario.entity'; + +export const CurrentUser = createParamDecorator( + (data: unknown, context: ExecutionContext): Usuario => { + const request = context.switchToHttp().getRequest(); + + return request.user; + }, +); diff --git a/src/auth/decorators/is-public.decorator.ts b/src/auth/decorators/is-public.decorator.ts new file mode 100644 index 0000000..999f6f3 --- /dev/null +++ b/src/auth/decorators/is-public.decorator.ts @@ -0,0 +1,4 @@ +import { SetMetadata } from '@nestjs/common'; + +export const IS_PUBLIC_KEY = 'isPublic'; +export const IsPublic = () => SetMetadata(IS_PUBLIC_KEY, true); diff --git a/src/auth/guards/jwt-auth.guard.ts b/src/auth/guards/jwt-auth.guard.ts new file mode 100644 index 0000000..a905f82 --- /dev/null +++ b/src/auth/guards/jwt-auth.guard.ts @@ -0,0 +1,41 @@ +// NestJS +import { + ExecutionContext, + Injectable, + UnauthorizedException, +} from '@nestjs/common'; +import { Reflector } from '@nestjs/core'; +// Password +import { AuthGuard } from '@nestjs/passport'; +// Decorators +import { IS_PUBLIC_KEY } from '../decorators/is-public.decorator'; + +@Injectable() +export class JwtAuthGuard extends AuthGuard('jwt') { + constructor(private reflector: Reflector) { + super(); + } + + canActivate(context: ExecutionContext): Promise | boolean { + const isPublic = this.reflector.getAllAndOverride(IS_PUBLIC_KEY, [ + context.getHandler(), + context.getClass(), + ]); + + if (isPublic) { + return true; + } + + const canActivate = super.canActivate(context); + + if (typeof canActivate === 'boolean') { + return canActivate; + } + + const canActivatePromise = canActivate as Promise; + + return canActivatePromise.catch((error) => { + throw new UnauthorizedException(error.message); + }); + } +} diff --git a/src/auth/middlewares/login-validation.middleware.ts b/src/auth/middlewares/login-validation.middleware.ts new file mode 100644 index 0000000..125c491 --- /dev/null +++ b/src/auth/middlewares/login-validation.middleware.ts @@ -0,0 +1,31 @@ +import { + BadRequestException, + Injectable, + NestMiddleware, +} from '@nestjs/common'; +import { NextFunction, Request, Response } from 'express'; +import { LoginDto } from '../models/Login.dto'; +import { validate } from 'class-validator'; + +@Injectable() +export class LoginValidationMiddleware implements NestMiddleware { + async use(req: Request, res: Response, next: NextFunction) { + const body = req.body; + + const loginRequestBody = new LoginDto(); + loginRequestBody.email = body.email; + loginRequestBody.password = body.password; + + const validations = await validate(loginRequestBody); + + if (validations.length) { + throw new BadRequestException( + validations.reduce((acc, curr) => { + return [...acc, ...Object.values(curr.constraints)]; + }, []), + ); + } + + next(); + } +} diff --git a/src/auth/models/Login.dto.ts b/src/auth/models/Login.dto.ts new file mode 100644 index 0000000..1d3893d --- /dev/null +++ b/src/auth/models/Login.dto.ts @@ -0,0 +1,9 @@ +import { IsEmail, IsString } from 'class-validator'; + +export class LoginDto { + @IsEmail() + email: string; + + @IsString() + password: string; +} diff --git a/src/auth/models/UsuarioFromJwt.ts b/src/auth/models/UsuarioFromJwt.ts new file mode 100644 index 0000000..499f0de --- /dev/null +++ b/src/auth/models/UsuarioFromJwt.ts @@ -0,0 +1,5 @@ +export interface UsuarioFromJwt { + id: number; + email: string; + nome: string; +} diff --git a/src/auth/strategies/jwt.strategy.ts b/src/auth/strategies/jwt.strategy.ts new file mode 100644 index 0000000..3591f11 --- /dev/null +++ b/src/auth/strategies/jwt.strategy.ts @@ -0,0 +1,24 @@ +import { Injectable } from '@nestjs/common'; +import { PassportStrategy } from '@nestjs/passport'; +import { ExtractJwt, Strategy } from 'passport-jwt'; +import { UsuarioFromJwt } from '../models/UsuarioFromJwt'; +import { UsuarioPayload } from '../models/UsuarioPayload'; + +@Injectable() +export class JwtStrategy extends PassportStrategy(Strategy) { + constructor() { + super({ + jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), + ignoreExpiration: false, + secretOrKey: process.env.JWT_SECRET, + }); + } + + async validate(payload: UsuarioPayload): Promise { + return { + id: payload.sub, + email: payload.email, + nome: payload.nome, + }; + } +} diff --git a/src/modules/orcamentos/orcamentos.controller.ts b/src/modules/orcamentos/orcamentos.controller.ts index 473117a..a5d694f 100644 --- a/src/modules/orcamentos/orcamentos.controller.ts +++ b/src/modules/orcamentos/orcamentos.controller.ts @@ -11,15 +11,20 @@ import { Query, Res, Header, + Request, } from '@nestjs/common'; import { OrcamentosService } from './orcamentos.service'; import { CreateOrcamentoDto } from './dto/create-orcamento.dto'; import { UpdateOrcamentoDto } from './dto/update-orcamento.dto'; import { ApiTags } from '@nestjs/swagger'; +import { AuthRequest } from 'src/auth/models/AuthRequest'; +import { Usuario } from '../usuarios/entities/usuario.entity'; +import { CurrentUser } from 'src/auth/decorators/current-user.decorator'; + @ApiTags('orcamentos') @Controller('orcamentos') export class OrcamentosController { - constructor(private readonly orcamentosService: OrcamentosService) { } + constructor(private readonly orcamentosService: OrcamentosService) {} @Get('count') async countAll() { @@ -49,8 +54,11 @@ export class OrcamentosController { } @Post() - async create(@Body() createOrcamentoDto: CreateOrcamentoDto) { - return await this.orcamentosService.create(createOrcamentoDto); + async create( + @CurrentUser() usuario: Usuario, + @Body() createOrcamentoDto: CreateOrcamentoDto, + ) { + return await this.orcamentosService.create(createOrcamentoDto, usuario); } @Get('full/:id') diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index 626c1d6..c5f60dc 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -4,6 +4,7 @@ import { UpdateOrcamentoDto } from './dto/update-orcamento.dto'; import { PrismaService } from 'src/databases/prisma.service'; import { ProdutosService } from '../produtos/produtos.service'; import { Orcamento } from './entities/orcamento.entity'; +import { Usuario } from '../usuarios/entities/usuario.entity'; @Injectable() export class OrcamentosService { @@ -62,15 +63,16 @@ export class OrcamentosService { orcamentos = await this.prismaService.orcamento.findMany({ skip, take: perPage, - where:{ + where: { pedido: null, - } + }, }); } return orcamentos; } - async create(createOrcamentoDto: CreateOrcamentoDto) { + async create(createOrcamentoDto: CreateOrcamentoDto, usuario: Usuario) { + console.log(usuario); const clienteExists = await this.findCliente(createOrcamentoDto.idCliente); if (clienteExists) { return await this.prismaService.orcamento.create({ @@ -83,16 +85,16 @@ export class OrcamentosService { async findAllconcluded() { const orcamentos = await this.prismaService.orcamento.findMany({ where: { - status: "Concluido", + status: 'Concluido', pedido: null, }, - include:{cliente:true} + include: { cliente: true }, }); - + if (orcamentos.length > 0) { return orcamentos; } - + return { data: { message: 'Não há orçamentos concluídos sem pedidos' } }; } diff --git a/src/modules/usuarios/usuarios.controller.ts b/src/modules/usuarios/usuarios.controller.ts index 402585d..57a9d58 100644 --- a/src/modules/usuarios/usuarios.controller.ts +++ b/src/modules/usuarios/usuarios.controller.ts @@ -16,6 +16,8 @@ import { UsuariosService } from './usuarios.service'; import { CreateUsuarioDto } from './dto/create-usuario.dto'; import { UpdateUsuarioDto } from './dto/update-usuario.dto'; import { ApiTags } from '@nestjs/swagger'; +import { CurrentUser } from 'src/auth/decorators/current-user.decorator'; +import { Usuario } from './entities/usuario.entity'; @ApiTags('usuarios') @Controller('usuarios') @@ -27,7 +29,6 @@ export class UsuariosController { return await this.usuariosService.countAll(); } - @UsePipes(ValidationPipe) @Post() async create(@Body() createUsuarioDto: CreateUsuarioDto) { return await this.usuariosService.create(createUsuarioDto); @@ -36,17 +37,26 @@ export class UsuariosController { @Get() @Header('Access-Control-Allow-Origin', '*') @Header('Access-Control-Expose-Headers', 'X-Total-Count') - async findAll(@Query('page') page: number,@Query('perPage') perPage: number,@Query('titulo_like') titulo_like : string, @Res({ passthrough: true }) res) { - page = page||1; - perPage = perPage|| await this.countAll(); + async findAll( + @CurrentUser() usuario: Usuario, + @Query('page') page: number, + @Query('perPage') perPage: number, + @Query('titulo_like') titulo_like: string, + @Res({ passthrough: true }) res, + ) { + if (usuario.tipoUsuario !== 'Administrador') { + return { data: { message: 'Não autorizado' } }; + } + page = page || 1; + perPage = perPage || (await this.countAll()); const usuarios = await this.usuariosService.findAllWithPagination( page, Number(perPage), - titulo_like + titulo_like, ); - const total = await this.usuariosService.countAll(); - res.header('x-total-count',total); - return await usuarios + const total = await this.usuariosService.countAll(); + res.header('x-total-count', total); + return await usuarios; } @Get(':id') @@ -54,9 +64,11 @@ export class UsuariosController { return await this.usuariosService.findOne(+id); } - @UsePipes(ValidationPipe) @Patch(':id') - async update(@Param('id') id: string, @Body() updateUsuarioDto: UpdateUsuarioDto) { + async update( + @Param('id') id: string, + @Body() updateUsuarioDto: UpdateUsuarioDto, + ) { return await this.usuariosService.update(+id, updateUsuarioDto); } From 69485ebb3d03c1b1cf14fe3dddd4ae3f08447a22 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Mon, 13 Nov 2023 00:57:42 -0300 Subject: [PATCH 091/115] Update seed.ts --- prisma/seed.ts | 47 +++++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/prisma/seed.ts b/prisma/seed.ts index caa10ae..b9019fc 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -1,23 +1,35 @@ import { PrismaClient } from '@prisma/client'; import { faker } from '@faker-js/faker'; +import { UsuariosService } from '../src/modules/usuarios/usuarios.service'; +import { PrismaService } from '../src/databases/prisma.service'; const prisma = new PrismaClient(); async function seedDatabase() { + const prismaService = new PrismaService(); + const usuarioService = new UsuariosService(prismaService); + + await usuarioService.create({ + tipoUsuario: 'Administrador', + nome: 'Admin', + cpf: '99999999999', + email: 'admin@admin.com', + telefone: '1511111111', + senha: 'admin', + }); + for (let i = 0; i < 10; i++) { - await prisma.usuario.create({ - data: { - tipoUsuario: faker.helpers.arrayElement([ - 'Serralheiro', - 'Administrador', - 'Vendedor', - ]), - nome: faker.person.firstName(), - cpf: faker.string.numeric({ length: 11 }), - email: faker.internet.email(), - telefone: faker.phone.number(), - senha: faker.internet.password(), - }, + await usuarioService.create({ + tipoUsuario: faker.helpers.arrayElement([ + 'Serralheiro', + 'Administrador', + 'Vendedor', + ]), + nome: faker.person.firstName(), + cpf: faker.string.numeric({ length: 11 }), + email: faker.internet.email(), + telefone: faker.phone.number(), + senha: faker.internet.password(), }); } @@ -39,7 +51,7 @@ async function seedDatabase() { await prisma.insumo.create({ data: { titulo: faker.commerce.productName(), - + idCategoria: faker.number.int({ min: 1, max: 10 }), }, }); @@ -105,7 +117,7 @@ async function seedDatabase() { totalMateriais: faker.number.float(), status: faker.helpers.arrayElement([ 'Pendente', - + 'Em_Processo', 'Concluido', ]), @@ -150,7 +162,7 @@ async function seedDatabase() { data: { data: faker.date.past(), valor: faker.number.float(), - + idFornecedor: faker.number.int({ min: 1, max: 10 }), // Gere um ID de fornecedor aleatório idVariante: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório }, @@ -164,7 +176,7 @@ async function seedDatabase() { idProduto: faker.number.int({ min: 1, max: 20 }), // Gere um ID de produto aleatório idVariante: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório idCotacao: faker.number.int({ min: 1, max: 10 }), // Gere um ID de cotação aleatório - + valorUnitario: faker.number.float(), }, }); @@ -185,7 +197,6 @@ async function seedDatabase() { quantidade: faker.number.float(), idProdutoBase: faker.number.int({ min: 1, max: 10 }), // Gere um ID de produto base aleatório idVariante: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório - }, }); } From 5c08c07ac6f69e6748fa0e4f87fbf5b05f656b03 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Mon, 13 Nov 2023 01:38:12 -0300 Subject: [PATCH 092/115] Seed e Dto --- prisma/seed.ts | 20 ++++++++++++++----- .../usuarios/dto/create-usuario.dto.ts | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/prisma/seed.ts b/prisma/seed.ts index b9019fc..e8bbd3d 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -2,14 +2,24 @@ import { PrismaClient } from '@prisma/client'; import { faker } from '@faker-js/faker'; import { UsuariosService } from '../src/modules/usuarios/usuarios.service'; import { PrismaService } from '../src/databases/prisma.service'; +import { CreateUsuarioDto } from 'src/modules/usuarios/dto/create-usuario.dto'; +import * as bcrypt from 'bcrypt'; const prisma = new PrismaClient(); async function seedDatabase() { - const prismaService = new PrismaService(); - const usuarioService = new UsuariosService(prismaService); - - await usuarioService.create({ + const createUser = async (createUsuarioDto: CreateUsuarioDto) => { + if (true) { + createUsuarioDto.senha = await bcrypt.hash(createUsuarioDto.senha, 10); + const usuario = await prisma.usuario.create({ + data: createUsuarioDto, + }); + usuario.senha = undefined; + return usuario; + } + }; + + await createUser({ tipoUsuario: 'Administrador', nome: 'Admin', cpf: '99999999999', @@ -19,7 +29,7 @@ async function seedDatabase() { }); for (let i = 0; i < 10; i++) { - await usuarioService.create({ + await createUser({ tipoUsuario: faker.helpers.arrayElement([ 'Serralheiro', 'Administrador', diff --git a/src/modules/usuarios/dto/create-usuario.dto.ts b/src/modules/usuarios/dto/create-usuario.dto.ts index 2275dcc..9a7521e 100644 --- a/src/modules/usuarios/dto/create-usuario.dto.ts +++ b/src/modules/usuarios/dto/create-usuario.dto.ts @@ -13,7 +13,7 @@ import { } from 'class-validator'; import { Usuario } from '../entities/usuario.entity'; -export class CreateUsuarioDto extends Usuario { +export class CreateUsuarioDto { @IsNotEmpty({ message: 'O tipo do usuário não poder estar vazio' }) @IsEnum(tipoUsuario, { message: 'O tipo de usuário inserido não é válido' }) tipoUsuario: tipoUsuario; From f26787744b0fb63df4bb9a5b4998de0338d37e73 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Mon, 13 Nov 2023 22:27:22 -0300 Subject: [PATCH 093/115] =?UTF-8?q?Autentica=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> --- src/auth/auth.service.ts | 2 +- src/auth/models/UsuarioToken.ts | 2 +- .../usuarios/dto/changePassword.dto.ts | 26 +++++++++++++++++++ src/modules/usuarios/usuarios.controller.ts | 11 +++++++- src/modules/usuarios/usuarios.service.ts | 21 +++++++++++++++ 5 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 src/modules/usuarios/dto/changePassword.dto.ts diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 1d02fe2..b71d5ed 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -22,7 +22,7 @@ export class AuthService { const jwtToken = this.jwtService.sign(payload); - return { access_token: jwtToken }; + return { accessToken: jwtToken }; } async validateUser( diff --git a/src/auth/models/UsuarioToken.ts b/src/auth/models/UsuarioToken.ts index 2f640d3..73f6571 100644 --- a/src/auth/models/UsuarioToken.ts +++ b/src/auth/models/UsuarioToken.ts @@ -1,3 +1,3 @@ export interface UsuarioToken { - access_token: string; + accessToken: string; } diff --git a/src/modules/usuarios/dto/changePassword.dto.ts b/src/modules/usuarios/dto/changePassword.dto.ts new file mode 100644 index 0000000..296e378 --- /dev/null +++ b/src/modules/usuarios/dto/changePassword.dto.ts @@ -0,0 +1,26 @@ +import { + IsString, + MinLength, + MaxLength, + Matches, + Equals, + ValidateIf, + IsEmpty, +} from 'class-validator'; + +export class ChangePasswordDto { + @IsString() + @MinLength(4) + @MaxLength(20) + @Matches(/((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/, { + message: 'A senha é muito fraca', + }) + password: string; + + @IsString() + @ValidateIf((dto, conf) => conf !== dto.password) + @IsEmpty({ + message: 'As senhas não coincidem', + }) + confpassword: string; +} diff --git a/src/modules/usuarios/usuarios.controller.ts b/src/modules/usuarios/usuarios.controller.ts index 57a9d58..b566f4b 100644 --- a/src/modules/usuarios/usuarios.controller.ts +++ b/src/modules/usuarios/usuarios.controller.ts @@ -18,6 +18,7 @@ import { UpdateUsuarioDto } from './dto/update-usuario.dto'; import { ApiTags } from '@nestjs/swagger'; import { CurrentUser } from 'src/auth/decorators/current-user.decorator'; import { Usuario } from './entities/usuario.entity'; +import { ChangePasswordDto } from './dto/changePassword.dto'; @ApiTags('usuarios') @Controller('usuarios') @@ -34,6 +35,14 @@ export class UsuariosController { return await this.usuariosService.create(createUsuarioDto); } + @Post(':id') + async changePassword( + @Param('id') id: string, + @Body() changePassword: ChangePasswordDto, + ) { + return await this.usuariosService.changePassword(+id, changePassword); + } + @Get() @Header('Access-Control-Allow-Origin', '*') @Header('Access-Control-Expose-Headers', 'X-Total-Count') @@ -45,7 +54,7 @@ export class UsuariosController { @Res({ passthrough: true }) res, ) { if (usuario.tipoUsuario !== 'Administrador') { - return { data: { message: 'Não autorizado' } }; + return await this.usuariosService.findManyByEmail(usuario.email); } page = page || 1; perPage = perPage || (await this.countAll()); diff --git a/src/modules/usuarios/usuarios.service.ts b/src/modules/usuarios/usuarios.service.ts index b63a96e..ac2152d 100644 --- a/src/modules/usuarios/usuarios.service.ts +++ b/src/modules/usuarios/usuarios.service.ts @@ -5,6 +5,7 @@ import { Usuario } from './entities/usuario.entity'; import * as bcrypt from 'bcrypt'; import { PrismaService } from 'src/prisma/prisma.service'; +import { ChangePasswordDto } from './dto/changePassword.dto'; @Injectable() export class UsuariosService { @@ -57,6 +58,26 @@ export class UsuariosService { return usuario; } + async changePassword(id: number, changePasswordDto: ChangePasswordDto) { + console.log(id); + const pass = await bcrypt.hash(changePasswordDto.password, 10); + + const usuario = await this.prismaService.usuario.update({ + where: { id }, + data: { + senha: pass, + }, + }); + return usuario; + } + + async findManyByEmail(email: string) { + const usuarios = await this.prismaService.usuario.findMany({ + where: { email }, + }); + return usuarios; + } + async countAll() { return await this.prismaService.usuario.count(); } From a3d00723417b35b4331a7362f1eeb7e2e4a17659 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Mon, 13 Nov 2023 23:13:13 -0300 Subject: [PATCH 094/115] Alterar Senha Co-Authored-By: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> --- src/modules/usuarios/usuarios.controller.ts | 1 + src/modules/usuarios/usuarios.service.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/modules/usuarios/usuarios.controller.ts b/src/modules/usuarios/usuarios.controller.ts index b566f4b..dda4e5d 100644 --- a/src/modules/usuarios/usuarios.controller.ts +++ b/src/modules/usuarios/usuarios.controller.ts @@ -40,6 +40,7 @@ export class UsuariosController { @Param('id') id: string, @Body() changePassword: ChangePasswordDto, ) { + console.log(changePassword) return await this.usuariosService.changePassword(+id, changePassword); } diff --git a/src/modules/usuarios/usuarios.service.ts b/src/modules/usuarios/usuarios.service.ts index ac2152d..1d6e1c7 100644 --- a/src/modules/usuarios/usuarios.service.ts +++ b/src/modules/usuarios/usuarios.service.ts @@ -59,7 +59,7 @@ export class UsuariosService { } async changePassword(id: number, changePasswordDto: ChangePasswordDto) { - console.log(id); + const pass = await bcrypt.hash(changePasswordDto.password, 10); const usuario = await this.prismaService.usuario.update({ From bd213c1b152a60b5132bea3795cfc3d9bdcb6bf6 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Tue, 14 Nov 2023 23:39:28 -0300 Subject: [PATCH 095/115] =?UTF-8?q?corre=C3=A7=C3=A3o=20variante?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/seed.ts | 2 +- src/modules/usuarios/usuarios.controller.ts | 6 +++++- src/modules/variantes/dto/create-variante.dto.ts | 12 +++++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/prisma/seed.ts b/prisma/seed.ts index e8bbd3d..54fb828 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -118,7 +118,7 @@ async function seedDatabase() { }); } - for (let i = 0; i < 10; i++) { + for (let i = 0; i < 30; i++) { await prisma.orcamento.create({ data: { validade: faker.date.future(), diff --git a/src/modules/usuarios/usuarios.controller.ts b/src/modules/usuarios/usuarios.controller.ts index dda4e5d..958e2eb 100644 --- a/src/modules/usuarios/usuarios.controller.ts +++ b/src/modules/usuarios/usuarios.controller.ts @@ -54,7 +54,11 @@ export class UsuariosController { @Query('titulo_like') titulo_like: string, @Res({ passthrough: true }) res, ) { - if (usuario.tipoUsuario !== 'Administrador') { + + + const user:Usuario = await this.findOne(""+usuario.id) + + if (user.tipoUsuario != "Administrador") { return await this.usuariosService.findManyByEmail(usuario.email); } page = page || 1; diff --git a/src/modules/variantes/dto/create-variante.dto.ts b/src/modules/variantes/dto/create-variante.dto.ts index 5550e0f..e5c04eb 100644 --- a/src/modules/variantes/dto/create-variante.dto.ts +++ b/src/modules/variantes/dto/create-variante.dto.ts @@ -1,4 +1,14 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsNumber, isNumber, IsOptional, IsString, Matches, ValidateIf } from 'class-validator'; + export class CreateVarianteDto { - variante: string; + + + @IsNumber({}, { message: 'A categoria inserida não é válida' }) idInsumo: number; + + @IsNotEmpty({ message: 'O titulo não pode estar vazio' }) + @IsString({ message: 'O titulo inserido não é válido' }) + variante: string; + } From e6cbb32f038a15611fdc3b2d5dbb8f5e52d7fccb Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Wed, 15 Nov 2023 12:01:57 -0300 Subject: [PATCH 096/115] Update seed.ts --- prisma/seed.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/prisma/seed.ts b/prisma/seed.ts index 54fb828..680fd88 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -155,19 +155,19 @@ async function seedDatabase() { }); } - for (let i = 0; i < 20; i++) { + for (let i = 0; i < 50; i++) { await prisma.produto.create({ data: { titulo: faker.commerce.productName(), quantidade: faker.number.int({ min: 1, max: 10 }), valorUnitario: faker.number.float(), observacoes: faker.lorem.sentence(), - idOrcamento: faker.number.int({ min: 1, max: 10 }), // Gere um ID de orçamento aleatório + idOrcamento: faker.number.int({ min: 1, max: 30 }), // Gere um ID de orçamento aleatório }, }); } - for (let i = 0; i < 10; i++) { + for (let i = 0; i < 20; i++) { await prisma.cotacao.create({ data: { data: faker.date.past(), @@ -179,7 +179,7 @@ async function seedDatabase() { }); } - for (let i = 0; i < 20; i++) { + for (let i = 0; i < 40; i++) { await prisma.listaInsumo.create({ data: { quantidade: faker.number.int(), @@ -192,7 +192,7 @@ async function seedDatabase() { }); } - for (let i = 0; i < 10; i++) { + for (let i = 0; i < 20; i++) { await prisma.produtoBase.create({ data: { titulo: faker.commerce.productName(), @@ -201,7 +201,7 @@ async function seedDatabase() { }); } - for (let i = 0; i < 20; i++) { + for (let i = 0; i < 40; i++) { await prisma.insumoProdutoBase.create({ data: { quantidade: faker.number.float(), From f6cbbdcb80ea4d364d990e62928c51ad047815fb Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:21:41 -0300 Subject: [PATCH 097/115] =?UTF-8?q?Valores=20Altera=C3=A7=C3=B5es=20corre?= =?UTF-8?q?=C3=A7=C3=B5es=20e=20outros?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 31 ++++++------- src/app.module.ts | 6 +-- src/databases/prisma.service.ts | 9 ---- src/modules/categorias/categorias.module.ts | 5 ++- src/modules/clientes/clientes.module.ts | 5 ++- src/modules/cotacoes/cotacoes.module.ts | 6 ++- .../fornecedores/fornecedores.module.ts | 5 ++- .../insumos-produtos-base.module.ts | 5 ++- src/modules/insumos/insumos.module.ts | 5 ++- src/modules/insumos/insumos.service.ts | 2 +- .../lista-insumos/lista-insumos.module.ts | 8 ++-- .../lista-insumos/lista-insumos.service.ts | 8 +++- .../orcamentos/orcamentos.controller.ts | 2 + src/modules/orcamentos/orcamentos.module.ts | 19 +++++--- src/modules/orcamentos/orcamentos.service.ts | 17 +++++++ src/modules/pedidos/dto/update-pedido.dto.ts | 2 + src/modules/pedidos/pedidos.module.ts | 5 ++- .../produtos-base/produtos-base.module.ts | 6 ++- .../produtos/dto/create-produto.dto.ts | 5 +++ .../produtos/dto/update-produto.dto.ts | 11 ++++- .../produtos/entities/produto.entity.ts | 2 + src/modules/produtos/produtos.controller.ts | 5 +++ src/modules/produtos/produtos.module.ts | 19 +++++--- src/modules/produtos/produtos.service.ts | 44 ++++++++++++++++++- src/modules/usuarios/usuarios.controller.ts | 2 +- src/modules/variantes/variantes.controller.ts | 2 +- src/modules/variantes/variantes.module.ts | 5 ++- 27 files changed, 171 insertions(+), 70 deletions(-) delete mode 100644 src/databases/prisma.service.ts diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 13b6d01..2938b68 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -116,16 +116,18 @@ model Pedido { } model Produto { - id Int @id @default(autoincrement()) - titulo String - quantidade Float - valorUnitario Float? - observacoes String? - listaInsumos ListaInsumo[] - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - Orcamento Orcamento @relation(fields: [idOrcamento], references: [id]) - idOrcamento Int + id Int @id @default(autoincrement()) + titulo String + quantidade Float + valorUnitario Float? + observacoes String? + valorMaterial Float @default(0) + valorMaoDeObra Float @default(0) + listaInsumos ListaInsumo[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + Orcamento Orcamento @relation(fields: [idOrcamento], references: [id]) + idOrcamento Int @@map("Produtos") } @@ -133,8 +135,7 @@ model Produto { model Cotacao { id Int @id @default(autoincrement()) data DateTime - valor Float - + valor Float idFornecedor Int idVariante Int obsoleta Boolean? @default(false) @@ -221,12 +222,6 @@ enum contaTipo { Fisica Juridica } - -enum produtoTipo { - Base - Customizado -} - enum status { Pendente Em_Processo @map("Em Processo") diff --git a/src/app.module.ts b/src/app.module.ts index b3d81ee..d8ebaf0 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -27,14 +27,14 @@ import { JwtAuthGuard } from './auth/guards/jwt-auth.guard'; ClientesModule, OrcamentosModule, PedidosModule, - ProdutosModule, CotacoesModule, ListaInsumosModule, UsuariosModule, - ProdutosBaseModule, - InsumosProdutosBaseModule, VariantesModule, PrismaModule, + ProdutosModule, + ProdutosBaseModule, + InsumosProdutosBaseModule, AuthModule, ], controllers: [AppController], diff --git a/src/databases/prisma.service.ts b/src/databases/prisma.service.ts deleted file mode 100644 index bfbae30..0000000 --- a/src/databases/prisma.service.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Injectable, OnModuleInit } from "@nestjs/common"; -import { PrismaClient } from "@prisma/client"; - -@Injectable() -export class PrismaService extends PrismaClient implements OnModuleInit { - async onModuleInit() { - await this.$connect(); - } -} \ No newline at end of file diff --git a/src/modules/categorias/categorias.module.ts b/src/modules/categorias/categorias.module.ts index b6a6ce1..fc49e75 100644 --- a/src/modules/categorias/categorias.module.ts +++ b/src/modules/categorias/categorias.module.ts @@ -1,10 +1,11 @@ import { Module } from '@nestjs/common'; import { CategoriasService } from './categorias.service'; import { CategoriasController } from './categorias.controller'; -import { PrismaService } from '../../databases/prisma.service'; +import { PrismaModule } from 'src/prisma/prisma.module'; @Module({ + imports:[PrismaModule], controllers: [CategoriasController], - providers: [CategoriasService, PrismaService], + providers: [CategoriasService], }) export class CategoriasModule {} diff --git a/src/modules/clientes/clientes.module.ts b/src/modules/clientes/clientes.module.ts index 651bab2..b214724 100644 --- a/src/modules/clientes/clientes.module.ts +++ b/src/modules/clientes/clientes.module.ts @@ -1,10 +1,11 @@ import { Module } from '@nestjs/common'; import { ClientesService } from './clientes.service'; import { ClientesController } from './clientes.controller'; -import { PrismaService } from '../../databases/prisma.service'; +import { PrismaModule } from 'src/prisma/prisma.module'; @Module({ + imports: [PrismaModule], controllers: [ClientesController], - providers: [ClientesService,PrismaService], + providers: [ClientesService], }) export class ClientesModule {} diff --git a/src/modules/cotacoes/cotacoes.module.ts b/src/modules/cotacoes/cotacoes.module.ts index d23e4b3..bf04927 100644 --- a/src/modules/cotacoes/cotacoes.module.ts +++ b/src/modules/cotacoes/cotacoes.module.ts @@ -1,10 +1,12 @@ import { Module } from '@nestjs/common'; import { CotacoesService } from './cotacoes.service'; import { CotacoesController } from './cotacoes.controller'; -import { PrismaService } from 'src/databases/prisma.service'; +import { PrismaModule } from 'src/prisma/prisma.module'; @Module({ + imports: [PrismaModule], controllers: [CotacoesController], - providers: [CotacoesService, PrismaService], + providers: [CotacoesService], + exports: [CotacoesService], }) export class CotacoesModule {} diff --git a/src/modules/fornecedores/fornecedores.module.ts b/src/modules/fornecedores/fornecedores.module.ts index 917d9ea..8fafe5b 100644 --- a/src/modules/fornecedores/fornecedores.module.ts +++ b/src/modules/fornecedores/fornecedores.module.ts @@ -1,10 +1,11 @@ import { Module } from '@nestjs/common'; import { FornecedoresService } from './fornecedores.service'; import { FornecedoresController } from './fornecedores.controller'; -import { PrismaService } from 'src/databases/prisma.service'; +import { PrismaModule } from 'src/prisma/prisma.module'; @Module({ + imports: [PrismaModule], controllers: [FornecedoresController], - providers: [FornecedoresService, PrismaService], + providers: [FornecedoresService], }) export class FornecedoresModule {} diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.module.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.module.ts index 2e03964..068b6c7 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.module.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.module.ts @@ -1,10 +1,11 @@ import { Module } from '@nestjs/common'; import { InsumosProdutosBaseService } from './insumos-produtos-base.service'; import { InsumosProdutosBaseController } from './insumos-produtos-base.controller'; -import { PrismaService } from '../../databases/prisma.service'; +import { PrismaModule } from 'src/prisma/prisma.module'; @Module({ + imports: [PrismaModule], controllers: [InsumosProdutosBaseController], - providers: [InsumosProdutosBaseService,PrismaService], + providers: [InsumosProdutosBaseService], }) export class InsumosProdutosBaseModule {} diff --git a/src/modules/insumos/insumos.module.ts b/src/modules/insumos/insumos.module.ts index 8b47f18..b4fffaf 100644 --- a/src/modules/insumos/insumos.module.ts +++ b/src/modules/insumos/insumos.module.ts @@ -1,10 +1,11 @@ import { Module } from '@nestjs/common'; import { InsumosService } from './insumos.service'; import { InsumosController } from './insumos.controller'; -import { PrismaService } from 'src/databases/prisma.service'; +import { PrismaModule } from 'src/prisma/prisma.module'; @Module({ + imports: [PrismaModule], controllers: [InsumosController], - providers: [InsumosService, PrismaService], + providers: [InsumosService], }) export class InsumosModule {} diff --git a/src/modules/insumos/insumos.service.ts b/src/modules/insumos/insumos.service.ts index 23dbfe8..4e2c23e 100644 --- a/src/modules/insumos/insumos.service.ts +++ b/src/modules/insumos/insumos.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { CreateInsumoDto } from './dto/create-insumo.dto'; import { UpdateInsumoDto } from './dto/update-insumo.dto'; -import { PrismaService } from 'src/databases/prisma.service'; +import { PrismaService } from 'src/prisma/prisma.service'; import { Insumo } from './entities/insumo.entity'; @Injectable() diff --git a/src/modules/lista-insumos/lista-insumos.module.ts b/src/modules/lista-insumos/lista-insumos.module.ts index d35bf2d..b8a0441 100644 --- a/src/modules/lista-insumos/lista-insumos.module.ts +++ b/src/modules/lista-insumos/lista-insumos.module.ts @@ -1,11 +1,13 @@ import { Module } from '@nestjs/common'; import { ListaInsumosService } from './lista-insumos.service'; import { ListaInsumosController } from './lista-insumos.controller'; -import { PrismaService } from 'src/databases/prisma.service'; -import { CotacoesService } from '../cotacoes/cotacoes.service'; +import { ProdutosModule } from '../produtos/produtos.module'; +import { CotacoesModule } from '../cotacoes/cotacoes.module'; +import { PrismaModule } from 'src/prisma/prisma.module'; @Module({ + imports: [PrismaModule, ProdutosModule, CotacoesModule], controllers: [ListaInsumosController], - providers: [ListaInsumosService,CotacoesService, PrismaService], + providers: [ListaInsumosService], }) export class ListaInsumosModule {} diff --git a/src/modules/lista-insumos/lista-insumos.service.ts b/src/modules/lista-insumos/lista-insumos.service.ts index 57bf2da..142e926 100644 --- a/src/modules/lista-insumos/lista-insumos.service.ts +++ b/src/modules/lista-insumos/lista-insumos.service.ts @@ -4,12 +4,15 @@ import { UpdateListaInsumoDto } from './dto/update-lista-insumo.dto'; import { PrismaService } from 'src/databases/prisma.service'; import { CotacoesService } from '../cotacoes/cotacoes.service'; import { ListaInsumo } from './entities/lista-insumo.entity'; +import { ProdutosService } from '../produtos/produtos.service'; @Injectable() export class ListaInsumosService { constructor( private readonly prismaService: PrismaService, + private readonly produtosServices: ProdutosService, private readonly cotacaoServices: CotacoesService, + ) {} async findAllWithPagination( @@ -148,6 +151,9 @@ export class ListaInsumosService { listaInsumoExists.idCotacao = cotacao.id; - return await this.update(listaInsumoExists.id, listaInsumoExists); + const salvo = await this.update(listaInsumoExists.id, listaInsumoExists); + + this.produtosServices.recalcularValor(listaInsumoExists.idProduto); + return salvo; } } diff --git a/src/modules/orcamentos/orcamentos.controller.ts b/src/modules/orcamentos/orcamentos.controller.ts index 38fd2d5..5ed56dd 100644 --- a/src/modules/orcamentos/orcamentos.controller.ts +++ b/src/modules/orcamentos/orcamentos.controller.ts @@ -88,4 +88,6 @@ export class OrcamentosController { async remove(@Param('id') id: string) { return await this.orcamentosService.remove(+id); } + + } diff --git a/src/modules/orcamentos/orcamentos.module.ts b/src/modules/orcamentos/orcamentos.module.ts index 7fbe11f..8caf330 100644 --- a/src/modules/orcamentos/orcamentos.module.ts +++ b/src/modules/orcamentos/orcamentos.module.ts @@ -1,13 +1,20 @@ -import { Module } from '@nestjs/common'; +import { Module, forwardRef } from '@nestjs/common'; import { OrcamentosService } from './orcamentos.service'; import { OrcamentosController } from './orcamentos.controller'; -import { PrismaService } from 'src/databases/prisma.service'; -import { ProdutosService } from '../produtos/produtos.service'; -import { ProdutosBaseService } from '../produtos-base/produtos-base.service'; -import { InsumosProdutosBaseService } from '../insumos-produtos-base/insumos-produtos-base.service'; +import { PrismaModule } from 'src/prisma/prisma.module'; +import { ProdutosModule } from '../produtos/produtos.module'; +import { ProdutosBaseModule } from '../produtos-base/produtos-base.module'; +import { InsumosProdutosBaseModule } from '../insumos-produtos-base/insumos-produtos-base.module'; @Module({ + imports: [ + PrismaModule, + forwardRef(() => ProdutosModule), + ProdutosBaseModule, + InsumosProdutosBaseModule, + ], controllers: [OrcamentosController], - providers: [OrcamentosService, PrismaService, ProdutosService, ProdutosBaseService, InsumosProdutosBaseService], + providers: [OrcamentosService], + exports: [OrcamentosService], }) export class OrcamentosModule {} diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index c5f60dc..9cba077 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -153,4 +153,21 @@ export class OrcamentosService { } return { data: { message: 'Orçamento não existe' } }; } + + + async recalcular(id: number){ + + const produtos = await this.produtoService.findProdutoOrc(id); + + const valorTotalMaterial = produtos.reduce( + (total, produto) => total + produto.valorMaterial * produto.quantidade, + 0 + ) + const valorTotalMaoDeObra = produtos.reduce( + (total, produto) => total + produto.valorMaoDeObra * produto.quantidade, + 0 + ) + this.update(id,{totalMateriais:valorTotalMaterial,totalMaoObra:valorTotalMaoDeObra}) + + } } diff --git a/src/modules/pedidos/dto/update-pedido.dto.ts b/src/modules/pedidos/dto/update-pedido.dto.ts index 6179b7b..fc80c8a 100644 --- a/src/modules/pedidos/dto/update-pedido.dto.ts +++ b/src/modules/pedidos/dto/update-pedido.dto.ts @@ -29,4 +29,6 @@ export class UpdatePedidoDto extends PartialType(CreatePedidoDto) { @IsNotEmpty({ message: 'O orçamento não pode estar vazio' }) @IsNumber({}, { message: 'O orçamento inserido não é válido' }) idOrcamento: number; + + } diff --git a/src/modules/pedidos/pedidos.module.ts b/src/modules/pedidos/pedidos.module.ts index a851cf0..c13004b 100644 --- a/src/modules/pedidos/pedidos.module.ts +++ b/src/modules/pedidos/pedidos.module.ts @@ -1,10 +1,11 @@ import { Module } from '@nestjs/common'; import { PedidosService } from './pedidos.service'; import { PedidosController } from './pedidos.controller'; -import { PrismaService } from '../../databases/prisma.service'; +import { PrismaModule } from 'src/prisma/prisma.module'; @Module({ + imports: [PrismaModule], controllers: [PedidosController], - providers: [PedidosService,PrismaService], + providers: [PedidosService], }) export class PedidosModule {} diff --git a/src/modules/produtos-base/produtos-base.module.ts b/src/modules/produtos-base/produtos-base.module.ts index 8c39199..f27ff17 100644 --- a/src/modules/produtos-base/produtos-base.module.ts +++ b/src/modules/produtos-base/produtos-base.module.ts @@ -1,10 +1,12 @@ import { Module } from '@nestjs/common'; import { ProdutosBaseService } from './produtos-base.service'; import { ProdutosBaseController } from './produtos-base.controller'; -import { PrismaService } from 'src/databases/prisma.service'; +import { PrismaModule } from 'src/prisma/prisma.module'; @Module({ + imports: [PrismaModule], controllers: [ProdutosBaseController], - providers: [ProdutosBaseService, PrismaService], + providers: [ProdutosBaseService], + exports: [ProdutosBaseService], }) export class ProdutosBaseModule {} diff --git a/src/modules/produtos/dto/create-produto.dto.ts b/src/modules/produtos/dto/create-produto.dto.ts index df03023..44ea743 100644 --- a/src/modules/produtos/dto/create-produto.dto.ts +++ b/src/modules/produtos/dto/create-produto.dto.ts @@ -45,4 +45,9 @@ export class CreateProdutoDto { @IsNotEmpty({ message: 'O orçamento não pode estar vazio' }) @IsNumber({}, { message: 'O orçamento inserido não é válido' }) idOrcamento: number; + + + + valorMaterial?: number; + valorMaoDeObra?: number; } diff --git a/src/modules/produtos/dto/update-produto.dto.ts b/src/modules/produtos/dto/update-produto.dto.ts index 7fd0c24..78c7538 100644 --- a/src/modules/produtos/dto/update-produto.dto.ts +++ b/src/modules/produtos/dto/update-produto.dto.ts @@ -19,7 +19,7 @@ export class UpdateProdutoDto extends PartialType(CreateProdutoDto) { }) @IsNotEmpty({ message: 'Informe a Quantidade' }) @IsNumber({}, { message: 'A quantidade inserida não é válida' }) - quantidade: number; + quantidade?: number; @ApiProperty({ description: @@ -46,5 +46,12 @@ export class UpdateProdutoDto extends PartialType(CreateProdutoDto) { }) @IsNotEmpty({ message: 'O orçamento não pode estar vazio' }) @IsNumber({}, { message: 'O orçamento inserido não é válido' }) - orcamentoId?: number; + idOrcamento?: number; + + @IsOptional() + valorMaterial?: number; + + + @IsOptional() + valorMaoDeObra?: number; } diff --git a/src/modules/produtos/entities/produto.entity.ts b/src/modules/produtos/entities/produto.entity.ts index 8ef45c7..3d6fd82 100644 --- a/src/modules/produtos/entities/produto.entity.ts +++ b/src/modules/produtos/entities/produto.entity.ts @@ -6,6 +6,8 @@ export class Produto { titulo: string; quantidade: number; valorUnitario?: number; + valorMaterial?: number; + valorMaoDeObra?: number; observacoes?: string; listaInsumos: ListaInsumo[]; createdAt: Date; diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index a6aae06..c776b4a 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -24,6 +24,7 @@ export class ProdutosController { @Post('addProdutoBase') async createProdFromBase(@Body() addProdutoBaseDto: addProdutoBaseDto) { + console.log(addProdutoBaseDto) return await this.produtosService.pullProdBase(addProdutoBaseDto); } @@ -35,6 +36,7 @@ export class ProdutosController { @Post() async create(@Body() createProdutoDto: CreateProdutoDto) { + return await this.produtosService.create(createProdutoDto); } @@ -72,6 +74,7 @@ export class ProdutosController { @Patch(':id') async update(@Param('id') id: string, @Body() updateProdutoDto: UpdateProdutoDto) { + console.log(updateProdutoDto) return await this.produtosService.update(+id, updateProdutoDto); } @@ -79,4 +82,6 @@ export class ProdutosController { async remove(@Param('id') id: string) { return await this.produtosService.remove(+id); } + + } diff --git a/src/modules/produtos/produtos.module.ts b/src/modules/produtos/produtos.module.ts index 18bd5af..d250fd5 100644 --- a/src/modules/produtos/produtos.module.ts +++ b/src/modules/produtos/produtos.module.ts @@ -1,13 +1,20 @@ -import { Module } from '@nestjs/common'; +import { Module, forwardRef } from '@nestjs/common'; import { ProdutosService } from './produtos.service'; import { ProdutosController } from './produtos.controller'; -import { PrismaService } from 'src/databases/prisma.service'; -import { ProdutosBaseService } from '../produtos-base/produtos-base.service'; -import { InsumoProdutosBase } from '../insumos-produtos-base/entities/insumo-produtos-base.entity'; -import { InsumosProdutosBaseService } from '../insumos-produtos-base/insumos-produtos-base.service'; +import { PrismaModule } from 'src/prisma/prisma.module'; +import { ProdutosBaseModule } from '../produtos-base/produtos-base.module'; +import { InsumosProdutosBaseModule } from '../insumos-produtos-base/insumos-produtos-base.module'; +import { OrcamentosModule } from '../orcamentos/orcamentos.module'; @Module({ + imports: [ + forwardRef(() => OrcamentosModule), + PrismaModule, + ProdutosBaseModule, + InsumosProdutosBaseModule, + ], controllers: [ProdutosController], - providers: [ProdutosService, PrismaService, ProdutosBaseService, InsumosProdutosBaseService], + providers: [ProdutosService], + exports: [ProdutosService], }) export class ProdutosModule {} diff --git a/src/modules/produtos/produtos.service.ts b/src/modules/produtos/produtos.service.ts index ed547c3..339e5b6 100644 --- a/src/modules/produtos/produtos.service.ts +++ b/src/modules/produtos/produtos.service.ts @@ -6,6 +6,7 @@ import { ProdutosBaseService } from '../produtos-base/produtos-base.service'; import { InsumosProdutosBaseService } from '../insumos-produtos-base/insumos-produtos-base.service'; import { addProdutoBaseDto } from './dto/addProdutoBase.dto'; import { Produto } from './entities/produto.entity'; +import { OrcamentosService } from '../orcamentos/orcamentos.service'; @Injectable() export class ProdutosService { @@ -90,7 +91,7 @@ export class ProdutosService { async update(id: number, updateProdutoDto: UpdateProdutoDto) { const orcamentoExists = await this.prismaService.orcamento.findFirst({ - where: { id: updateProdutoDto.orcamentoId }, + where: { id: updateProdutoDto.idOrcamento }, }); if (orcamentoExists) { return await this.prismaService.produto.update({ @@ -158,4 +159,45 @@ export class ProdutosService { } return { data: { message: 'Produto base não existe' } }; } + + async recalcularValor(id: number) + { + const listaInsumosMeterial = await this.prismaService.listaInsumo.findMany({ + where: { + variante: { insumo: { categoria: { tipo: "Insumo" } } }, + idProduto: id, + }, + select: { + valorUnitario: true, + quantidade: true, + }, + }); + + const ValorTotalMaterial = listaInsumosMeterial.reduce( + (total, insumo) => total + insumo.valorUnitario * insumo.quantidade, + 0 + ); + + const listaInsumosServico = await this.prismaService.listaInsumo.findMany({ + where: { + variante: { insumo: { categoria: { tipo: "Mão de Obra" } } }, + idProduto: id, + }, + select: { + valorUnitario: true, + quantidade: true, + }, + }); + + const ValorTotalMaoDeObra = listaInsumosServico.reduce( + (total, insumo) => total + insumo.valorUnitario * insumo.quantidade, + 0 + ); + + this.update(id,{valorMaoDeObra:ValorTotalMaoDeObra, valorMaterial:ValorTotalMaterial, valorUnitario: ValorTotalMaterial + ValorTotalMaoDeObra}) + + const produto = await this.findOne(id); + + + } } diff --git a/src/modules/usuarios/usuarios.controller.ts b/src/modules/usuarios/usuarios.controller.ts index 958e2eb..55bb232 100644 --- a/src/modules/usuarios/usuarios.controller.ts +++ b/src/modules/usuarios/usuarios.controller.ts @@ -57,7 +57,7 @@ export class UsuariosController { const user:Usuario = await this.findOne(""+usuario.id) - + if (user.tipoUsuario != "Administrador") { return await this.usuariosService.findManyByEmail(usuario.email); } diff --git a/src/modules/variantes/variantes.controller.ts b/src/modules/variantes/variantes.controller.ts index 925ecc1..f180d0f 100644 --- a/src/modules/variantes/variantes.controller.ts +++ b/src/modules/variantes/variantes.controller.ts @@ -25,6 +25,7 @@ export class VariantesController { @Post() async create(@Body() createVarianteDto: CreateVarianteDto) { + return await this.variantesService.create(createVarianteDto); } @@ -70,7 +71,6 @@ export class VariantesController { } @Get(':id') - async findOne(@Param('id') id: string) { return await this.variantesService.findOne(+id); diff --git a/src/modules/variantes/variantes.module.ts b/src/modules/variantes/variantes.module.ts index fa2f1a4..75baa17 100644 --- a/src/modules/variantes/variantes.module.ts +++ b/src/modules/variantes/variantes.module.ts @@ -1,10 +1,11 @@ import { Module } from '@nestjs/common'; import { VariantesService } from './variantes.service'; import { VariantesController } from './variantes.controller'; -import { PrismaService } from 'src/databases/prisma.service'; +import { PrismaModule } from 'src/prisma/prisma.module'; @Module({ + imports: [PrismaModule], controllers: [VariantesController], - providers: [VariantesService, PrismaService], + providers: [VariantesService], }) export class VariantesModule {} From c2827397f525cb34126ab4185ba1e786e862ed01 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:27:08 -0300 Subject: [PATCH 098/115] Prisma Imports --- prisma/seed.ts | 2 +- src/app.module.ts | 2 +- src/{ => databases}/prisma/prisma.module.ts | 0 src/{ => databases}/prisma/prisma.service.ts | 2 +- src/modules/categorias/categorias.module.ts | 2 +- src/modules/categorias/categorias.service.ts | 2 +- src/modules/clientes/clientes.module.ts | 2 +- src/modules/clientes/clientes.service.ts | 2 +- src/modules/cotacoes/cotacoes.module.ts | 2 +- src/modules/cotacoes/cotacoes.service.ts | 2 +- src/modules/fornecedores/fornecedores.module.ts | 2 +- src/modules/fornecedores/fornecedores.service.ts | 2 +- .../insumos-produtos-base/insumos-produtos-base.module.ts | 2 +- .../insumos-produtos-base/insumos-produtos-base.service.ts | 2 +- src/modules/insumos/insumos.module.ts | 2 +- src/modules/insumos/insumos.service.ts | 2 +- src/modules/lista-insumos/lista-insumos.module.ts | 2 +- src/modules/lista-insumos/lista-insumos.service.ts | 2 +- src/modules/orcamentos/orcamentos.module.ts | 2 +- src/modules/orcamentos/orcamentos.service.ts | 2 +- src/modules/pedidos/pedidos.module.ts | 2 +- src/modules/pedidos/pedidos.service.ts | 3 +-- src/modules/produtos-base/produtos-base.module.ts | 2 +- src/modules/produtos-base/produtos-base.service.ts | 2 +- src/modules/produtos/produtos.module.ts | 2 +- src/modules/produtos/produtos.service.ts | 3 +-- src/modules/usuarios/usuarios.module.ts | 2 +- src/modules/usuarios/usuarios.service.ts | 2 +- src/modules/variantes/variantes.module.ts | 2 +- src/modules/variantes/variantes.service.ts | 2 +- 30 files changed, 29 insertions(+), 31 deletions(-) rename src/{ => databases}/prisma/prisma.module.ts (100%) rename src/{ => databases}/prisma/prisma.service.ts (71%) diff --git a/prisma/seed.ts b/prisma/seed.ts index 680fd88..58b56e7 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -1,7 +1,7 @@ import { PrismaClient } from '@prisma/client'; import { faker } from '@faker-js/faker'; import { UsuariosService } from '../src/modules/usuarios/usuarios.service'; -import { PrismaService } from '../src/databases/prisma.service'; +import { PrismaService } from 'src/databases/prisma/prisma.service'; import { CreateUsuarioDto } from 'src/modules/usuarios/dto/create-usuario.dto'; import * as bcrypt from 'bcrypt'; diff --git a/src/app.module.ts b/src/app.module.ts index d8ebaf0..2f2a9e0 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -14,7 +14,7 @@ import { UsuariosModule } from './modules/usuarios/usuarios.module'; import { ProdutosBaseModule } from './modules/produtos-base/produtos-base.module'; import { InsumosProdutosBaseModule } from './modules/insumos-produtos-base/insumos-produtos-base.module'; import { VariantesModule } from './modules/variantes/variantes.module'; -import { PrismaModule } from './prisma/prisma.module'; +import { PrismaModule } from './databases/prisma/prisma.module'; import { AuthModule } from './auth/auth.module'; import { APP_GUARD } from '@nestjs/core'; import { JwtAuthGuard } from './auth/guards/jwt-auth.guard'; diff --git a/src/prisma/prisma.module.ts b/src/databases/prisma/prisma.module.ts similarity index 100% rename from src/prisma/prisma.module.ts rename to src/databases/prisma/prisma.module.ts diff --git a/src/prisma/prisma.service.ts b/src/databases/prisma/prisma.service.ts similarity index 71% rename from src/prisma/prisma.service.ts rename to src/databases/prisma/prisma.service.ts index ed98c67..359f950 100644 --- a/src/prisma/prisma.service.ts +++ b/src/databases/prisma/prisma.service.ts @@ -1,4 +1,4 @@ -import { INestApplication, Injectable, OnModuleInit } from '@nestjs/common'; +import { Injectable, OnModuleInit } from '@nestjs/common'; import { PrismaClient } from '@prisma/client'; @Injectable() diff --git a/src/modules/categorias/categorias.module.ts b/src/modules/categorias/categorias.module.ts index fc49e75..c0de41b 100644 --- a/src/modules/categorias/categorias.module.ts +++ b/src/modules/categorias/categorias.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { CategoriasService } from './categorias.service'; import { CategoriasController } from './categorias.controller'; -import { PrismaModule } from 'src/prisma/prisma.module'; +import { PrismaModule } from 'src/databases/prisma/prisma.module'; @Module({ imports:[PrismaModule], diff --git a/src/modules/categorias/categorias.service.ts b/src/modules/categorias/categorias.service.ts index 5873a34..22af1d9 100644 --- a/src/modules/categorias/categorias.service.ts +++ b/src/modules/categorias/categorias.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { CreateCategoriaDto } from './dto/create-categoria.dto'; import { UpdateCategoriaDto } from './dto/update-categoria.dto'; -import { PrismaService } from '../../databases/prisma.service'; +import { PrismaService } from 'src/databases/prisma/prisma.service'; import { Categoria } from './entities/categoria.entity'; @Injectable() export class CategoriasService { diff --git a/src/modules/clientes/clientes.module.ts b/src/modules/clientes/clientes.module.ts index b214724..efb6e87 100644 --- a/src/modules/clientes/clientes.module.ts +++ b/src/modules/clientes/clientes.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { ClientesService } from './clientes.service'; import { ClientesController } from './clientes.controller'; -import { PrismaModule } from 'src/prisma/prisma.module'; +import { PrismaModule } from 'src/databases/prisma/prisma.module'; @Module({ imports: [PrismaModule], diff --git a/src/modules/clientes/clientes.service.ts b/src/modules/clientes/clientes.service.ts index 3938c0d..cedde06 100644 --- a/src/modules/clientes/clientes.service.ts +++ b/src/modules/clientes/clientes.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { CreateClienteDto } from './dto/create-cliente.dto'; import { UpdateClienteDto } from './dto/update-cliente.dto'; -import { PrismaService } from '../../databases/prisma.service'; +import { PrismaService } from 'src/databases/prisma/prisma.service'; import { Cliente } from './entities/cliente.entity'; @Injectable() diff --git a/src/modules/cotacoes/cotacoes.module.ts b/src/modules/cotacoes/cotacoes.module.ts index bf04927..654c356 100644 --- a/src/modules/cotacoes/cotacoes.module.ts +++ b/src/modules/cotacoes/cotacoes.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { CotacoesService } from './cotacoes.service'; import { CotacoesController } from './cotacoes.controller'; -import { PrismaModule } from 'src/prisma/prisma.module'; +import { PrismaModule } from 'src/databases/prisma/prisma.module'; @Module({ imports: [PrismaModule], diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index e93011e..241c5a6 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { CreateCotacaoDto } from './dto/create-cotacao.dto'; import { UpdateCotacaoDto } from './dto/update-cotacao.dto'; -import { PrismaService } from 'src/databases/prisma.service'; +import { PrismaService } from 'src/databases/prisma/prisma.service'; import { recotarDto } from './dto/recotar.dto'; import { Cotacao } from './entities/cotacao.entity'; diff --git a/src/modules/fornecedores/fornecedores.module.ts b/src/modules/fornecedores/fornecedores.module.ts index 8fafe5b..5e15dfd 100644 --- a/src/modules/fornecedores/fornecedores.module.ts +++ b/src/modules/fornecedores/fornecedores.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { FornecedoresService } from './fornecedores.service'; import { FornecedoresController } from './fornecedores.controller'; -import { PrismaModule } from 'src/prisma/prisma.module'; +import { PrismaModule } from 'src/databases/prisma/prisma.module'; @Module({ imports: [PrismaModule], diff --git a/src/modules/fornecedores/fornecedores.service.ts b/src/modules/fornecedores/fornecedores.service.ts index 7f08324..1fd3034 100644 --- a/src/modules/fornecedores/fornecedores.service.ts +++ b/src/modules/fornecedores/fornecedores.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { CreateFornecedorDto } from './dto/create-fornecedor.dto'; import { UpdateFornecedorDto } from './dto/update-fornecedor.dto'; -import { PrismaService } from '../../databases/prisma.service'; +import { PrismaService } from 'src/databases/prisma/prisma.service'; import { Fornecedor } from './entities/fornecedor.entity'; @Injectable() diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.module.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.module.ts index 068b6c7..c4e447d 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.module.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { InsumosProdutosBaseService } from './insumos-produtos-base.service'; import { InsumosProdutosBaseController } from './insumos-produtos-base.controller'; -import { PrismaModule } from 'src/prisma/prisma.module'; +import { PrismaModule } from 'src/databases/prisma/prisma.module'; @Module({ imports: [PrismaModule], diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts index f6ea364..7a02b1e 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { CreateInsumosProdutosBaseDto } from './dto/create-insumo-produtos-base.dto'; import { UpdateInsumosProdutosBaseDto } from './dto/update-insumo-produtos-base.dto'; -import { PrismaService } from '../../databases/prisma.service'; +import { PrismaService } from 'src/databases/prisma/prisma.service'; import { InsumoProdutosBase } from './entities/insumo-produtos-base.entity'; @Injectable() diff --git a/src/modules/insumos/insumos.module.ts b/src/modules/insumos/insumos.module.ts index b4fffaf..f8d1999 100644 --- a/src/modules/insumos/insumos.module.ts +++ b/src/modules/insumos/insumos.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { InsumosService } from './insumos.service'; import { InsumosController } from './insumos.controller'; -import { PrismaModule } from 'src/prisma/prisma.module'; +import { PrismaModule } from 'src/databases/prisma/prisma.module'; @Module({ imports: [PrismaModule], diff --git a/src/modules/insumos/insumos.service.ts b/src/modules/insumos/insumos.service.ts index 4e2c23e..8248dee 100644 --- a/src/modules/insumos/insumos.service.ts +++ b/src/modules/insumos/insumos.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { CreateInsumoDto } from './dto/create-insumo.dto'; import { UpdateInsumoDto } from './dto/update-insumo.dto'; -import { PrismaService } from 'src/prisma/prisma.service'; +import { PrismaService } from 'src/databases/prisma/prisma.service'; import { Insumo } from './entities/insumo.entity'; @Injectable() diff --git a/src/modules/lista-insumos/lista-insumos.module.ts b/src/modules/lista-insumos/lista-insumos.module.ts index b8a0441..c528a40 100644 --- a/src/modules/lista-insumos/lista-insumos.module.ts +++ b/src/modules/lista-insumos/lista-insumos.module.ts @@ -3,7 +3,7 @@ import { ListaInsumosService } from './lista-insumos.service'; import { ListaInsumosController } from './lista-insumos.controller'; import { ProdutosModule } from '../produtos/produtos.module'; import { CotacoesModule } from '../cotacoes/cotacoes.module'; -import { PrismaModule } from 'src/prisma/prisma.module'; +import { PrismaModule } from 'src/databases/prisma/prisma.module'; @Module({ imports: [PrismaModule, ProdutosModule, CotacoesModule], diff --git a/src/modules/lista-insumos/lista-insumos.service.ts b/src/modules/lista-insumos/lista-insumos.service.ts index 142e926..8090ed4 100644 --- a/src/modules/lista-insumos/lista-insumos.service.ts +++ b/src/modules/lista-insumos/lista-insumos.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { CreateListaInsumoDto } from './dto/create-lista-insumo.dto'; import { UpdateListaInsumoDto } from './dto/update-lista-insumo.dto'; -import { PrismaService } from 'src/databases/prisma.service'; +import { PrismaService } from 'src/databases/prisma/prisma.service'; import { CotacoesService } from '../cotacoes/cotacoes.service'; import { ListaInsumo } from './entities/lista-insumo.entity'; import { ProdutosService } from '../produtos/produtos.service'; diff --git a/src/modules/orcamentos/orcamentos.module.ts b/src/modules/orcamentos/orcamentos.module.ts index 8caf330..4205ac3 100644 --- a/src/modules/orcamentos/orcamentos.module.ts +++ b/src/modules/orcamentos/orcamentos.module.ts @@ -1,7 +1,7 @@ import { Module, forwardRef } from '@nestjs/common'; import { OrcamentosService } from './orcamentos.service'; import { OrcamentosController } from './orcamentos.controller'; -import { PrismaModule } from 'src/prisma/prisma.module'; +import { PrismaModule } from 'src/databases/prisma/prisma.module'; import { ProdutosModule } from '../produtos/produtos.module'; import { ProdutosBaseModule } from '../produtos-base/produtos-base.module'; import { InsumosProdutosBaseModule } from '../insumos-produtos-base/insumos-produtos-base.module'; diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index 9cba077..2f15569 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { CreateOrcamentoDto } from './dto/create-orcamento.dto'; import { UpdateOrcamentoDto } from './dto/update-orcamento.dto'; -import { PrismaService } from 'src/databases/prisma.service'; +import { PrismaService } from 'src/databases/prisma/prisma.service'; import { ProdutosService } from '../produtos/produtos.service'; import { Orcamento } from './entities/orcamento.entity'; import { Usuario } from '../usuarios/entities/usuario.entity'; diff --git a/src/modules/pedidos/pedidos.module.ts b/src/modules/pedidos/pedidos.module.ts index c13004b..e4a6323 100644 --- a/src/modules/pedidos/pedidos.module.ts +++ b/src/modules/pedidos/pedidos.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { PedidosService } from './pedidos.service'; import { PedidosController } from './pedidos.controller'; -import { PrismaModule } from 'src/prisma/prisma.module'; +import { PrismaModule } from 'src/databases/prisma/prisma.module'; @Module({ imports: [PrismaModule], diff --git a/src/modules/pedidos/pedidos.service.ts b/src/modules/pedidos/pedidos.service.ts index 63c4709..74bea5f 100644 --- a/src/modules/pedidos/pedidos.service.ts +++ b/src/modules/pedidos/pedidos.service.ts @@ -1,9 +1,8 @@ import { Injectable } from '@nestjs/common'; import { CreatePedidoDto } from './dto/create-pedido.dto'; import { UpdatePedidoDto } from './dto/update-pedido.dto'; -import { PrismaService } from 'src/databases/prisma.service'; +import { PrismaService } from 'src/databases/prisma/prisma.service'; import { Pedido } from './entities/pedido.entity'; -import { status } from '@prisma/client'; @Injectable() export class PedidosService { diff --git a/src/modules/produtos-base/produtos-base.module.ts b/src/modules/produtos-base/produtos-base.module.ts index f27ff17..0268f00 100644 --- a/src/modules/produtos-base/produtos-base.module.ts +++ b/src/modules/produtos-base/produtos-base.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { ProdutosBaseService } from './produtos-base.service'; import { ProdutosBaseController } from './produtos-base.controller'; -import { PrismaModule } from 'src/prisma/prisma.module'; +import { PrismaModule } from 'src/databases/prisma/prisma.module'; @Module({ imports: [PrismaModule], diff --git a/src/modules/produtos-base/produtos-base.service.ts b/src/modules/produtos-base/produtos-base.service.ts index 41d6017..dcc094f 100644 --- a/src/modules/produtos-base/produtos-base.service.ts +++ b/src/modules/produtos-base/produtos-base.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { CreateProdutosBaseDto } from './dto/create-produtos-base.dto'; import { UpdateProdutosBaseDto } from './dto/update-produtos-base.dto'; -import { PrismaService } from 'src/databases/prisma.service'; +import { PrismaService } from 'src/databases/prisma/prisma.service'; import { ProdutosBase } from './entities/produtos-base.entity'; @Injectable() diff --git a/src/modules/produtos/produtos.module.ts b/src/modules/produtos/produtos.module.ts index d250fd5..dc71f35 100644 --- a/src/modules/produtos/produtos.module.ts +++ b/src/modules/produtos/produtos.module.ts @@ -1,7 +1,7 @@ import { Module, forwardRef } from '@nestjs/common'; import { ProdutosService } from './produtos.service'; import { ProdutosController } from './produtos.controller'; -import { PrismaModule } from 'src/prisma/prisma.module'; +import { PrismaModule } from 'src/databases/prisma/prisma.module'; import { ProdutosBaseModule } from '../produtos-base/produtos-base.module'; import { InsumosProdutosBaseModule } from '../insumos-produtos-base/insumos-produtos-base.module'; import { OrcamentosModule } from '../orcamentos/orcamentos.module'; diff --git a/src/modules/produtos/produtos.service.ts b/src/modules/produtos/produtos.service.ts index 339e5b6..b5d6459 100644 --- a/src/modules/produtos/produtos.service.ts +++ b/src/modules/produtos/produtos.service.ts @@ -1,12 +1,11 @@ import { Injectable } from '@nestjs/common'; import { CreateProdutoDto } from './dto/create-produto.dto'; import { UpdateProdutoDto } from './dto/update-produto.dto'; -import { PrismaService } from 'src/databases/prisma.service'; +import { PrismaService } from 'src/databases/prisma/prisma.service'; import { ProdutosBaseService } from '../produtos-base/produtos-base.service'; import { InsumosProdutosBaseService } from '../insumos-produtos-base/insumos-produtos-base.service'; import { addProdutoBaseDto } from './dto/addProdutoBase.dto'; import { Produto } from './entities/produto.entity'; -import { OrcamentosService } from '../orcamentos/orcamentos.service'; @Injectable() export class ProdutosService { diff --git a/src/modules/usuarios/usuarios.module.ts b/src/modules/usuarios/usuarios.module.ts index bb341a9..e5463ef 100644 --- a/src/modules/usuarios/usuarios.module.ts +++ b/src/modules/usuarios/usuarios.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { UsuariosService } from './usuarios.service'; import { UsuariosController } from './usuarios.controller'; -import { PrismaModule } from 'src/prisma/prisma.module'; +import { PrismaModule } from 'src/databases/prisma/prisma.module'; @Module({ imports: [PrismaModule], diff --git a/src/modules/usuarios/usuarios.service.ts b/src/modules/usuarios/usuarios.service.ts index 1d6e1c7..952b8f2 100644 --- a/src/modules/usuarios/usuarios.service.ts +++ b/src/modules/usuarios/usuarios.service.ts @@ -4,7 +4,7 @@ import { UpdateUsuarioDto } from './dto/update-usuario.dto'; import { Usuario } from './entities/usuario.entity'; import * as bcrypt from 'bcrypt'; -import { PrismaService } from 'src/prisma/prisma.service'; +import { PrismaService } from 'src/databases/prisma/prisma.service'; import { ChangePasswordDto } from './dto/changePassword.dto'; @Injectable() diff --git a/src/modules/variantes/variantes.module.ts b/src/modules/variantes/variantes.module.ts index 75baa17..8092611 100644 --- a/src/modules/variantes/variantes.module.ts +++ b/src/modules/variantes/variantes.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { VariantesService } from './variantes.service'; import { VariantesController } from './variantes.controller'; -import { PrismaModule } from 'src/prisma/prisma.module'; +import { PrismaModule } from 'src/databases/prisma/prisma.module'; @Module({ imports: [PrismaModule], diff --git a/src/modules/variantes/variantes.service.ts b/src/modules/variantes/variantes.service.ts index 1166de6..7ab5cdd 100644 --- a/src/modules/variantes/variantes.service.ts +++ b/src/modules/variantes/variantes.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { CreateVarianteDto } from './dto/create-variante.dto'; import { UpdateVarianteDto } from './dto/update-variante.dto'; -import { PrismaService } from 'src/databases/prisma.service'; +import { PrismaService } from 'src/databases/prisma/prisma.service'; import { Variante } from './entities/variante.entity'; @Injectable() From fec99701f717cfa5ed961a21b8aea52c45761b8d Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Wed, 15 Nov 2023 15:24:50 -0300 Subject: [PATCH 099/115] =?UTF-8?q?corre=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/cotacoes/cotacoes.service.ts | 1 + .../insumos-produtos-base.module.ts | 1 + .../lista-insumos/lista-insumos.module.ts | 3 +- .../lista-insumos/lista-insumos.service.ts | 11 ++-- src/modules/orcamentos/orcamentos.module.ts | 6 +- src/modules/orcamentos/orcamentos.service.ts | 57 ++++++++++--------- src/modules/produtos/produtos.module.ts | 4 +- src/modules/produtos/produtos.service.ts | 32 +++++------ 8 files changed, 58 insertions(+), 57 deletions(-) diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index 241c5a6..8a7397b 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -144,6 +144,7 @@ export class CotacoesService { where: { id, }, + }); } diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.module.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.module.ts index c4e447d..ee715fa 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.module.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.module.ts @@ -7,5 +7,6 @@ import { PrismaModule } from 'src/databases/prisma/prisma.module'; imports: [PrismaModule], controllers: [InsumosProdutosBaseController], providers: [InsumosProdutosBaseService], + exports: [InsumosProdutosBaseService], }) export class InsumosProdutosBaseModule {} diff --git a/src/modules/lista-insumos/lista-insumos.module.ts b/src/modules/lista-insumos/lista-insumos.module.ts index c528a40..17081b2 100644 --- a/src/modules/lista-insumos/lista-insumos.module.ts +++ b/src/modules/lista-insumos/lista-insumos.module.ts @@ -4,9 +4,10 @@ import { ListaInsumosController } from './lista-insumos.controller'; import { ProdutosModule } from '../produtos/produtos.module'; import { CotacoesModule } from '../cotacoes/cotacoes.module'; import { PrismaModule } from 'src/databases/prisma/prisma.module'; +import { OrcamentosModule } from '../orcamentos/orcamentos.module'; @Module({ - imports: [PrismaModule, ProdutosModule, CotacoesModule], + imports: [PrismaModule, ProdutosModule, CotacoesModule,OrcamentosModule], controllers: [ListaInsumosController], providers: [ListaInsumosService], }) diff --git a/src/modules/lista-insumos/lista-insumos.service.ts b/src/modules/lista-insumos/lista-insumos.service.ts index 8090ed4..d0631df 100644 --- a/src/modules/lista-insumos/lista-insumos.service.ts +++ b/src/modules/lista-insumos/lista-insumos.service.ts @@ -5,12 +5,14 @@ import { PrismaService } from 'src/databases/prisma/prisma.service'; import { CotacoesService } from '../cotacoes/cotacoes.service'; import { ListaInsumo } from './entities/lista-insumo.entity'; import { ProdutosService } from '../produtos/produtos.service'; +import { OrcamentosService } from '../orcamentos/orcamentos.service'; @Injectable() export class ListaInsumosService { constructor( private readonly prismaService: PrismaService, private readonly produtosServices: ProdutosService, + private readonly orcamentoService: OrcamentosService, private readonly cotacaoServices: CotacoesService, ) {} @@ -92,9 +94,8 @@ export class ListaInsumosService { } async findOne(id: number) { - console.log(id); - console.log(this.prismaService.listaInsumo.findFirst({ where: { id } })); - return await this.prismaService.listaInsumo.findFirst({ where: { id } }); + + return await this.prismaService.listaInsumo.findFirst({ where: { id }}); } async update(id: number, updateListaInsumoDto: UpdateListaInsumoDto) { @@ -153,7 +154,9 @@ export class ListaInsumosService { const salvo = await this.update(listaInsumoExists.id, listaInsumoExists); - this.produtosServices.recalcularValor(listaInsumoExists.idProduto); + const codOrc = await this.produtosServices.findOne(listaInsumoExists.idProduto) + + this.orcamentoService.recalcular(codOrc.idOrcamento, listaInsumoExists.idProduto); return salvo; } } diff --git a/src/modules/orcamentos/orcamentos.module.ts b/src/modules/orcamentos/orcamentos.module.ts index 4205ac3..558a5b4 100644 --- a/src/modules/orcamentos/orcamentos.module.ts +++ b/src/modules/orcamentos/orcamentos.module.ts @@ -3,15 +3,11 @@ import { OrcamentosService } from './orcamentos.service'; import { OrcamentosController } from './orcamentos.controller'; import { PrismaModule } from 'src/databases/prisma/prisma.module'; import { ProdutosModule } from '../produtos/produtos.module'; -import { ProdutosBaseModule } from '../produtos-base/produtos-base.module'; -import { InsumosProdutosBaseModule } from '../insumos-produtos-base/insumos-produtos-base.module'; @Module({ imports: [ + ProdutosModule, PrismaModule, - forwardRef(() => ProdutosModule), - ProdutosBaseModule, - InsumosProdutosBaseModule, ], controllers: [OrcamentosController], providers: [OrcamentosService], diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index 2f15569..ba41d9c 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@nestjs/common'; +import { Inject, Injectable, forwardRef } from '@nestjs/common'; import { CreateOrcamentoDto } from './dto/create-orcamento.dto'; import { UpdateOrcamentoDto } from './dto/update-orcamento.dto'; import { PrismaService } from 'src/databases/prisma/prisma.service'; @@ -13,7 +13,7 @@ export class OrcamentosService { private readonly produtoService: ProdutosService, ) {} async countAll() { - return await this.prismaService.orcamento.count({}); + return await this.prismaService.orcamento.count({where:{pedido: null}}); } async findCliente(id: number) { @@ -32,7 +32,7 @@ export class OrcamentosService { const isNumero = !isNaN(parseInt(titulo_like)); if (isNumero) { - orcamentos = await this.prismaService.orcamento.findMany({ + return orcamentos = await this.prismaService.orcamento.findMany({ skip, take: perPage, where: { @@ -46,7 +46,7 @@ export class OrcamentosService { }, }); } else { - orcamentos = await this.prismaService.orcamento.findMany({ + return orcamentos = await this.prismaService.orcamento.findMany({ skip, take: perPage, where: { @@ -59,15 +59,17 @@ export class OrcamentosService { }, }); } - } else { - orcamentos = await this.prismaService.orcamento.findMany({ - skip, - take: perPage, - where: { - pedido: null, - }, - }); } + + + orcamentos = await this.prismaService.orcamento.findMany({ + skip, + take: perPage, + where: { + pedido: null, + }, + }); + return orcamentos; } @@ -154,20 +156,21 @@ export class OrcamentosService { return { data: { message: 'Orçamento não existe' } }; } - - async recalcular(id: number){ - - const produtos = await this.produtoService.findProdutoOrc(id); - - const valorTotalMaterial = produtos.reduce( - (total, produto) => total + produto.valorMaterial * produto.quantidade, - 0 - ) - const valorTotalMaoDeObra = produtos.reduce( - (total, produto) => total + produto.valorMaoDeObra * produto.quantidade, - 0 - ) - this.update(id,{totalMateriais:valorTotalMaterial,totalMaoObra:valorTotalMaoDeObra}) - + async recalcular(idOrcamento: number, idProduto: number) { + await this.produtoService.recalcularValor(idProduto); + const produtos = await this.produtoService.findProdutoOrc(idOrcamento); + + const valorTotalMaterial = produtos.reduce( + (total, produto) => total + produto.valorMaterial * produto.quantidade, + 0, + ); + const valorTotalMaoDeObra = produtos.reduce( + (total, produto) => total + produto.valorMaoDeObra * produto.quantidade, + 0, + ); + await this.update(idOrcamento, { + totalMateriais: valorTotalMaterial, + totalMaoObra: valorTotalMaoDeObra, + }); } } diff --git a/src/modules/produtos/produtos.module.ts b/src/modules/produtos/produtos.module.ts index dc71f35..a570b0f 100644 --- a/src/modules/produtos/produtos.module.ts +++ b/src/modules/produtos/produtos.module.ts @@ -1,14 +1,12 @@ -import { Module, forwardRef } from '@nestjs/common'; +import { Module } from '@nestjs/common'; import { ProdutosService } from './produtos.service'; import { ProdutosController } from './produtos.controller'; import { PrismaModule } from 'src/databases/prisma/prisma.module'; import { ProdutosBaseModule } from '../produtos-base/produtos-base.module'; import { InsumosProdutosBaseModule } from '../insumos-produtos-base/insumos-produtos-base.module'; -import { OrcamentosModule } from '../orcamentos/orcamentos.module'; @Module({ imports: [ - forwardRef(() => OrcamentosModule), PrismaModule, ProdutosBaseModule, InsumosProdutosBaseModule, diff --git a/src/modules/produtos/produtos.service.ts b/src/modules/produtos/produtos.service.ts index b5d6459..61c6790 100644 --- a/src/modules/produtos/produtos.service.ts +++ b/src/modules/produtos/produtos.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@nestjs/common'; +import { Inject, Injectable, forwardRef } from '@nestjs/common'; import { CreateProdutoDto } from './dto/create-produto.dto'; import { UpdateProdutoDto } from './dto/update-produto.dto'; import { PrismaService } from 'src/databases/prisma/prisma.service'; @@ -147,7 +147,6 @@ export class ProdutosService { quantidade: insumoBase.quantidade, idVariante: insumoBase.idVariante, idProduto: copyProd.id, - }, }); } @@ -159,11 +158,10 @@ export class ProdutosService { return { data: { message: 'Produto base não existe' } }; } - async recalcularValor(id: number) - { + async recalcularValor(id: number) { const listaInsumosMeterial = await this.prismaService.listaInsumo.findMany({ where: { - variante: { insumo: { categoria: { tipo: "Insumo" } } }, + variante: { insumo: { categoria: { tipo: 'Insumo' } } }, idProduto: id, }, select: { @@ -172,14 +170,14 @@ export class ProdutosService { }, }); - const ValorTotalMaterial = listaInsumosMeterial.reduce( - (total, insumo) => total + insumo.valorUnitario * insumo.quantidade, - 0 - ); + const ValorTotalMaterial = listaInsumosMeterial.reduce( + (total, insumo) => total + insumo.valorUnitario * insumo.quantidade, + 0, + ); const listaInsumosServico = await this.prismaService.listaInsumo.findMany({ where: { - variante: { insumo: { categoria: { tipo: "Mão de Obra" } } }, + variante: { insumo: { categoria: { tipo: 'Mão de Obra' } } }, idProduto: id, }, select: { @@ -187,16 +185,16 @@ export class ProdutosService { quantidade: true, }, }); - + const ValorTotalMaoDeObra = listaInsumosServico.reduce( (total, insumo) => total + insumo.valorUnitario * insumo.quantidade, - 0 + 0, ); - this.update(id,{valorMaoDeObra:ValorTotalMaoDeObra, valorMaterial:ValorTotalMaterial, valorUnitario: ValorTotalMaterial + ValorTotalMaoDeObra}) - - const produto = await this.findOne(id); - - + await this.update(id, { + valorMaoDeObra: ValorTotalMaoDeObra, + valorMaterial: ValorTotalMaterial, + valorUnitario: ValorTotalMaterial + ValorTotalMaoDeObra, + }); } } From e6d2a16f6d70d247ef39a55e51b3fe93ed852ae1 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Wed, 15 Nov 2023 17:40:07 -0300 Subject: [PATCH 100/115] =?UTF-8?q?Subindo=20altera=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 1 + prisma/seed.ts | 11 +-- .../orcamentos/entities/orcamento.entity.ts | 1 + .../orcamentos/orcamentos.controller.ts | 2 +- src/modules/orcamentos/orcamentos.service.ts | 74 +++++++++---------- 5 files changed, 43 insertions(+), 46 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 2938b68..f9d6c5c 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -94,6 +94,7 @@ model Orcamento { observacoes String? idCliente Int idPedido Int? + idVendedor Int? pedido Pedido? cliente Cliente @relation(fields: [idCliente], references: [id]) createdAt DateTime @default(now()) diff --git a/prisma/seed.ts b/prisma/seed.ts index 58b56e7..f43d4ab 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -46,10 +46,9 @@ async function seedDatabase() { for (let i = 0; i < 10; i++) { await prisma.categoria.create({ data: { - tipo: faker.helpers.arrayElement([ - 'Material', - 'Mão de obra', - 'Serviço', + tipo: faker.helpers.arrayElement([ + 'Mão de Obra', + 'Insumo', ]), titulo: faker.company.catchPhrase(), descricao: faker.lorem.paragraph(), @@ -162,7 +161,9 @@ async function seedDatabase() { quantidade: faker.number.int({ min: 1, max: 10 }), valorUnitario: faker.number.float(), observacoes: faker.lorem.sentence(), - idOrcamento: faker.number.int({ min: 1, max: 30 }), // Gere um ID de orçamento aleatório + idOrcamento: faker.number.int({ min: 1, max: 30 }), + valorMaoDeObra:faker.number.int({min:1, max: 10}), + valorMaterial:faker.number.int({min:1, max: 10}), }, }); } diff --git a/src/modules/orcamentos/entities/orcamento.entity.ts b/src/modules/orcamentos/entities/orcamento.entity.ts index 120da8d..a2292f0 100644 --- a/src/modules/orcamentos/entities/orcamento.entity.ts +++ b/src/modules/orcamentos/entities/orcamento.entity.ts @@ -9,6 +9,7 @@ export class Orcamento { totalMaoObra?: number; totalMateriais?: number; status: status; + idVendedor: number; prazoEstimadoProducao?: number; observacoes?: string; idCliente: number; diff --git a/src/modules/orcamentos/orcamentos.controller.ts b/src/modules/orcamentos/orcamentos.controller.ts index 5ed56dd..d4eba86 100644 --- a/src/modules/orcamentos/orcamentos.controller.ts +++ b/src/modules/orcamentos/orcamentos.controller.ts @@ -48,7 +48,7 @@ export class OrcamentosController { Number(perPage), titulo_like, ); - const total = orcamentos.length; + const total = await this.orcamentosService.countAll(titulo_like); res.header('x-total-count', total); return await orcamentos; } diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index ba41d9c..d78f075 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -12,8 +12,22 @@ export class OrcamentosService { private readonly prismaService: PrismaService, private readonly produtoService: ProdutosService, ) {} - async countAll() { - return await this.prismaService.orcamento.count({where:{pedido: null}}); + async countAll(titulo_like: string = '') { + return await this.prismaService.orcamento.count({ + where: { + OR: [ + { + id: isNaN(parseInt(titulo_like)) + ? undefined + : parseInt(titulo_like), + }, + { cliente: { nome: { contains: titulo_like } } }, + { cliente: { nomeFantasia: { contains: titulo_like } } }, + { cliente: { razaoSocial: { contains: titulo_like } } }, + ], + pedido: null, + }, + }); } async findCliente(id: number) { @@ -23,49 +37,26 @@ export class OrcamentosService { async findAllWithPagination( page: number, perPage: number, - titulo_like: string, + titulo_like: string = '', ) { const skip = (page - 1) * perPage; - let orcamentos = Orcamento['']; - if (titulo_like) { - const isNumero = !isNaN(parseInt(titulo_like)); - - if (isNumero) { - return orcamentos = await this.prismaService.orcamento.findMany({ - skip, - take: perPage, - where: { - OR: [ - { id: { equals: parseInt(titulo_like) } }, - { cliente: { nome: { contains: titulo_like } } }, - { cliente: { nomeFantasia: { contains: titulo_like } } }, - { cliente: { razaoSocial: { contains: titulo_like } } }, - ], - pedido: null, - }, - }); - } else { - return orcamentos = await this.prismaService.orcamento.findMany({ - skip, - take: perPage, - where: { - OR: [ - { cliente: { nome: { contains: titulo_like } } }, - { cliente: { nomeFantasia: { contains: titulo_like } } }, - { cliente: { razaoSocial: { contains: titulo_like } } }, - ], - pedido: null, - }, - }); - } - } - - + let orcamentos; + orcamentos = await this.prismaService.orcamento.findMany({ skip, take: perPage, where: { + OR: [ + { + id: isNaN(parseInt(titulo_like)) + ? undefined + : parseInt(titulo_like), + }, + { cliente: { nome: { contains: titulo_like } } }, + { cliente: { nomeFantasia: { contains: titulo_like } } }, + { cliente: { razaoSocial: { contains: titulo_like } } }, + ], pedido: null, }, }); @@ -157,7 +148,9 @@ export class OrcamentosService { } async recalcular(idOrcamento: number, idProduto: number) { - await this.produtoService.recalcularValor(idProduto); + + console.log("Entrou na funçao ", idOrcamento ) + await this.produtoService.recalcularValor(idProduto); const produtos = await this.produtoService.findProdutoOrc(idOrcamento); const valorTotalMaterial = produtos.reduce( @@ -168,7 +161,8 @@ export class OrcamentosService { (total, produto) => total + produto.valorMaoDeObra * produto.quantidade, 0, ); - await this.update(idOrcamento, { + + await this.update(idOrcamento, { totalMateriais: valorTotalMaterial, totalMaoObra: valorTotalMaoDeObra, }); From 7e4449731cfe4753f4d2147bfb7120a109279e99 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Wed, 15 Nov 2023 20:22:48 -0300 Subject: [PATCH 101/115] =?UTF-8?q?altera=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 4 +++- src/modules/orcamentos/dto/create-orcamento.dto.ts | 4 ++++ src/modules/orcamentos/entities/orcamento.entity.ts | 2 +- src/modules/orcamentos/orcamentos.controller.ts | 2 ++ src/modules/orcamentos/orcamentos.service.ts | 6 ++++-- src/modules/usuarios/usuarios.controller.ts | 1 + 6 files changed, 15 insertions(+), 4 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index f9d6c5c..2279fca 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -94,7 +94,8 @@ model Orcamento { observacoes String? idCliente Int idPedido Int? - idVendedor Int? + criadorPor Int? + usuario Usuario? @relation(fields: [criadorPor], references: [id]) pedido Pedido? cliente Cliente @relation(fields: [idCliente], references: [id]) createdAt DateTime @default(now()) @@ -174,6 +175,7 @@ model Usuario { email String @unique telefone String senha String + orcamentos Orcamento[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/src/modules/orcamentos/dto/create-orcamento.dto.ts b/src/modules/orcamentos/dto/create-orcamento.dto.ts index 069eced..7dea2a7 100644 --- a/src/modules/orcamentos/dto/create-orcamento.dto.ts +++ b/src/modules/orcamentos/dto/create-orcamento.dto.ts @@ -73,4 +73,8 @@ export class CreateOrcamentoDto { @IsNotEmpty({ message: 'O cliente não pode estar vazio' }) @IsNumber({}, { message: 'O cliente inserido não é válido' }) idCliente: number; + + @IsOptional() + @IsNumber({}, { message: 'O vendedor inserido não é válido' }) + criadorPor?: number; } diff --git a/src/modules/orcamentos/entities/orcamento.entity.ts b/src/modules/orcamentos/entities/orcamento.entity.ts index a2292f0..5625aa8 100644 --- a/src/modules/orcamentos/entities/orcamento.entity.ts +++ b/src/modules/orcamentos/entities/orcamento.entity.ts @@ -9,7 +9,7 @@ export class Orcamento { totalMaoObra?: number; totalMateriais?: number; status: status; - idVendedor: number; + criadorPor?: number; prazoEstimadoProducao?: number; observacoes?: string; idCliente: number; diff --git a/src/modules/orcamentos/orcamentos.controller.ts b/src/modules/orcamentos/orcamentos.controller.ts index d4eba86..b433900 100644 --- a/src/modules/orcamentos/orcamentos.controller.ts +++ b/src/modules/orcamentos/orcamentos.controller.ts @@ -35,6 +35,7 @@ export class OrcamentosController { @Header('Access-Control-Allow-Origin', '*') @Header('Access-Control-Expose-Headers', 'X-Total-Count') async findAll( + @Query('page') page: number, @Query('perPage') perPage: number, @Query('titulo_like') titulo_like: string, @@ -58,6 +59,7 @@ export class OrcamentosController { @CurrentUser() usuario: Usuario, @Body() createOrcamentoDto: CreateOrcamentoDto, ) { + console.log(usuario) return await this.orcamentosService.create(createOrcamentoDto, usuario); } diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index d78f075..ee982f5 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -65,9 +65,11 @@ export class OrcamentosService { } async create(createOrcamentoDto: CreateOrcamentoDto, usuario: Usuario) { - console.log(usuario); + const clienteExists = await this.findCliente(createOrcamentoDto.idCliente); if (clienteExists) { + createOrcamentoDto.criadorPor = usuario.id; + console.log(createOrcamentoDto) return await this.prismaService.orcamento.create({ data: createOrcamentoDto, }); @@ -161,7 +163,7 @@ export class OrcamentosService { (total, produto) => total + produto.valorMaoDeObra * produto.quantidade, 0, ); - + await this.update(idOrcamento, { totalMateriais: valorTotalMaterial, totalMaoObra: valorTotalMaoDeObra, diff --git a/src/modules/usuarios/usuarios.controller.ts b/src/modules/usuarios/usuarios.controller.ts index 55bb232..e7a330c 100644 --- a/src/modules/usuarios/usuarios.controller.ts +++ b/src/modules/usuarios/usuarios.controller.ts @@ -30,6 +30,7 @@ export class UsuariosController { return await this.usuariosService.countAll(); } + @Post() async create(@Body() createUsuarioDto: CreateUsuarioDto) { return await this.usuariosService.create(createUsuarioDto); From 46a7314e4a6645f11b9f48cb3fdb10f525ac4e6a Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Wed, 15 Nov 2023 23:08:20 -0300 Subject: [PATCH 102/115] seed alimentada --- prisma/seed.ts | 1126 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 987 insertions(+), 139 deletions(-) diff --git a/prisma/seed.ts b/prisma/seed.ts index f43d4ab..fc0659e 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -18,124 +18,625 @@ async function seedDatabase() { return usuario; } }; - + //USUARIOS await createUser({ tipoUsuario: 'Administrador', - nome: 'Admin', - cpf: '99999999999', + nome: 'Nivaldo Tavares', + cpf: '890982450649', email: 'admin@admin.com', - telefone: '1511111111', + telefone: '8138225561', + senha: 'admin', + }); + + await createUser({ + tipoUsuario: 'Serralheiro', + nome: 'Isis Letícia Monteiro', + cpf: '51960443968', + email: 'isis-monteiro75@eanac.com.br', + telefone: '67998947436', + senha: 'admin', + }); + + await createUser({ + tipoUsuario: 'Serralheiro', + nome: 'Fábio Marcos Araújo', + cpf: '65779714207', + email: 'fabio_araujo@transportadoratransdel.com.br', + telefone: '4426720740', + senha: 'admin', + }); + + await createUser({ + tipoUsuario: 'Serralheiro', + nome: 'Yuri Isaac Roberto Nascimento', + cpf: '01462971210', + email: 'yuriisaacnascimento@academiahct.com.br', + telefone: '96996038541', senha: 'admin', }); - for (let i = 0; i < 10; i++) { - await createUser({ - tipoUsuario: faker.helpers.arrayElement([ - 'Serralheiro', - 'Administrador', - 'Vendedor', + await createUser({ + tipoUsuario: 'Serralheiro', + nome: 'Oliver Matheus Aparício', + cpf: '31866807781', + email: 'oliver_matheus_aparicio@europamotors.com.br', + telefone: '85998182177', + senha: 'admin', + }); + + await createUser({ + tipoUsuario: 'Serralheiro', + nome: 'Luciana Lúcia Corte Real', + cpf: '05036225244', + email: 'luciana.lucia.cortereal@unipsicotaubate.com.br', + telefone: '84988383056', + senha: 'admin', + }); + + //CATEGORIAS + await prisma.categoria.create({ + data: { + tipo: 'Insumo', + titulo: 'Metais', + descricao: 'Ferros/Metais', + }, + }); + await prisma.categoria.create({ + data: { + tipo: 'Mão de Obra', + titulo: 'Pinturas', + descricao: 'Serviço', + }, + }); + await prisma.categoria.create({ + data: { + tipo: 'Insumo', + titulo: 'Serras', + descricao: '', + }, + }); + await prisma.categoria.create({ + data: { + tipo: 'Insumo', + titulo: 'Laminas', + descricao: '', + }, + }); + await prisma.categoria.create({ + data: { + tipo: 'Insumo', + titulo: 'Chapa', + descricao: '', + }, + }); + await prisma.categoria.create({ + data: { + tipo: 'Insumo', + titulo: 'Tubos', + descricao: '', + }, + }); + await prisma.categoria.create({ + data: { + tipo: 'Mão de Obra', + titulo: 'Portas', + descricao: 'Serviço', + }, + }); + await prisma.categoria.create({ + data: { + tipo: 'Mão de Obra', + titulo: 'Treliças', + descricao: 'Serviço', + }, + }); + + //INSUMOS + await prisma.insumo.create({ + data: { + titulo: 'Metalon', + idCategoria: 1, + }, + }); + + await prisma.insumo.create({ + data: { + titulo: 'Pintura', + idCategoria: 2, + }, + }); + await prisma.insumo.create({ + data: { + titulo: 'Disco de Corte', + idCategoria: 3, + }, + }); + await prisma.insumo.create({ + data: { + titulo: 'Placa Cimentícia', + idCategoria: 5, + }, + }); + await prisma.insumo.create({ + data: { + titulo: 'Barra Roscada', + idCategoria: 1, + }, + }); + await prisma.insumo.create({ + data: { + titulo: 'Chapa', + idCategoria: 4, + }, + }); + + //VARIANTES + await prisma.variante.create({ + data: { + variante: '50x30 Br 6m 3,00mm', + idInsumo: 1, + }, + }); + await prisma.variante.create({ + data: { + variante: '50x50 Br 8m 2,00mm', + idInsumo: 1, + }, + }); + await prisma.variante.create({ + data: { + variante: '50x30 Br 6m 2,00mm', + idInsumo: 1, + }, + }); + await prisma.variante.create({ + data: { + variante: '50x50 Br 6m 2,00mm', + idInsumo: 1, + }, + }); + await prisma.variante.create({ + data: { + variante: '50x50 Br 6m 1,50mm', + idInsumo: 1, + }, + }); + + await prisma.variante.create({ + data: { + variante: '4.1/2', + idInsumo: 3, + }, + }); + await prisma.variante.create({ + data: { + variante: '12 (Fino)', + idInsumo: 3, + }, + }); + await prisma.variante.create({ + data: { + variante: '7', + idInsumo: 3, + }, + }); + await prisma.variante.create({ + data: { + variante: '10mm 1,20 x 2,00', + idInsumo: 4, + }, + }); + await prisma.variante.create({ + data: { + variante: '10mm 1,20 x 2,40', + idInsumo: 4, + }, + }); + await prisma.variante.create({ + data: { + variante: '10mm 1,00 x 2,40', + idInsumo: 4, + }, + }); + + await prisma.variante.create({ + data: { + variante: '2,00 x 1,00 m', + idInsumo: 6, + }, + }); + await prisma.variante.create({ + data: { + variante: '4,00 x 2,40 m', + idInsumo: 6, + }, + }); + await prisma.variante.create({ + data: { + variante: '3,00 x 1,20 m', + idInsumo: 6, + }, + }); + await prisma.variante.create({ + data: { + variante: '2,00 x 1,20 m', + idInsumo: 6, + }, + }); + await prisma.variante.create({ + data: { + variante: 'Acrílico', + idInsumo: 2, + }, + }); + await prisma.variante.create({ + data: { + variante: 'esmalte', + idInsumo: 2, + }, + }); + await prisma.variante.create({ + data: { + variante: 'epóxi', + idInsumo: 2, + }, + }); + await prisma.variante.create({ + data: { + variante: 'látex', + idInsumo: 2, + }, + }); + //CLIENTES + await prisma.cliente.create({ + data: { + email: 'vitor_dacruz@viavaleseguros.com.br', + telefone: '98987098845', + contaTipo: 'Fisica', + nome: 'Vitor Renato Paulo da Cruz', + cpf: '94963377160', + rg: '235096167', + pais: 'Brasil', + cep: '65049290', + estado: 'MA', + cidade: 'São Luís', + bairro: 'Cutim Anil', + rua: 'Rua Antônio Vitória Cano', + numero: '21', + complemento: 'sobrado', + }, + }); + + await prisma.cliente.create({ + data: { + email: 'rafael_eduardo_darosa@orteca.com.br', + telefone: '95988444711', + contaTipo: 'Fisica', + nome: 'Rafael Eduardo José da Rosa', + cpf: '95457987183', + rg: '134988905', + pais: 'Brasil', + cep: '69317232', + estado: 'RR', + cidade: 'Boa Vista', + bairro: 'Alvorada', + rua: 'Rua Jorge Dias Carneiro', + numero: '17', + complemento: 'casa', + }, + }); + + await prisma.cliente.create({ + data: { + email: 'yago_vieira@bat.com', + telefone: '9636478278', + contaTipo: 'Fisica', + nome: 'Yago Bruno Vieira', + cpf: '59420571688', + rg: '262424630', + pais: 'Brasil', + cep: '68906084', + estado: 'AP', + cidade: 'Macapá', + bairro: 'Goiabal', + rua: 'Rua Angola', + numero: '86', + complemento: 'fundos', + }, + }); + + await prisma.cliente.create({ + data: { + email: 'auditoria@muriloestellatelecomunicacoesme.com.br', + telefone: '1128482451', + contaTipo: 'Juridica', + nomeFantasia: 'Murilo e Stella Telecomunicações ME', + cnpj: '58368409000145', + razaoSocial: 'Murilo e Stella Telecomunicações ME', + pais: 'Brasil', + cep: '12927040', + estado: 'SP', + cidade: 'Bragança Paulista', + bairro: 'Núcleo Residencial Henedina Rodrigues Cortez', + rua: 'Rua Gentil José de Matos', + numero: '704', + complemento: '', + }, + }); + + await prisma.cliente.create({ + data: { + email: 'administracao@joaoetaniagraficaltda.com.br', + telefone: '3538242833', + contaTipo: 'Juridica', + nomeFantasia: 'João e Tânia Gráfica Ltda', + cnpj: '79865260000180', + razaoSocial: 'João e Tânia Gráfica Ltda', + pais: 'Brasil', + cep: '37701064', + estado: 'MG', + cidade: 'Poços de Caldas', + bairro: 'Vila Nossa Senhora de Fátima', + rua: 'Alameda Edson', + numero: '275', + complemento: '', + }, + }); + + await prisma.cliente.create({ + data: { + email: 'presidencia@renaneliviacontabilltda.com.br', + telefone: '2138258163', + contaTipo: 'Juridica', + nomeFantasia: 'Renan e Lívia Contábil Ltda', + cnpj: '60861961000112', + razaoSocial: 'Renan e Lívia Contábil Ltda', + pais: 'Brasil', + cep: '22723590', + estado: 'RJ', + cidade: 'Rio de Janeiro', + bairro: 'Taquara', + rua: 'Rua dos Geógrafos', + numero: '150', + complemento: '', + }, + }); + + //FORNECEDORES + await prisma.fornecedor.create({ + data: { + email: 'acobraga@gmail.com.br', + telefone: '1128989475', + contaTipo: 'Juridica', + nomeFantasia: 'Aços Bragança', + cnpj: '53450617000175', + razaoSocial: 'Aços Bragança', + pais: 'Brasil', + cep: '07082600', + estado: 'SP', + cidade: 'Guarulhos', + bairro: 'Jardim City', + rua: 'Rua Dirceu Rocha Dias', + numero: '701', + complemento: '', + }, + }); + + await prisma.fornecedor.create({ + data: { + email: 'anfer@gmail.com.br', + telefone: '1726956067', + contaTipo: 'Juridica', + nomeFantasia: 'Anfer', + cnpj: '80481939000154', + razaoSocial: 'Anfer', + pais: 'Brasil', + cep: '15062006', + estado: 'SP', + cidade: 'São José do Rio Preto', + bairro: 'Chácara Jockey Club (Zona Rural)', + rua: 'Estrada Nelson Vitalino', + numero: '240', + complemento: '', + }, + }); + + await prisma.fornecedor.create({ + data: { + email: 'ponto.serra@gmail.com.br', + telefone: '1126784199', + contaTipo: 'Juridica', + nomeFantasia: 'Ponto Serra', + cnpj: '87331592000102', + razaoSocial: 'Ponto Serra', + pais: 'Brasil', + cep: '07830460', + estado: 'SP', + cidade: 'Franco da Rocha', + bairro: 'Vila Cariri', + rua: 'Estrada Sete Voltas', + numero: '123', + complemento: '', + }, + }); + + await prisma.fornecedor.create({ + data: { + email: 'baurufer@gmail.com.br', + telefone: '1139737192', + contaTipo: 'Juridica', + nomeFantasia: 'Baurufer', + cnpj: '36314123000144', + razaoSocial: 'Baurufer', + pais: 'Brasil', + cep: '01005020', + estado: 'SP', + cidade: 'São Paulo', + bairro: 'Chico de Paula', + rua: 'Rua São Francisco', + numero: '850', + complemento: '', + }, + }); + + await prisma.fornecedor.create({ + data: { + email: 'destak@gmail.com.br', + telefone: '1429037423', + contaTipo: 'Juridica', + nomeFantasia: 'Destak', + cnpj: '87058422000104', + razaoSocial: 'Destak', + pais: 'Brasil', + cep: '17066590', + estado: 'SP', + cidade: 'Bauru', + bairro: 'Parque Jaraguá', + rua: 'Rua Professor Ayrton Busch', + numero: '275', + complemento: '', + }, + }); + + await prisma.fornecedor.create({ + data: { + email: 'joseense@gmail.com.br', + telefone: '1137497095', + contaTipo: 'Juridica', + nomeFantasia: 'Aços Joseense', + cnpj: '47806122000133', + razaoSocial: 'Aços Joseense', + pais: 'Brasil', + cep: '05545200', + estado: 'SP', + cidade: 'São Paulo', + bairro: 'Jardim Monte Alegre', + rua: 'Rua Deolicio Alves de Souza', + numero: '755', + complemento: '', + }, + }); + + //ORÇAMENTOS + await prisma.orcamento.create({ + data: { + validade: faker.date.future(), + dataOrcamento: faker.date.recent(), + totalMaoObra: 1500, + totalMateriais: 3470, + status: faker.helpers.arrayElement([ + 'Pendente', + 'Em_Processo', + 'Concluido', ]), - nome: faker.person.firstName(), - cpf: faker.string.numeric({ length: 11 }), - email: faker.internet.email(), - telefone: faker.phone.number(), - senha: faker.internet.password(), - }); - } + prazoEstimadoProducao: faker.number.int({ min: 1, max: 30 }), + observacoes: 'Mesa de 3 x 3 x 3', + idCliente: faker.number.int({ min: 1, max: 6 }), // Gere um ID de cliente aleatório + }, + }); - for (let i = 0; i < 10; i++) { - await prisma.categoria.create({ - data: { - tipo: faker.helpers.arrayElement([ - 'Mão de Obra', - 'Insumo', - ]), - titulo: faker.company.catchPhrase(), - descricao: faker.lorem.paragraph(), - }, - }); - } + await prisma.orcamento.create({ + data: { + validade: faker.date.future(), + dataOrcamento: faker.date.recent(), + totalMaoObra: 3000, + totalMateriais: 3223.5, + status: faker.helpers.arrayElement([ + 'Pendente', + 'Em_Processo', + 'Concluido', + ]), + prazoEstimadoProducao: faker.number.int({ min: 1, max: 30 }), + observacoes: '', + idCliente: faker.number.int({ min: 1, max: 6 }), // Gere um ID de cliente aleatório + }, + }); - for (let i = 0; i < 20; i++) { - await prisma.insumo.create({ - data: { - titulo: faker.commerce.productName(), + await prisma.orcamento.create({ + data: { + validade: faker.date.future(), + dataOrcamento: faker.date.recent(), + totalMaoObra: 600, + totalMateriais: 1320, + status: faker.helpers.arrayElement([ + 'Pendente', + 'Em_Processo', + 'Concluido', + ]), + prazoEstimadoProducao: faker.number.int({ min: 1, max: 30 }), + observacoes: '', + idCliente: faker.number.int({ min: 1, max: 6 }), // Gere um ID de cliente aleatório + }, + }); - idCategoria: faker.number.int({ min: 1, max: 10 }), - }, - }); - } + await prisma.orcamento.create({ + data: { + validade: faker.date.future(), + dataOrcamento: faker.date.recent(), + totalMaoObra: 1905, + totalMateriais: 1330, + status: faker.helpers.arrayElement([ + 'Pendente', + 'Em_Processo', + 'Concluido', + ]), + prazoEstimadoProducao: faker.number.int({ min: 1, max: 30 }), + observacoes: '', + idCliente: faker.number.int({ min: 1, max: 6 }), // Gere um ID de cliente aleatório + }, + }); - for (let i = 0; i < 20; i++) { - await prisma.variante.create({ - data: { - variante: faker.commerce.productName(), - idInsumo: faker.number.int({ min: 1, max: 20 }), - }, - }); - } + await prisma.orcamento.create({ + data: { + validade: faker.date.future(), + dataOrcamento: faker.date.recent(), + totalMaoObra: 7000, + totalMateriais: 5600, + status: faker.helpers.arrayElement([ + 'Pendente', + 'Em_Processo', + 'Concluido', + ]), + prazoEstimadoProducao: faker.number.int({ min: 1, max: 30 }), + observacoes: '', + idCliente: faker.number.int({ min: 1, max: 6 }), // Gere um ID de cliente aleatório + }, + }); - for (let i = 0; i < 10; i++) { - await prisma.fornecedor.create({ - data: { - email: faker.internet.email(), - telefone: faker.phone.number(), - contaTipo: faker.helpers.arrayElement(['Fisica', 'Juridica']), - nome: faker.person.fullName(), - cpf: faker.string.numeric({ length: 11 }), - rg: faker.string.numeric({ length: 9 }), - pais: faker.location.country(), - cep: faker.location.zipCode(), - estado: faker.location.state(), - cidade: faker.location.city(), - bairro: faker.location.city(), - rua: faker.location.street(), - numero: faker.location.buildingNumber(), - complemento: faker.location.secondaryAddress(), - }, - }); - } + await prisma.orcamento.create({ + data: { + validade: faker.date.future(), + dataOrcamento: faker.date.recent(), + totalMaoObra: 14000, + totalMateriais: 17224.9, + status: faker.helpers.arrayElement([ + 'Pendente', + 'Em_Processo', + 'Concluido', + ]), + prazoEstimadoProducao: faker.number.int({ min: 1, max: 30 }), + observacoes: '', + idCliente: faker.number.int({ min: 1, max: 6 }), // Gere um ID de cliente aleatório + }, + }); - for (let i = 0; i < 10; i++) { - await prisma.cliente.create({ - data: { - email: faker.internet.email(), - telefone: faker.phone.number(), - contaTipo: faker.helpers.arrayElement(['Fisica', 'Juridica']), - nome: faker.person.fullName(), - cpf: faker.string.numeric({ length: 11 }), - rg: faker.string.numeric({ length: 9 }), - pais: faker.location.country(), - cep: faker.location.zipCode(), - estado: faker.location.state(), - cidade: faker.location.city(), - bairro: faker.location.city(), - rua: faker.location.street(), - numero: faker.location.buildingNumber(), - complemento: faker.location.secondaryAddress(), - }, - }); - } + await prisma.orcamento.create({ + data: { + validade: faker.date.future(), + dataOrcamento: faker.date.recent(), + totalMaoObra: 14000, + totalMateriais: 17224.9, + status: faker.helpers.arrayElement([ + 'Pendente', + 'Em_Processo', + 'Concluido', + ]), + prazoEstimadoProducao: faker.number.int({ min: 1, max: 30 }), + observacoes: '', + idCliente: faker.number.int({ min: 1, max: 6 }), // Gere um ID de cliente aleatório + }, + }); - for (let i = 0; i < 30; i++) { - await prisma.orcamento.create({ - data: { - validade: faker.date.future(), - dataOrcamento: faker.date.recent(), - totalMaoObra: faker.number.float(), - totalMateriais: faker.number.float(), - status: faker.helpers.arrayElement([ - 'Pendente', - - 'Em_Processo', - 'Concluido', - ]), - prazoEstimadoProducao: faker.number.int({ min: 1, max: 30 }), - observacoes: faker.lorem.sentence(), - idCliente: faker.number.int({ min: 1, max: 10 }), // Gere um ID de cliente aleatório - }, - }); - } let nextOrcamentoId = 1; // Inicializa o próximo ID de orçamento function generateUniqueOrcamentoId() { @@ -144,70 +645,417 @@ async function seedDatabase() { return id; } - for (let i = 0; i < 10; i++) { + //PEDIDOS + for (let i = 0; i < 5; i++) { await prisma.pedido.create({ data: { - pagamento: faker.number.float(), + pagamento: faker.number.int({min: 30, max: 20000}), status: faker.helpers.arrayElement(['Pendente']), idOrcamento: generateUniqueOrcamentoId(), // Gere um ID de orçamento aleatório }, }); } - for (let i = 0; i < 50; i++) { - await prisma.produto.create({ + //PRODUTOS + await prisma.produto.create({ + data: { + titulo: 'Portão 2M x 3M', + quantidade: 1, + valorUnitario: 100, + observacoes: '', + idOrcamento: 3, + valorMaoDeObra: 50, + valorMaterial: 50, + }, + }); + await prisma.produto.create({ + data: { + titulo: 'Portão 2M x 3M', + quantidade: 1, + valorUnitario: 100, + observacoes: '', + idOrcamento: 3, + valorMaoDeObra: 50, + valorMaterial: 50, + }, + }); + await prisma.produto.create({ + data: { + titulo: 'QUADRO EM GRAU P/ VIDRO BANHEIRO', + quantidade: 1, + valorUnitario: 100, + observacoes: '', + idOrcamento: 2, + valorMaoDeObra: 50, + valorMaterial: 50, + }, + }); + await prisma.produto.create({ + data: { + titulo: 'PRATELEIRA COZINHA', + quantidade: 1, + valorUnitario: 100, + observacoes: '', + idOrcamento: 2, + valorMaoDeObra: 50, + valorMaterial: 50, + }, + }); + await prisma.produto.create({ + data: { + titulo: 'PINTURA ELETROSTÁTICA', + quantidade: 1, + valorUnitario: 100, + observacoes: '', + idOrcamento: 1, + valorMaoDeObra: 50, + valorMaterial: 50, + }, + }); + await prisma.produto.create({ + data: { + titulo: 'SUPORTE P/ VINHO ( 24 GARRAFAS )', + quantidade: 1, + valorUnitario: 100, + observacoes: '', + idOrcamento: 1, + valorMaoDeObra: 50, + valorMaterial: 50, + }, + }); + await prisma.produto.create({ + data: { + titulo: 'PINTURA ELETROSTÁTICA', + quantidade: 1, + valorUnitario: 100, + observacoes: '', + idOrcamento: 1, + valorMaoDeObra: 50, + valorMaterial: 50, + }, + }); + await prisma.produto.create({ + data: { + titulo: 'SUPORTE P/ VINHO ( 24 GARRAFAS )', + quantidade: 1, + valorUnitario: 100, + observacoes: '', + idOrcamento: 1, + valorMaoDeObra: 50, + valorMaterial: 50, + }, + }); + await prisma.produto.create({ + data: { + titulo: 'PINTURA ELETROSTÁTICA', + quantidade: 1, + valorUnitario: 100, + observacoes: '', + idOrcamento: 4, + valorMaoDeObra: 50, + valorMaterial: 50, + }, + }); + await prisma.produto.create({ + data: { + titulo: 'SUPORTE P/ VINHO ( 24 GARRAFAS )', + quantidade: 1, + valorUnitario: 100, + observacoes: '', + idOrcamento: 3, + valorMaoDeObra: 50, + valorMaterial: 50, + }, + }); + + //COTAÇÕES + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 100, + + idFornecedor: 1, // Gere um ID de fornecedor aleatório + idVariante: 1, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 120, + + idFornecedor: 2, // Gere um ID de fornecedor aleatório + idVariante: 1, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 140, + + idFornecedor: 3, // Gere um ID de fornecedor aleatório + idVariante: 1, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 95, + + idFornecedor: 5, // Gere um ID de fornecedor aleatório + idVariante: 1, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 90, + + idFornecedor: 4, // Gere um ID de fornecedor aleatório + idVariante: 3, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 95, + + idFornecedor: 1, // Gere um ID de fornecedor aleatório + idVariante: 3, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 98, + + idFornecedor: 3, // Gere um ID de fornecedor aleatório + idVariante: 3, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 80, + + idFornecedor: 5, // Gere um ID de fornecedor aleatório + idVariante: 3, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 50, + + idFornecedor: 6, // Gere um ID de fornecedor aleatório + idVariante: 6, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 80, + + idFornecedor: 4, // Gere um ID de fornecedor aleatório + idVariante: 6, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 70, + + idFornecedor: 3, // Gere um ID de fornecedor aleatório + idVariante: 6, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 60, + + idFornecedor: 2, // Gere um ID de fornecedor aleatório + idVariante: 6, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 60, + + idFornecedor: 2, // Gere um ID de fornecedor aleatório + idVariante: 6, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 60, + + idFornecedor: 1, // Gere um ID de fornecedor aleatório + idVariante: 9, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 60, + + idFornecedor: 2, // Gere um ID de fornecedor aleatório + idVariante: 9, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 60, + + idFornecedor: 3, // Gere um ID de fornecedor aleatório + idVariante: 9, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 60, + + idFornecedor: 4, // Gere um ID de fornecedor aleatório + idVariante: 9, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 60, + + idFornecedor: 1, // Gere um ID de fornecedor aleatório + idVariante: 10, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 60, + + idFornecedor: 2, // Gere um ID de fornecedor aleatório + idVariante: 10, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 60, + + idFornecedor: 3, // Gere um ID de fornecedor aleatório + idVariante: 10, // Gere um ID de insumo aleatório + }, + }); + await prisma.cotacao.create({ + data: { + data: faker.date.past(), + valor: 60, + + idFornecedor: 4, // Gere um ID de fornecedor aleatório + idVariante: 10, // Gere um ID de insumo aleatório + }, + }); + + //LISTA INSUMOS + await prisma.listaInsumo.create({ + data: { + quantidade: faker.number.int({ min: 1, max: 6 }), + idProduto: faker.number.int({ min: 1, max: 6 }), // Gere um ID de produto aleatório + idVariante: 1, // Gere um ID de insumo aleatório + idCotacao: 1, // Gere um ID de cotação aleatório + valorUnitario: faker.number.int({min:50, max:500}), + }, + }); + await prisma.listaInsumo.create({ + data: { + quantidade: faker.number.int({ min: 1, max: 6 }), + idProduto: faker.number.int({ min: 1, max: 6 }), // Gere um ID de produto aleatório + idVariante: 1, // Gere um ID de insumo aleatório + idCotacao: 2, // Gere um ID de cotação aleatório + valorUnitario: faker.number.int({min:50, max:500}), + }, + }); + await prisma.listaInsumo.create({ + data: { + quantidade: faker.number.int({ min: 1, max: 6 }), + idProduto: faker.number.int({ min: 1, max: 6 }), // Gere um ID de produto aleatório + idVariante: 1, // Gere um ID de insumo aleatório + idCotacao: 3, // Gere um ID de cotação aleatório + valorUnitario: faker.number.int({min:50, max:500}), + }, + }); + await prisma.listaInsumo.create({ + data: { + quantidade: faker.number.int({ min: 1, max: 6 }), + idProduto: faker.number.int({ min: 1, max: 6 }), // Gere um ID de produto aleatório + idVariante: 6, // Gere um ID de insumo aleatório + idCotacao: 1, // Gere um ID de cotação aleatório + valorUnitario: faker.number.int({min:50, max:500}), + }, + }); + await prisma.listaInsumo.create({ + data: { + quantidade: faker.number.int({ min: 1, max: 6 }), + idProduto: faker.number.int({ min: 1, max: 6 }), // Gere um ID de produto aleatório + idVariante: 5, // Gere um ID de insumo aleatório + idCotacao: 2, // Gere um ID de cotação aleatório + valorUnitario: faker.number.int({min:50, max:500}), + }, + }); + + //PRODUTOS BASE + await prisma.produtoBase.create({ data: { - titulo: faker.commerce.productName(), - quantidade: faker.number.int({ min: 1, max: 10 }), - valorUnitario: faker.number.float(), - observacoes: faker.lorem.sentence(), - idOrcamento: faker.number.int({ min: 1, max: 30 }), - valorMaoDeObra:faker.number.int({min:1, max: 10}), - valorMaterial:faker.number.int({min:1, max: 10}), + titulo: 'Portão 2 x 2m', + observacoes: '', }, }); - } - for (let i = 0; i < 20; i++) { - await prisma.cotacao.create({ + await prisma.produtoBase.create({ data: { - data: faker.date.past(), - valor: faker.number.float(), + titulo: 'Portão 3 x 3m', + observacoes: '', + }, + }); - idFornecedor: faker.number.int({ min: 1, max: 10 }), // Gere um ID de fornecedor aleatório - idVariante: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório + await prisma.produtoBase.create({ + data: { + titulo: 'Portão 4 x 4m', + observacoes: '', }, }); - } - for (let i = 0; i < 40; i++) { - await prisma.listaInsumo.create({ + await prisma.produtoBase.create({ data: { - quantidade: faker.number.int(), - idProduto: faker.number.int({ min: 1, max: 20 }), // Gere um ID de produto aleatório - idVariante: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório - idCotacao: faker.number.int({ min: 1, max: 10 }), // Gere um ID de cotação aleatório + titulo: 'Janela 1 x 2m', + observacoes: '', + }, + }); - valorUnitario: faker.number.float(), + await prisma.produtoBase.create({ + data: { + titulo: 'Suporte para espelho 20 x 20cm', + observacoes: '', }, }); - } - for (let i = 0; i < 20; i++) { await prisma.produtoBase.create({ data: { - titulo: faker.commerce.productName(), - observacoes: faker.lorem.sentence(), + titulo: 'telha 2 x 2', + observacoes: '', }, }); - } - for (let i = 0; i < 40; i++) { + //INSUMOS BASE + for (let i = 0; i < 12; i++) { await prisma.insumoProdutoBase.create({ data: { - quantidade: faker.number.float(), - idProdutoBase: faker.number.int({ min: 1, max: 10 }), // Gere um ID de produto base aleatório - idVariante: faker.number.int({ min: 1, max: 20 }), // Gere um ID de insumo aleatório + quantidade: faker.number.int({min: 1, max: 6}), + idProdutoBase: faker.number.int({ min: 1, max: 6 }), // Gere um ID de produto base aleatório + idVariante: faker.number.int({ min: 1, max: 12 }), // Gere um ID de insumo aleatório }, }); } From 5ea0e22d78706628f55f6520a4315e8fc8decc02 Mon Sep 17 00:00:00 2001 From: Divaldil <99264612+Divaldil@users.noreply.github.com> Date: Thu, 16 Nov 2023 00:20:28 -0300 Subject: [PATCH 103/115] Update seed.ts --- prisma/seed.ts | 93 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 89 insertions(+), 4 deletions(-) diff --git a/prisma/seed.ts b/prisma/seed.ts index fc0659e..c398ff4 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -624,8 +624,93 @@ async function seedDatabase() { data: { validade: faker.date.future(), dataOrcamento: faker.date.recent(), - totalMaoObra: 14000, - totalMateriais: 17224.9, + totalMaoObra: 710, + totalMateriais: 890.20, + status: faker.helpers.arrayElement([ + 'Pendente', + 'Em_Processo', + 'Concluido', + ]), + prazoEstimadoProducao: faker.number.int({ min: 1, max: 30 }), + observacoes: '', + idCliente: faker.number.int({ min: 1, max: 6 }), // Gere um ID de cliente aleatório + }, + }); + + await prisma.orcamento.create({ + data: { + validade: faker.date.future(), + dataOrcamento: faker.date.recent(), + totalMaoObra: 1260, + totalMateriais: 990, + status: faker.helpers.arrayElement([ + 'Pendente', + 'Em_Processo', + 'Concluido', + ]), + prazoEstimadoProducao: faker.number.int({ min: 1, max: 30 }), + observacoes: '', + idCliente: faker.number.int({ min: 1, max: 6 }), // Gere um ID de cliente aleatório + }, + }); + + await prisma.orcamento.create({ + data: { + validade: faker.date.future(), + dataOrcamento: faker.date.recent(), + totalMaoObra: 5432, + totalMateriais: 2345, + status: faker.helpers.arrayElement([ + 'Pendente', + 'Em_Processo', + 'Concluido', + ]), + prazoEstimadoProducao: faker.number.int({ min: 1, max: 30 }), + observacoes: '', + idCliente: faker.number.int({ min: 1, max: 6 }), // Gere um ID de cliente aleatório + }, + }); + + await prisma.orcamento.create({ + data: { + validade: faker.date.future(), + dataOrcamento: faker.date.recent(), + totalMaoObra: 3455, + totalMateriais: 1200.50, + status: faker.helpers.arrayElement([ + 'Pendente', + 'Em_Processo', + 'Concluido', + ]), + prazoEstimadoProducao: faker.number.int({ min: 1, max: 30 }), + observacoes: '', + idCliente: faker.number.int({ min: 1, max: 6 }), // Gere um ID de cliente aleatório + }, + }); + + await prisma.orcamento.create({ + data: { + validade: faker.date.future(), + dataOrcamento: faker.date.recent(), + totalMaoObra: 504, + totalMateriais: 943.50, + status: faker.helpers.arrayElement([ + 'Pendente', + 'Em_Processo', + 'Concluido', + ]), + prazoEstimadoProducao: faker.number.int({ min: 1, max: 30 }), + observacoes: '', + idCliente: faker.number.int({ min: 1, max: 6 }), // Gere um ID de cliente aleatório + }, + }); + + await prisma.orcamento.create({ + data: { + validade: faker.date.future(), + dataOrcamento: faker.date.recent(), + totalMaoObra: 253, + totalMateriais: 449.70, status: faker.helpers.arrayElement([ 'Pendente', 'Em_Processo', @@ -646,7 +731,7 @@ async function seedDatabase() { } //PEDIDOS - for (let i = 0; i < 5; i++) { + for (let i = 0; i < 6; i++) { await prisma.pedido.create({ data: { pagamento: faker.number.int({min: 30, max: 20000}), @@ -681,7 +766,7 @@ async function seedDatabase() { }); await prisma.produto.create({ data: { - titulo: 'QUADRO EM GRAU P/ VIDRO BANHEIRO', + titulo: 'QUADRO EM GRAU P/ VIDRO BANHEIRO', quantidade: 1, valorUnitario: 100, observacoes: '', From 618fdde0bbf78194f3c0ead8ebc5f66ef4fffce9 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Thu, 16 Nov 2023 00:40:33 -0300 Subject: [PATCH 104/115] =?UTF-8?q?corre=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 2279fca..779336c 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -121,7 +121,7 @@ model Produto { id Int @id @default(autoincrement()) titulo String quantidade Float - valorUnitario Float? + valorUnitario Float? @default(0) observacoes String? valorMaterial Float @default(0) valorMaoDeObra Float @default(0) @@ -157,7 +157,7 @@ model ListaInsumo { idVariante Int idCotacao Int? - valorUnitario Float? + valorUnitario Float? @default(0) produto Produto? @relation(fields: [idProduto], references: [id]) variante Variante? @relation(fields: [idVariante], references: [id]) cotacao Cotacao? @relation(fields: [idCotacao], references: [id]) From ee21ae508ef4a355e2bfd7a1cc26739735dd4315 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Thu, 23 Nov 2023 20:07:20 -0300 Subject: [PATCH 105/115] =?UTF-8?q?corre=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/pedidos/pedidos.service.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/modules/pedidos/pedidos.service.ts b/src/modules/pedidos/pedidos.service.ts index 74bea5f..a9d855a 100644 --- a/src/modules/pedidos/pedidos.service.ts +++ b/src/modules/pedidos/pedidos.service.ts @@ -3,6 +3,7 @@ import { CreatePedidoDto } from './dto/create-pedido.dto'; import { UpdatePedidoDto } from './dto/update-pedido.dto'; import { PrismaService } from 'src/databases/prisma/prisma.service'; import { Pedido } from './entities/pedido.entity'; +import { Orcamento } from '../orcamentos/entities/orcamento.entity'; @Injectable() export class PedidosService { @@ -63,7 +64,7 @@ export class PedidosService { } async findOne(id: number) { - return await this.prismaService.pedido.findFirst({ where: { id } }); + return await this.prismaService.pedido.findFirst({ where: { id }, include: {orcamento: true} }); } async update(id: number, updatePedidoDto: UpdatePedidoDto) { @@ -73,7 +74,7 @@ export class PedidosService { }, }); if (orcamentoExists) { - const pedidoExists = await this.findOne(updatePedidoDto.idOrcamento); + const pedidoExists = await this.findOne(id); if (pedidoExists) { return await this.prismaService.pedido.update({ where: { id }, From 030013915d43a11ad4f8dc149326e2fae73101bf Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Sat, 2 Dec 2023 22:47:37 -0300 Subject: [PATCH 106/115] Update usuarios.controller.ts --- src/modules/usuarios/usuarios.controller.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/modules/usuarios/usuarios.controller.ts b/src/modules/usuarios/usuarios.controller.ts index e7a330c..724980c 100644 --- a/src/modules/usuarios/usuarios.controller.ts +++ b/src/modules/usuarios/usuarios.controller.ts @@ -41,7 +41,6 @@ export class UsuariosController { @Param('id') id: string, @Body() changePassword: ChangePasswordDto, ) { - console.log(changePassword) return await this.usuariosService.changePassword(+id, changePassword); } From 0ed116d2591c7e30f2a5a8d9547299672b14e2f8 Mon Sep 17 00:00:00 2001 From: gaabhenrique <74377524+gaabhenrique@users.noreply.github.com> Date: Sat, 2 Dec 2023 23:40:35 -0300 Subject: [PATCH 107/115] Retorno usuario --- src/auth/auth.service.ts | 2 +- src/auth/models/UsuarioToken.ts | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index b71d5ed..a36eb93 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -22,7 +22,7 @@ export class AuthService { const jwtToken = this.jwtService.sign(payload); - return { accessToken: jwtToken }; + return { accessToken: jwtToken, usuario: usuario }; } async validateUser( diff --git a/src/auth/models/UsuarioToken.ts b/src/auth/models/UsuarioToken.ts index 73f6571..5e74ff2 100644 --- a/src/auth/models/UsuarioToken.ts +++ b/src/auth/models/UsuarioToken.ts @@ -1,3 +1,6 @@ +import { Usuario } from "src/modules/usuarios/entities/usuario.entity"; + export interface UsuarioToken { accessToken: string; + usuario: Usuario; } From 975cfed1c9e97251d1e1da6f6a6ef0d97eab4105 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Wed, 6 Dec 2023 00:38:51 -0300 Subject: [PATCH 108/115] =?UTF-8?q?Corre=C3=A7=C3=B5es=20da=20pagina=C3=A7?= =?UTF-8?q?=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/categorias/categorias.service.ts | 4 ++-- src/modules/clientes/clientes.service.ts | 10 ++++---- src/modules/cotacoes/cotacoes.service.ts | 24 +++++++++---------- .../fornecedores/fornecedores.service.ts | 10 ++++---- .../insumos-produtos-base.service.ts | 2 +- src/modules/insumos/insumos.service.ts | 4 ++-- .../lista-insumos/lista-insumos.service.ts | 10 ++++---- src/modules/orcamentos/orcamentos.service.ts | 6 ++--- src/modules/pedidos/pedidos.service.ts | 6 ++--- .../produtos-base/produtos-base.service.ts | 4 ++-- src/modules/produtos/produtos.service.ts | 2 +- src/modules/usuarios/usuarios.service.ts | 6 ++--- 12 files changed, 44 insertions(+), 44 deletions(-) diff --git a/src/modules/categorias/categorias.service.ts b/src/modules/categorias/categorias.service.ts index 22af1d9..eec30ca 100644 --- a/src/modules/categorias/categorias.service.ts +++ b/src/modules/categorias/categorias.service.ts @@ -15,8 +15,8 @@ export class CategoriasService { skip, take: perPage, where:{ - OR: [{ titulo: { contains: titulo_like } }, - { tipo: { contains: titulo_like } },], + OR: [{ titulo: { contains: titulo_like, mode: 'insensitive' } }, + { tipo: { contains: titulo_like , mode: 'insensitive'} },], }, }); }else{ diff --git a/src/modules/clientes/clientes.service.ts b/src/modules/clientes/clientes.service.ts index cedde06..e8809e3 100644 --- a/src/modules/clientes/clientes.service.ts +++ b/src/modules/clientes/clientes.service.ts @@ -21,11 +21,11 @@ export class ClientesService { take: perPage, where: { OR: [ - { nome: { contains: nome_like } }, - { email: { contains: nome_like } }, - { rua: { contains: nome_like } }, - { nomeFantasia: { contains: nome_like } }, - { razaoSocial: { contains: nome_like } }, + { nome: { contains: nome_like , mode: 'insensitive' } }, + { email: { contains: nome_like , mode: 'insensitive'} }, + { rua: { contains: nome_like , mode: 'insensitive'} }, + { nomeFantasia: { contains: nome_like, mode: 'insensitive' } }, + { razaoSocial: { contains: nome_like , mode: 'insensitive'} }, ], }, }); diff --git a/src/modules/cotacoes/cotacoes.service.ts b/src/modules/cotacoes/cotacoes.service.ts index 8a7397b..ddbc2f2 100644 --- a/src/modules/cotacoes/cotacoes.service.ts +++ b/src/modules/cotacoes/cotacoes.service.ts @@ -53,10 +53,10 @@ export class CotacoesService { idFornecedor: idfornecedor, obsoleta:false, OR: [ - { variante: { insumo: { titulo: { contains: nome_like } } } }, - { fornecedor: { nome: { contains: nome_like } } }, - { fornecedor: { nomeFantasia: { contains: nome_like } } }, - { fornecedor: { razaoSocial: { contains: nome_like } } }, + { variante: { insumo: { titulo: { contains: nome_like, mode: 'insensitive' } } } }, + { fornecedor: { nome: { contains: nome_like, mode: 'insensitive' } } }, + { fornecedor: { nomeFantasia: { contains: nome_like, mode: 'insensitive' } } }, + { fornecedor: { razaoSocial: { contains: nome_like, mode: 'insensitive' } } }, ], }, }); @@ -68,10 +68,10 @@ export class CotacoesService { idVariante: id, obsoleta:false, OR: [ - { variante: { insumo: { titulo: { contains: nome_like } } } }, - { fornecedor: { nome: { contains: nome_like } } }, - { fornecedor: { nomeFantasia: { contains: nome_like } } }, - { fornecedor: { razaoSocial: { contains: nome_like } } }, + { variante: { insumo: { titulo: { contains: nome_like, mode: 'insensitive' } } } }, + { fornecedor: { nome: { contains: nome_like, mode: 'insensitive' } } }, + { fornecedor: { nomeFantasia: { contains: nome_like, mode: 'insensitive' } } }, + { fornecedor: { razaoSocial: { contains: nome_like, mode: 'insensitive' } } }, ], }, }); @@ -81,10 +81,10 @@ export class CotacoesService { take: perPage, where: { OR: [ - { variante: { insumo: { titulo: { contains: nome_like } } } }, - { fornecedor: { nome: { contains: nome_like } } }, - { fornecedor: { nomeFantasia: { contains: nome_like } } }, - { fornecedor: { razaoSocial: { contains: nome_like } } }, + { variante: { insumo: { titulo: { contains: nome_like, mode: 'insensitive' } } } }, + { fornecedor: { nome: { contains: nome_like, mode: 'insensitive' } } }, + { fornecedor: { nomeFantasia: { contains: nome_like , mode: 'insensitive'} } }, + { fornecedor: { razaoSocial: { contains: nome_like , mode: 'insensitive'} } }, ], }, }); diff --git a/src/modules/fornecedores/fornecedores.service.ts b/src/modules/fornecedores/fornecedores.service.ts index 1fd3034..f5afb73 100644 --- a/src/modules/fornecedores/fornecedores.service.ts +++ b/src/modules/fornecedores/fornecedores.service.ts @@ -16,11 +16,11 @@ export class FornecedoresService { skip, take: perPage, where:{ - OR: [{ nome: { contains: nome_like } }, - { email: { contains: nome_like } }, - { rua: { contains: nome_like } }, - { nomeFantasia: { contains: nome_like } }, - { razaoSocial: { contains: nome_like } },], + OR: [{ nome: { contains: nome_like, mode: 'insensitive' } }, + { email: { contains: nome_like , mode: 'insensitive'} }, + { rua: { contains: nome_like , mode: 'insensitive'} }, + { nomeFantasia: { contains: nome_like, mode: 'insensitive' } }, + { razaoSocial: { contains: nome_like , mode: 'insensitive'} },], }, }); }else{ diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts index 7a02b1e..27dd4f3 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts @@ -23,7 +23,7 @@ export class InsumosProdutosBaseService { where: { idProdutoBase: idProdutobase, OR: [ - { variantes: { insumo: { titulo: { contains: busca } } } }, + { variantes: { insumo: { titulo: { contains: busca , mode: 'insensitive'} } } }, ], diff --git a/src/modules/insumos/insumos.service.ts b/src/modules/insumos/insumos.service.ts index 8248dee..81b3454 100644 --- a/src/modules/insumos/insumos.service.ts +++ b/src/modules/insumos/insumos.service.ts @@ -21,9 +21,9 @@ export class InsumosService { take: perPage, where: { OR: [ - { titulo: { contains: titulo_like } }, + { titulo: { contains: titulo_like, mode: 'insensitive' } }, - { categoria: { titulo: { contains: titulo_like } } }, + { categoria: { titulo: { contains: titulo_like, mode: 'insensitive' } } }, ], }, }); diff --git a/src/modules/lista-insumos/lista-insumos.service.ts b/src/modules/lista-insumos/lista-insumos.service.ts index d0631df..e7d347c 100644 --- a/src/modules/lista-insumos/lista-insumos.service.ts +++ b/src/modules/lista-insumos/lista-insumos.service.ts @@ -33,20 +33,20 @@ export class ListaInsumosService { where: { idProduto: id, OR: [ - { variante: { insumo: { titulo: { contains: titulo_like } } } }, - { cotacao: { fornecedor: { nome: { contains: titulo_like } } } }, + { variante: { insumo: { titulo: { contains: titulo_like, mode: 'insensitive' } } } }, + { cotacao: { fornecedor: { nome: { contains: titulo_like , mode: 'insensitive'} } } }, { cotacao: { - fornecedor: { nomeFantasia: { contains: titulo_like } }, + fornecedor: { nomeFantasia: { contains: titulo_like, mode: 'insensitive' } }, }, }, { - cotacao: { fornecedor: { razaoSocial: { contains: titulo_like } } }, + cotacao: { fornecedor: { razaoSocial: { contains: titulo_like, mode: 'insensitive' } } }, }, { variante: { - insumo: { categoria: { titulo: { contains: titulo_like } } }, + insumo: { categoria: { titulo: { contains: titulo_like, mode: 'insensitive' } } }, }, }, ], diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index ee982f5..3791ebc 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -53,9 +53,9 @@ export class OrcamentosService { ? undefined : parseInt(titulo_like), }, - { cliente: { nome: { contains: titulo_like } } }, - { cliente: { nomeFantasia: { contains: titulo_like } } }, - { cliente: { razaoSocial: { contains: titulo_like } } }, + { cliente: { nome: { contains: titulo_like, mode: 'insensitive' } } }, + { cliente: { nomeFantasia: { contains: titulo_like, mode: 'insensitive' } } }, + { cliente: { razaoSocial: { contains: titulo_like , mode: 'insensitive'} } }, ], pedido: null, }, diff --git a/src/modules/pedidos/pedidos.service.ts b/src/modules/pedidos/pedidos.service.ts index a9d855a..dd3df90 100644 --- a/src/modules/pedidos/pedidos.service.ts +++ b/src/modules/pedidos/pedidos.service.ts @@ -23,9 +23,9 @@ export class PedidosService { where:{ OR: [ - { orcamento:{ cliente: { nome: { contains: titulo_like } }} }, - { orcamento:{ cliente: { razaoSocial: { contains: titulo_like } }} }, - { orcamento:{ cliente: { nomeFantasia: { contains: titulo_like } }} }, + { orcamento:{ cliente: { nome: { contains: titulo_like, mode: 'insensitive' } }} }, + { orcamento:{ cliente: { razaoSocial: { contains: titulo_like , mode: 'insensitive'} }} }, + { orcamento:{ cliente: { nomeFantasia: { contains: titulo_like , mode: 'insensitive'} }} }, ], }, }); diff --git a/src/modules/produtos-base/produtos-base.service.ts b/src/modules/produtos-base/produtos-base.service.ts index dcc094f..272e2a9 100644 --- a/src/modules/produtos-base/produtos-base.service.ts +++ b/src/modules/produtos-base/produtos-base.service.ts @@ -16,8 +16,8 @@ export class ProdutosBaseService { skip, take: perPage, where:{ - OR: [{ titulo: { contains: titulo_like } }, - { observacoes: { contains: titulo_like } }, + OR: [{ titulo: { contains: titulo_like , mode: 'insensitive'} }, + { observacoes: { contains: titulo_like, mode: 'insensitive' } }, ], }, diff --git a/src/modules/produtos/produtos.service.ts b/src/modules/produtos/produtos.service.ts index 61c6790..6f1e5d8 100644 --- a/src/modules/produtos/produtos.service.ts +++ b/src/modules/produtos/produtos.service.ts @@ -30,7 +30,7 @@ export class ProdutosService { take: perPage, where: { idOrcamento: id, - OR: [{ titulo: { contains: titulo_like } }], + OR: [{ titulo: { contains: titulo_like, mode: 'insensitive' } }], }, }); return produtos; diff --git a/src/modules/usuarios/usuarios.service.ts b/src/modules/usuarios/usuarios.service.ts index 952b8f2..478702e 100644 --- a/src/modules/usuarios/usuarios.service.ts +++ b/src/modules/usuarios/usuarios.service.ts @@ -24,9 +24,9 @@ export class UsuariosService { take: perPage, where: { OR: [ - { nome: { contains: titulo_like } }, - { email: { contains: titulo_like } }, - { cpf: { contains: titulo_like } }, + { nome: { contains: titulo_like, mode: 'insensitive' } }, + { email: { contains: titulo_like, mode: 'insensitive' } }, + { cpf: { contains: titulo_like , mode: 'insensitive'} }, ], }, }); From 8962bd7fa1903c37e58f7273a67790319ebd1872 Mon Sep 17 00:00:00 2001 From: Henrique Vidotto Vinico Neto <99729533+HenriqueVidotto@users.noreply.github.com> Date: Wed, 6 Dec 2023 17:00:21 -0300 Subject: [PATCH 109/115] =?UTF-8?q?Corre=C3=A7=C3=A3o=20count=20pagina?= =?UTF-8?q?=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../categorias/categorias.controller.ts | 2 +- src/modules/categorias/categorias.service.ts | 11 +++++++--- src/modules/clientes/clientes.controller.ts | 2 +- src/modules/clientes/clientes.service.ts | 12 +++++++++-- .../fornecedores/fornecedores.controller.ts | 2 +- .../fornecedores/fornecedores.service.ts | 10 +++++++-- .../insumos-produtos-base.controller.ts | 2 +- .../insumos-produtos-base.service.ts | 7 ++++++- src/modules/insumos/insumos.controller.ts | 2 +- src/modules/insumos/insumos.service.ts | 10 +++++++-- .../lista-insumos/lista-insumos.controller.ts | 2 +- .../lista-insumos/lista-insumos.service.ts | 20 +++++++++++++++++- src/modules/pedidos/pedidos.controller.ts | 2 +- src/modules/pedidos/pedidos.service.ts | 11 ++++++++-- .../produtos-base/produtos-base.controller.ts | 2 +- .../produtos-base/produtos-base.service.ts | 9 ++++++-- src/modules/produtos/produtos.controller.ts | 2 +- src/modules/produtos/produtos.service.ts | 3 ++- src/modules/usuarios/usuarios.controller.ts | 2 +- src/modules/usuarios/usuarios.service.ts | 10 +++++++-- src/modules/variantes/variantes.controller.ts | 2 +- src/modules/variantes/variantes.service.ts | 21 +++++++++++-------- 22 files changed, 108 insertions(+), 38 deletions(-) diff --git a/src/modules/categorias/categorias.controller.ts b/src/modules/categorias/categorias.controller.ts index 84a7ca4..40e51f4 100644 --- a/src/modules/categorias/categorias.controller.ts +++ b/src/modules/categorias/categorias.controller.ts @@ -45,7 +45,7 @@ export class CategoriasController { Number(perPage), titulo_like ); - const total = await this.categoriasService.countAllCategorias(); + const total = await this.categoriasService.countAllCategorias(titulo_like); res.header('x-total-count',total); return await categorias } diff --git a/src/modules/categorias/categorias.service.ts b/src/modules/categorias/categorias.service.ts index eec30ca..e1a12b2 100644 --- a/src/modules/categorias/categorias.service.ts +++ b/src/modules/categorias/categorias.service.ts @@ -28,14 +28,19 @@ export class CategoriasService { return categorias ; } - async findOneByTitle(titulo: string) { + async findOneByTitle(titulo: string ) { return await this.prismaService.categoria.findFirst({ where: { titulo }, }); } - async countAllCategorias() { - return await this.prismaService.categoria.count({}); + async countAllCategorias(titulo_like : string = '') { + return await this.prismaService.categoria.count({ + where:{ + OR: [{ titulo: { contains: titulo_like } }, + { tipo: { contains: titulo_like } },], + }, + }); } async findManyByTitle(titulo: string) { diff --git a/src/modules/clientes/clientes.controller.ts b/src/modules/clientes/clientes.controller.ts index f708384..95310d6 100644 --- a/src/modules/clientes/clientes.controller.ts +++ b/src/modules/clientes/clientes.controller.ts @@ -32,7 +32,7 @@ export class ClientesController { Number(perPage), nome_like ); - const total = await this.clientesService.countAllCliente(); + const total = await this.clientesService.countAllCliente(nome_like); res.header('x-total-count',total); return await clientes } diff --git a/src/modules/clientes/clientes.service.ts b/src/modules/clientes/clientes.service.ts index e8809e3..6e9e394 100644 --- a/src/modules/clientes/clientes.service.ts +++ b/src/modules/clientes/clientes.service.ts @@ -114,8 +114,16 @@ export class ClientesService { }); } - async countAllCliente() { - return await this.prismaService.cliente.count({}); + async countAllCliente(nome_like: string = '') { + return await this.prismaService.cliente.count({ where: { + OR: [ + { nome: { contains: nome_like , mode: 'insensitive' } }, + { email: { contains: nome_like , mode: 'insensitive'} }, + { rua: { contains: nome_like , mode: 'insensitive'} }, + { nomeFantasia: { contains: nome_like, mode: 'insensitive' } }, + { razaoSocial: { contains: nome_like , mode: 'insensitive'} }, + ], + },}); } async create(createClienteDto: CreateClienteDto) { diff --git a/src/modules/fornecedores/fornecedores.controller.ts b/src/modules/fornecedores/fornecedores.controller.ts index 3f91545..511d3ba 100644 --- a/src/modules/fornecedores/fornecedores.controller.ts +++ b/src/modules/fornecedores/fornecedores.controller.ts @@ -43,7 +43,7 @@ export class FornecedoresController { Number(perPage), nome_like ); - const total = await this.fornecedoresService.countAllFornecedor(); + const total = await this.fornecedoresService.countAllFornecedor(nome_like); res.header('x-total-count',total); return await fornecedores } diff --git a/src/modules/fornecedores/fornecedores.service.ts b/src/modules/fornecedores/fornecedores.service.ts index f5afb73..d8ec208 100644 --- a/src/modules/fornecedores/fornecedores.service.ts +++ b/src/modules/fornecedores/fornecedores.service.ts @@ -44,8 +44,14 @@ export class FornecedoresService { where: { nome, email, telefone }, }); } - async countAllFornecedor() { - return await this.prismaService.fornecedor.count({}); + async countAllFornecedor(nome_like: string = '') { + return await this.prismaService.fornecedor.count({where:{ + OR: [{ nome: { contains: nome_like, mode: 'insensitive' } }, + { email: { contains: nome_like , mode: 'insensitive'} }, + { rua: { contains: nome_like , mode: 'insensitive'} }, + { nomeFantasia: { contains: nome_like, mode: 'insensitive' } }, + { razaoSocial: { contains: nome_like , mode: 'insensitive'} },], + },}); } async findExistingFornecedor(id: number, termo: string) { diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts index c7a4827..24aafbc 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.controller.ts @@ -44,7 +44,7 @@ export class InsumosProdutosBaseController { busca, ); - const total = await this.insumosProdutosBaseService.countAll(+id); + const total = await this.insumosProdutosBaseService.countAll(+id,busca); res.header('x-total-count',total); return await insumosBase } diff --git a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts index 27dd4f3..7fe6951 100644 --- a/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts +++ b/src/modules/insumos-produtos-base/insumos-produtos-base.service.ts @@ -50,10 +50,15 @@ export class InsumosProdutosBaseService { return { data: { message: 'Insumo não existe' } }; } - async countAll(idProdutobase: number) { + async countAll(idProdutobase: number,busca : string = '') { return await this.prismaService.insumoProdutoBase.count({ where: { idProdutoBase: idProdutobase, + OR: [ + { variantes: { insumo: { titulo: { contains: busca , mode: 'insensitive'} } } }, + + + ], }, }); } diff --git a/src/modules/insumos/insumos.controller.ts b/src/modules/insumos/insumos.controller.ts index c67198c..bcb7a18 100644 --- a/src/modules/insumos/insumos.controller.ts +++ b/src/modules/insumos/insumos.controller.ts @@ -43,7 +43,7 @@ export class InsumosController { Number(perPage), titulo_like ); - const total = await this.insumosService.countAll(); + const total = await this.insumosService.countAll(titulo_like); res.header('x-total-count',total); return await cotacoes } diff --git a/src/modules/insumos/insumos.service.ts b/src/modules/insumos/insumos.service.ts index 81b3454..f73ee21 100644 --- a/src/modules/insumos/insumos.service.ts +++ b/src/modules/insumos/insumos.service.ts @@ -74,8 +74,14 @@ export class InsumosService { }); } - async countAll() { - return await this.prismaService.insumo.count(); + async countAll(titulo_like: string = '') { + return await this.prismaService.insumo.count({where: { + OR: [ + { titulo: { contains: titulo_like, mode: 'insensitive' } }, + + { categoria: { titulo: { contains: titulo_like, mode: 'insensitive' } } }, + ], + },}); } async update(id: number, updateInsumoDto: UpdateInsumoDto) { diff --git a/src/modules/lista-insumos/lista-insumos.controller.ts b/src/modules/lista-insumos/lista-insumos.controller.ts index 101da75..85b9a31 100644 --- a/src/modules/lista-insumos/lista-insumos.controller.ts +++ b/src/modules/lista-insumos/lista-insumos.controller.ts @@ -48,7 +48,7 @@ export class ListaInsumosController { Number(perPage), titulo_like, ); - const total = await this.listaInsumosService.countAll(+id); + const total = await this.listaInsumosService.countAll(+id,titulo_like); res.header('x-total-count', total); return await listasinsumos; } diff --git a/src/modules/lista-insumos/lista-insumos.service.ts b/src/modules/lista-insumos/lista-insumos.service.ts index e7d347c..fbac516 100644 --- a/src/modules/lista-insumos/lista-insumos.service.ts +++ b/src/modules/lista-insumos/lista-insumos.service.ts @@ -55,10 +55,28 @@ export class ListaInsumosService { return listainsumos; } - async countAll(id: number) { + async countAll(id: number, titulo_like: string = '') { return await this.prismaService.listaInsumo.count({ where: { idProduto: id, + OR: [ + { variante: { insumo: { titulo: { contains: titulo_like, mode: 'insensitive' } } } }, + { cotacao: { fornecedor: { nome: { contains: titulo_like , mode: 'insensitive'} } } }, + { + cotacao: { + fornecedor: { nomeFantasia: { contains: titulo_like, mode: 'insensitive' } }, + }, + }, + { + cotacao: { fornecedor: { razaoSocial: { contains: titulo_like, mode: 'insensitive' } } }, + }, + + { + variante: { + insumo: { categoria: { titulo: { contains: titulo_like, mode: 'insensitive' } } }, + }, + }, + ], }, }); } diff --git a/src/modules/pedidos/pedidos.controller.ts b/src/modules/pedidos/pedidos.controller.ts index 9342781..b7c0d7f 100644 --- a/src/modules/pedidos/pedidos.controller.ts +++ b/src/modules/pedidos/pedidos.controller.ts @@ -43,7 +43,7 @@ export class PedidosController { Number(perPage), titulo_like ); - const total = await this.pedidosService.countAll(); + const total = await this.pedidosService.countAll(titulo_like); res.header('x-total-count',total); return await pedidos } diff --git a/src/modules/pedidos/pedidos.service.ts b/src/modules/pedidos/pedidos.service.ts index dd3df90..3bb2ebb 100644 --- a/src/modules/pedidos/pedidos.service.ts +++ b/src/modules/pedidos/pedidos.service.ts @@ -8,8 +8,15 @@ import { Orcamento } from '../orcamentos/entities/orcamento.entity'; @Injectable() export class PedidosService { constructor(private readonly prismaService: PrismaService) {} - async countAll() { - return await this.prismaService.pedido.count({}); + async countAll(titulo_like: string = '') { + return await this.prismaService.pedido.count({ where:{ + OR: [ + + { orcamento:{ cliente: { nome: { contains: titulo_like, mode: 'insensitive' } }} }, + { orcamento:{ cliente: { razaoSocial: { contains: titulo_like , mode: 'insensitive'} }} }, + { orcamento:{ cliente: { nomeFantasia: { contains: titulo_like , mode: 'insensitive'} }} }, + ], + },}); } async findAllWithPagination(page: number, perPage: number, titulo_like? : string) { diff --git a/src/modules/produtos-base/produtos-base.controller.ts b/src/modules/produtos-base/produtos-base.controller.ts index a14452f..f76c56f 100644 --- a/src/modules/produtos-base/produtos-base.controller.ts +++ b/src/modules/produtos-base/produtos-base.controller.ts @@ -45,7 +45,7 @@ export class ProdutosBaseController { Number(perPage), titulo_like ); - const total = await this.produtosBaseService.countAll(); + const total = await this.produtosBaseService.countAll(titulo_like); res.header('x-total-count',total); return await produtos } diff --git a/src/modules/produtos-base/produtos-base.service.ts b/src/modules/produtos-base/produtos-base.service.ts index 272e2a9..83626b6 100644 --- a/src/modules/produtos-base/produtos-base.service.ts +++ b/src/modules/produtos-base/produtos-base.service.ts @@ -51,8 +51,13 @@ export class ProdutosBaseService { return { data: { message: 'Titulo ja cadastrado' } }; } - async countAll() { - return await this.prismaService.produtoBase.count(); + async countAll(titulo_like: string = '') { + return await this.prismaService.produtoBase.count({where:{ + OR: [{ titulo: { contains: titulo_like , mode: 'insensitive'} }, + { observacoes: { contains: titulo_like, mode: 'insensitive' } }, + + ], + },}); } async findAll() { diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index c776b4a..2327b67 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -66,7 +66,7 @@ export class ProdutosController { Number(perPage), titulo_like ); - const total = await this.produtosService.countAll(+id); + const total = await this.produtosService.countAll(+id,titulo_like); res.header('x-total-count',total); return await produtos } diff --git a/src/modules/produtos/produtos.service.ts b/src/modules/produtos/produtos.service.ts index 6f1e5d8..3d8434c 100644 --- a/src/modules/produtos/produtos.service.ts +++ b/src/modules/produtos/produtos.service.ts @@ -72,10 +72,11 @@ export class ProdutosService { }); } - async countAll(id: number) { + async countAll(id: number, titulo_like: string = '') { return await this.prismaService.produto.count({ where: { idOrcamento: id, + OR: [{ titulo: { contains: titulo_like, mode: 'insensitive' } }], }, }); } diff --git a/src/modules/usuarios/usuarios.controller.ts b/src/modules/usuarios/usuarios.controller.ts index 724980c..f121e79 100644 --- a/src/modules/usuarios/usuarios.controller.ts +++ b/src/modules/usuarios/usuarios.controller.ts @@ -68,7 +68,7 @@ export class UsuariosController { Number(perPage), titulo_like, ); - const total = await this.usuariosService.countAll(); + const total = await this.usuariosService.countAll(titulo_like); res.header('x-total-count', total); return await usuarios; } diff --git a/src/modules/usuarios/usuarios.service.ts b/src/modules/usuarios/usuarios.service.ts index 478702e..c42b518 100644 --- a/src/modules/usuarios/usuarios.service.ts +++ b/src/modules/usuarios/usuarios.service.ts @@ -78,8 +78,14 @@ export class UsuariosService { return usuarios; } - async countAll() { - return await this.prismaService.usuario.count(); + async countAll(titulo_like: string = '') { + return await this.prismaService.usuario.count({where: { + OR: [ + { nome: { contains: titulo_like, mode: 'insensitive' } }, + { email: { contains: titulo_like, mode: 'insensitive' } }, + { cpf: { contains: titulo_like , mode: 'insensitive'} }, + ], + },}); } async findAll() { diff --git a/src/modules/variantes/variantes.controller.ts b/src/modules/variantes/variantes.controller.ts index f180d0f..c750faa 100644 --- a/src/modules/variantes/variantes.controller.ts +++ b/src/modules/variantes/variantes.controller.ts @@ -65,7 +65,7 @@ export class VariantesController { Number(perPage), titulo_like, ); - const total = await this.variantesService.countAllById(+idInsumo); + const total = await this.variantesService.countAllById(+idInsumo,titulo_like); res.header('x-total-count', total); return await variantes; } diff --git a/src/modules/variantes/variantes.service.ts b/src/modules/variantes/variantes.service.ts index 7ab5cdd..098da06 100644 --- a/src/modules/variantes/variantes.service.ts +++ b/src/modules/variantes/variantes.service.ts @@ -26,13 +26,10 @@ export class VariantesService { take: perPage, where: { idInsumo: idInsumo, - //OR: [ - /* - { nome: { contains: titulo_like } }, - { email: { contains: titulo_like } }, - { cpf: { contains: titulo_like } }, - */ - //], + OR: [ + + { variante: { contains: titulo_like } }, + ], }, include: { insumo: true }, }); @@ -74,7 +71,13 @@ export class VariantesService { async countAll() { return await this.prismaService.variante.count(); } - async countAllById(idInsumo: number) { - return await this.prismaService.variante.count({ where: { idInsumo:idInsumo } }); + async countAllById(idInsumo: number, titulo_like: string = '') { + return await this.prismaService.variante.count({ + where: { idInsumo:idInsumo, + OR: [ + + { variante: { contains: titulo_like, mode: 'insensitive' } }, + ], }, + }); } } From 9447b354ee650592e8f87276f123f4452e0871d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Gon=C3=A7alves?= <74377524+gaabhenrique@users.noreply.github.com> Date: Sun, 22 Sep 2024 16:20:17 -0300 Subject: [PATCH 110/115] Prepara o ambiente para deploy via node --- .env.example | 5 +++++ .gitignore | 3 ++- docker-compose.yml | 31 +++++++++++++++++++++++++++++++ package-lock.json | 42 ++++++++++++++++++++++++++++++++++++++++++ package.json | 2 ++ prisma/seed.ts | 8 +++----- src/app.module.ts | 2 ++ src/main.ts | 2 +- 8 files changed, 88 insertions(+), 7 deletions(-) create mode 100644 .env.example create mode 100644 docker-compose.yml diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..472c674 --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +JWT_SECRET=secret + +DATABASE_URL="postgresql://user:password@host:port/database?schema=public" + +PORT=3001 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 68c9d3d..6151ec2 100644 --- a/.gitignore +++ b/.gitignore @@ -131,4 +131,5 @@ dist package-lock.json -prisma/migrations \ No newline at end of file +prisma/migrations +.env.prod diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..9e560b7 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,31 @@ +version: '3.9' + +services: + postgres: + image: postgres:latest + container_name: controlserra + restart: always + environment: + POSTGRES_USER: controlserra + POSTGRES_PASSWORD: controlserra + POSTGRES_DB: controlserra + ports: + - "5436:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + + pgadmin: + image: dpage/pgadmin4:latest + container_name: controlserra_pgadmin + restart: always + environment: + PGADMIN_DEFAULT_EMAIL: controlserra + PGADMIN_DEFAULT_PASSWORD: controlserra + ports: + - "5056:80" + depends_on: + - postgres + + +volumes: + postgres_data: diff --git a/package-lock.json b/package-lock.json index b72c1dc..0023d41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "UNLICENSED", "dependencies": { "@nestjs/common": "^10.0.0", + "@nestjs/config": "^3.2.3", "@nestjs/core": "^10.0.0", "@nestjs/jwt": "^10.2.0", "@nestjs/mapped-types": "*", @@ -20,6 +21,7 @@ "bcrypt": "^5.1.1", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", + "control-serra-backend": "file:", "express": "^4.18.2", "passport": "^0.6.0", "passport-jwt": "^4.0.1", @@ -1652,6 +1654,21 @@ } } }, + "node_modules/@nestjs/config": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.2.3.tgz", + "integrity": "sha512-p6yv/CvoBewJ72mBq4NXgOAi2rSQNWx3a+IMJLVKS2uiwFCOQQuiIatGwq6MRjXV3Jr+B41iUO8FIf4xBrZ4/w==", + "license": "MIT", + "dependencies": { + "dotenv": "16.4.5", + "dotenv-expand": "10.0.0", + "lodash": "4.17.21" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "rxjs": "^7.1.0" + } + }, "node_modules/@nestjs/core": { "version": "10.2.7", "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.2.7.tgz", @@ -3726,6 +3743,10 @@ "node": ">= 0.6" } }, + "node_modules/control-serra-backend": { + "resolved": "", + "link": true + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -4138,6 +4159,27 @@ "node": ">=6.0.0" } }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", diff --git a/package.json b/package.json index 8d8c5f9..e40b5a2 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ }, "dependencies": { "@nestjs/common": "^10.0.0", + "@nestjs/config": "^3.2.3", "@nestjs/core": "^10.0.0", "@nestjs/jwt": "^10.2.0", "@nestjs/mapped-types": "*", @@ -31,6 +32,7 @@ "bcrypt": "^5.1.1", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", + "control-serra-backend": "file:", "express": "^4.18.2", "passport": "^0.6.0", "passport-jwt": "^4.0.1", diff --git a/prisma/seed.ts b/prisma/seed.ts index c398ff4..7745cec 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -1,7 +1,5 @@ import { PrismaClient } from '@prisma/client'; import { faker } from '@faker-js/faker'; -import { UsuariosService } from '../src/modules/usuarios/usuarios.service'; -import { PrismaService } from 'src/databases/prisma/prisma.service'; import { CreateUsuarioDto } from 'src/modules/usuarios/dto/create-usuario.dto'; import * as bcrypt from 'bcrypt'; @@ -21,9 +19,9 @@ async function seedDatabase() { //USUARIOS await createUser({ tipoUsuario: 'Administrador', - nome: 'Nivaldo Tavares', - cpf: '890982450649', - email: 'admin@admin.com', + nome: 'Convidado', + cpf: '99999999999', + email: 'Convidado@Convidado.com', telefone: '8138225561', senha: 'admin', }); diff --git a/src/app.module.ts b/src/app.module.ts index 2f2a9e0..c5eae1e 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -18,9 +18,11 @@ import { PrismaModule } from './databases/prisma/prisma.module'; import { AuthModule } from './auth/auth.module'; import { APP_GUARD } from '@nestjs/core'; import { JwtAuthGuard } from './auth/guards/jwt-auth.guard'; +import { ConfigModule } from '@nestjs/config'; @Module({ imports: [ + ConfigModule.forRoot(), InsumosModule, CategoriasModule, FornecedoresModule, diff --git a/src/main.ts b/src/main.ts index 71d5d43..4a16bc2 100644 --- a/src/main.ts +++ b/src/main.ts @@ -6,7 +6,7 @@ import { ValidationPipe } from '@nestjs/common'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.enableCors(); - + app.useGlobalPipes( new ValidationPipe({ transform: true, From 3e666eb804156ba46fb1fdb915ba9cc9e48103f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Gon=C3=A7alves?= <74377524+gaabhenrique@users.noreply.github.com> Date: Sun, 22 Sep 2024 16:37:54 -0300 Subject: [PATCH 111/115] Implementa o script de build & seed --- package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e40b5a2..91298b3 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,9 @@ "test:watch": "jest --watch", "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", - "test:e2e": "jest --config ./test/jest-e2e.json" + "test:e2e": "jest --config ./test/jest-e2e.json", + "seed": "ts-node prisma/seed.ts", + "build-and-seed": "npm run build && npm run seed" }, "dependencies": { "@nestjs/common": "^10.0.0", @@ -92,4 +94,4 @@ "prisma": { "seed": "ts-node prisma/seed.ts" } -} +} \ No newline at end of file From 7640dc248a233cb8f175efa2f01fd0832ac8ea8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Gon=C3=A7alves?= <74377524+gaabhenrique@users.noreply.github.com> Date: Mon, 23 Sep 2024 14:29:17 -0300 Subject: [PATCH 112/115] Implementa logs durante o seed da database e o comando de reset --- package.json | 3 +- prisma/seed.ts | 96 ++++++++++++++++++++++++++------------------------ 2 files changed, 51 insertions(+), 48 deletions(-) diff --git a/package.json b/package.json index 91298b3..eb1bbf0 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,9 @@ "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./test/jest-e2e.json", + "reset-db": "npx prisma migrate reset --skip-seed", "seed": "ts-node prisma/seed.ts", - "build-and-seed": "npm run build && npm run seed" + "build-and-seed": "npm run reset-db && npm run build && npm run seed" }, "dependencies": { "@nestjs/common": "^10.0.0", diff --git a/prisma/seed.ts b/prisma/seed.ts index 7745cec..7dd3f23 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -623,7 +623,7 @@ async function seedDatabase() { validade: faker.date.future(), dataOrcamento: faker.date.recent(), totalMaoObra: 710, - totalMateriais: 890.20, + totalMateriais: 890.2, status: faker.helpers.arrayElement([ 'Pendente', 'Em_Processo', @@ -674,7 +674,7 @@ async function seedDatabase() { validade: faker.date.future(), dataOrcamento: faker.date.recent(), totalMaoObra: 3455, - totalMateriais: 1200.50, + totalMateriais: 1200.5, status: faker.helpers.arrayElement([ 'Pendente', 'Em_Processo', @@ -691,7 +691,7 @@ async function seedDatabase() { validade: faker.date.future(), dataOrcamento: faker.date.recent(), totalMaoObra: 504, - totalMateriais: 943.50, + totalMateriais: 943.5, status: faker.helpers.arrayElement([ 'Pendente', 'Em_Processo', @@ -708,7 +708,7 @@ async function seedDatabase() { validade: faker.date.future(), dataOrcamento: faker.date.recent(), totalMaoObra: 253, - totalMateriais: 449.70, + totalMateriais: 449.7, status: faker.helpers.arrayElement([ 'Pendente', 'Em_Processo', @@ -732,7 +732,7 @@ async function seedDatabase() { for (let i = 0; i < 6; i++) { await prisma.pedido.create({ data: { - pagamento: faker.number.int({min: 30, max: 20000}), + pagamento: faker.number.int({ min: 30, max: 20000 }), status: faker.helpers.arrayElement(['Pendente']), idOrcamento: generateUniqueOrcamentoId(), // Gere um ID de orçamento aleatório }, @@ -1049,7 +1049,7 @@ async function seedDatabase() { idProduto: faker.number.int({ min: 1, max: 6 }), // Gere um ID de produto aleatório idVariante: 1, // Gere um ID de insumo aleatório idCotacao: 1, // Gere um ID de cotação aleatório - valorUnitario: faker.number.int({min:50, max:500}), + valorUnitario: faker.number.int({ min: 50, max: 500 }), }, }); await prisma.listaInsumo.create({ @@ -1058,7 +1058,7 @@ async function seedDatabase() { idProduto: faker.number.int({ min: 1, max: 6 }), // Gere um ID de produto aleatório idVariante: 1, // Gere um ID de insumo aleatório idCotacao: 2, // Gere um ID de cotação aleatório - valorUnitario: faker.number.int({min:50, max:500}), + valorUnitario: faker.number.int({ min: 50, max: 500 }), }, }); await prisma.listaInsumo.create({ @@ -1067,7 +1067,7 @@ async function seedDatabase() { idProduto: faker.number.int({ min: 1, max: 6 }), // Gere um ID de produto aleatório idVariante: 1, // Gere um ID de insumo aleatório idCotacao: 3, // Gere um ID de cotação aleatório - valorUnitario: faker.number.int({min:50, max:500}), + valorUnitario: faker.number.int({ min: 50, max: 500 }), }, }); await prisma.listaInsumo.create({ @@ -1076,7 +1076,7 @@ async function seedDatabase() { idProduto: faker.number.int({ min: 1, max: 6 }), // Gere um ID de produto aleatório idVariante: 6, // Gere um ID de insumo aleatório idCotacao: 1, // Gere um ID de cotação aleatório - valorUnitario: faker.number.int({min:50, max:500}), + valorUnitario: faker.number.int({ min: 50, max: 500 }), }, }); await prisma.listaInsumo.create({ @@ -1085,58 +1085,58 @@ async function seedDatabase() { idProduto: faker.number.int({ min: 1, max: 6 }), // Gere um ID de produto aleatório idVariante: 5, // Gere um ID de insumo aleatório idCotacao: 2, // Gere um ID de cotação aleatório - valorUnitario: faker.number.int({min:50, max:500}), + valorUnitario: faker.number.int({ min: 50, max: 500 }), }, }); //PRODUTOS BASE - await prisma.produtoBase.create({ - data: { - titulo: 'Portão 2 x 2m', - observacoes: '', - }, - }); + await prisma.produtoBase.create({ + data: { + titulo: 'Portão 2 x 2m', + observacoes: '', + }, + }); - await prisma.produtoBase.create({ - data: { - titulo: 'Portão 3 x 3m', - observacoes: '', - }, - }); + await prisma.produtoBase.create({ + data: { + titulo: 'Portão 3 x 3m', + observacoes: '', + }, + }); - await prisma.produtoBase.create({ - data: { - titulo: 'Portão 4 x 4m', - observacoes: '', - }, - }); + await prisma.produtoBase.create({ + data: { + titulo: 'Portão 4 x 4m', + observacoes: '', + }, + }); - await prisma.produtoBase.create({ - data: { - titulo: 'Janela 1 x 2m', - observacoes: '', - }, - }); + await prisma.produtoBase.create({ + data: { + titulo: 'Janela 1 x 2m', + observacoes: '', + }, + }); - await prisma.produtoBase.create({ - data: { - titulo: 'Suporte para espelho 20 x 20cm', - observacoes: '', - }, - }); + await prisma.produtoBase.create({ + data: { + titulo: 'Suporte para espelho 20 x 20cm', + observacoes: '', + }, + }); - await prisma.produtoBase.create({ - data: { - titulo: 'telha 2 x 2', - observacoes: '', - }, - }); + await prisma.produtoBase.create({ + data: { + titulo: 'telha 2 x 2', + observacoes: '', + }, + }); //INSUMOS BASE for (let i = 0; i < 12; i++) { await prisma.insumoProdutoBase.create({ data: { - quantidade: faker.number.int({min: 1, max: 6}), + quantidade: faker.number.int({ min: 1, max: 6 }), idProdutoBase: faker.number.int({ min: 1, max: 6 }), // Gere um ID de produto base aleatório idVariante: faker.number.int({ min: 1, max: 12 }), // Gere um ID de insumo aleatório }, @@ -1146,10 +1146,12 @@ async function seedDatabase() { console.log('Dados populados com sucesso'); } +console.log('Populando a database...'); seedDatabase() .catch((error) => { console.error('Erro ao popular o banco de dados:', error); }) .finally(async () => { await prisma.$disconnect(); + console.log('Processo finalizado'); }); From df791c856317797d7a4d138a3a9e9a1e3e5f4f05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Gon=C3=A7alves?= <74377524+gaabhenrique@users.noreply.github.com> Date: Mon, 23 Sep 2024 14:36:36 -0300 Subject: [PATCH 113/115] =?UTF-8?q?Implementa=20a=20flag=20para=20for?= =?UTF-8?q?=C3=A7ar=20o=20reset=20da=20database=20ao=20rodar=20npm=20run?= =?UTF-8?q?=20reset-db?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index eb1bbf0..2f2be94 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./test/jest-e2e.json", - "reset-db": "npx prisma migrate reset --skip-seed", + "reset-db": "npx prisma migrate reset --force --skip-seed", "seed": "ts-node prisma/seed.ts", "build-and-seed": "npm run reset-db && npm run build && npm run seed" }, From d77253ed678e327b1499ce9760ed496f1ed5a6a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Gon=C3=A7alves?= <74377524+gaabhenrique@users.noreply.github.com> Date: Mon, 23 Sep 2024 14:54:03 -0300 Subject: [PATCH 114/115] Remove console logs --- prisma/seed.ts | 4 ++-- src/main.ts | 7 +------ src/modules/lista-insumos/lista-insumos.service.ts | 2 -- src/modules/orcamentos/orcamentos.controller.ts | 1 - src/modules/orcamentos/orcamentos.service.ts | 2 -- src/modules/produtos/produtos.controller.ts | 2 -- 6 files changed, 3 insertions(+), 15 deletions(-) diff --git a/prisma/seed.ts b/prisma/seed.ts index 7dd3f23..31df3fc 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -20,8 +20,8 @@ async function seedDatabase() { await createUser({ tipoUsuario: 'Administrador', nome: 'Convidado', - cpf: '99999999999', - email: 'Convidado@Convidado.com', + cpf: '51960443967', + email: 'admin@admin.com', telefone: '8138225561', senha: 'admin', }); diff --git a/src/main.ts b/src/main.ts index 4a16bc2..8786265 100644 --- a/src/main.ts +++ b/src/main.ts @@ -37,12 +37,7 @@ async function bootstrap() { const document = SwaggerModule.createDocument(app, config); SwaggerModule.setup('api', app, document); - - console.log( - 'Server running at port: ', - process.env.PORT ? Number(process.env.PORT) : 3000, - ); - + await app.listen(process.env.PORT ? Number(process.env.PORT) : 3000); } diff --git a/src/modules/lista-insumos/lista-insumos.service.ts b/src/modules/lista-insumos/lista-insumos.service.ts index fbac516..27d9400 100644 --- a/src/modules/lista-insumos/lista-insumos.service.ts +++ b/src/modules/lista-insumos/lista-insumos.service.ts @@ -154,10 +154,8 @@ export class ListaInsumosService { } async selectCotacao(idItemListaInsumo: number, idCotacao: number) { - console.log(idItemListaInsumo, idCotacao); const cotacao = await this.cotacaoServices.findOne(idCotacao); - console.log(idItemListaInsumo, idCotacao); if (!cotacao) { return { data: { message: 'Essa cotação não existe' } }; } diff --git a/src/modules/orcamentos/orcamentos.controller.ts b/src/modules/orcamentos/orcamentos.controller.ts index b433900..fec2b10 100644 --- a/src/modules/orcamentos/orcamentos.controller.ts +++ b/src/modules/orcamentos/orcamentos.controller.ts @@ -59,7 +59,6 @@ export class OrcamentosController { @CurrentUser() usuario: Usuario, @Body() createOrcamentoDto: CreateOrcamentoDto, ) { - console.log(usuario) return await this.orcamentosService.create(createOrcamentoDto, usuario); } diff --git a/src/modules/orcamentos/orcamentos.service.ts b/src/modules/orcamentos/orcamentos.service.ts index 3791ebc..c946d44 100644 --- a/src/modules/orcamentos/orcamentos.service.ts +++ b/src/modules/orcamentos/orcamentos.service.ts @@ -69,7 +69,6 @@ export class OrcamentosService { const clienteExists = await this.findCliente(createOrcamentoDto.idCliente); if (clienteExists) { createOrcamentoDto.criadorPor = usuario.id; - console.log(createOrcamentoDto) return await this.prismaService.orcamento.create({ data: createOrcamentoDto, }); @@ -151,7 +150,6 @@ export class OrcamentosService { async recalcular(idOrcamento: number, idProduto: number) { - console.log("Entrou na funçao ", idOrcamento ) await this.produtoService.recalcularValor(idProduto); const produtos = await this.produtoService.findProdutoOrc(idOrcamento); diff --git a/src/modules/produtos/produtos.controller.ts b/src/modules/produtos/produtos.controller.ts index 2327b67..b856fa2 100644 --- a/src/modules/produtos/produtos.controller.ts +++ b/src/modules/produtos/produtos.controller.ts @@ -24,7 +24,6 @@ export class ProdutosController { @Post('addProdutoBase') async createProdFromBase(@Body() addProdutoBaseDto: addProdutoBaseDto) { - console.log(addProdutoBaseDto) return await this.produtosService.pullProdBase(addProdutoBaseDto); } @@ -74,7 +73,6 @@ export class ProdutosController { @Patch(':id') async update(@Param('id') id: string, @Body() updateProdutoDto: UpdateProdutoDto) { - console.log(updateProdutoDto) return await this.produtosService.update(+id, updateProdutoDto); } From a4498cc2fc47aa3c27b92f9d89fc6af131f10435 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Gon=C3=A7alves?= <74377524+gaabhenrique@users.noreply.github.com> Date: Mon, 23 Sep 2024 15:13:41 -0300 Subject: [PATCH 115/115] Corrige o seed da database para deploy no render --- package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 2f2be94..85198a4 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "start": "nest start", "start:dev": "nest start --watch", "start:debug": "nest start --debug --watch", - "start:prod": "node dist/main", + "start:prod": "npm run reset-db && npm run seed && node dist/src/main", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", @@ -19,8 +19,7 @@ "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./test/jest-e2e.json", "reset-db": "npx prisma migrate reset --force --skip-seed", - "seed": "ts-node prisma/seed.ts", - "build-and-seed": "npm run reset-db && npm run build && npm run seed" + "seed": "ts-node prisma/seed.ts" }, "dependencies": { "@nestjs/common": "^10.0.0",