Trata-se da API de uma aplicação utilizada para atualizar o valor de determinados produtos, onde é possível validar as informações enviadas para atualizar os produtos e, caso os dados estejam de acordo com o padrão, atualizar uma listagem de produtos.
- Licença
- Tecnologias utilizadas
- Instruções para rodar o projeto
- Rotas e autenticação
- Regras de negócio
- Banco de dados
Este projeto está sob licença do MIT
- Node.js: Plataforma de desenvolvimento para construção do ambiente de servidor.
- Express: Framework web para Node.js utilizado na construção da API.
- TypeScript: Linguagem de programação que adiciona tipagem estática ao JavaScript, proporcionando maior robustez ao código.
- TypeORM: ORM (Object-Relational Mapping) para TypeScript e JavaScript que simplifica o acesso e manipulação de banco de dados relacionais.
- MySQL: Sistema de gerenciamento de banco de dados relacional utilizado para armazenar os dados da aplicação.
- Dotenv: Módulo que carrega variáveis de ambiente a partir de um arquivo .env para o processo do Node.js.
- Cors: Middleware para Express que habilita o controle de acesso HTTP (CORS).
- Http Status Codes: Status Codes: Pacote que fornece uma lista de constantes para códigos de status HTTP.
- Docker: Uma ferramenta para definir e executar aplicações multi-contêineres. É a chave para desbloquear uma experiência de desenvolvimento e implantação simplificada e eficiente.
- Swagger: Ferramente utilizada para criar documentações exemplificando a utilização das rotas, de uma forma prática.
Git
Node v20.11.1
Docker
- Clone o repositório com o comando git clone:
git clone git@github.com:danielbped/product-price-api.git
- Entre no diretório que acabou de ser criado:
cd product-price-api
- Para o projeto funcionar na sua máquia, será necessário instalar suas dependências, para isso, utilize npm install:
npm install
Outro passo importante é instanciarmos o banco de dados. Para isso, foi criado um arquivo docker-compose para gerar uma banco de dados local, o banco de dados utilizado é com a linguagem de consulta MySQL. Então, para instanciar o banco de dados, basta rodar o comando abaixo no terminal:
docker-compose up -d
Na raiz do projeto, será necessário criar um arquivo .env, com as seguintes informações:
MYSQL_USER=root
MYSQL_ROOT_PASSWORD=password
MYSQL_PASSWORD=password
MYSQL_DB=product-price
HOST_DB=localhost
Um arquivo com estas definições já está presente no projeto, o .env.example, para que funcione corretamente, basta renomear para apenas .env, são responsáveis pela criação do banco de dados. Caso deseje utilizar um banco de dados local ao invés do banco fornecido na imagem do Docker, basta alterar os dados de acordo com os dados de usuário do banco de dados local. Em relação às outras variáveis.
Para rodar o projeto na sua máquina, basta utilizar o comando a seguir:
npm start
Caso tudo esteja de acordo, você verá as seguintes mensagens no terminal:
Docs available at http://localhost:3000/docs
Server running on port 3000
Database connected successfully
Para visualizar as rotas disponíveis, também como seus respectivos conteúdos de body e parametros, basta navegar para a rota http://localhost:3000/docs, onde está disponibilizada uma documentação exclusiva das rotas, desenvolvida utilizando Swagger.
Ao atualizar um produto, deve-se levar em consideração as seguintes regras de negócio:
- O novo valor não deve ser abaixo do preço de custo do produto.
- O novo valor não deve ser 10% acima ou 10% abaixo do valor atual do produto.
O banco de dados foi desenvolvido utilizando MySQL com o auxílio da ORM TypeORM nas migrations e nas queries. A arquitetura do banco possui duas tabelas (Products e Packs), e suas colunas podem ser observadas a seguir:
Products
code number
name string
cost_price number
sales_price number
createdAt Date
updatedAt Date
Packs
id number
pack_id number
product_id number
value number
qty number
product Products
createdAt Date
updatedAt Date
Um arquivo de queries pode ser encontrado nos diretórios do projeto, nele há comandos SQL para criação e população das tabelas, a criação das tabelas será feita automaticamente ao instanciar o container do Docker.