Store Manager é uma API Rest que busca simular o gerenciamento de dados de uma loja.
Esta API foi construída em Node.js junto ao Express.js sendo que sua cobertura de teste unitários foi realizada em Mocha, Chai e Sinon. Para consultar os dados no banco, foram feitas query's diretamente no código ("hardcoded"), sendo que elas e a estrutura do banco de dados, foram criados em MySQL.
Antes de mais nada, primeiro faça o clone e navegue até a pasta do projeto:
git clone git@github.com:Adolligit/store-manager.git && cd store-manager/
🚨 É crucial que você já tenha em sua máquina as ferramentas citadas em cada tipo de instalação, com a correta versão ou superior.
Escolha uma das instalações a seguir:
Instalar com Docker 🐳
RequisitosVocê deve possuir as seguintes ferramentas:
- Docker: v20.1
- Docker Compose: v1.29
- Crie e inicie os contêiners:
docker compose up -d
- Entre no contêiner da aplicação:
docker exec -it store_manager bash
Instalar localmente 💻
RequisitosVocê deve possuir as seguintes ferramentas:
- Node.js: v16
- npm: v8.19
- MySQL: v8
- Crie um arquivo .env na pasta raiz e declare as variáveis de ambiente:
touch .env
- Abra o arquivo .env e então copie e cole as informações a seguir:
# db MYSQL_HOST=127.0.0.1 MYSQL_PORT=3306 MYSQL_USER= MYSQL_PASSWORD= MYSQL_DATABASE=StoreManager # app APP_PORT=3000
- No arquivo .env, informe seus dados de acesso ao banco de dados MySQL nas chaves: MYSQL_USER e MYSQL_PASSWORD (lembre-se de salvar o arquivo).
Instalar as dependências do projeto:
npm install
Criar as tabelas no banco de dados MySQL:
npm run migration
Popular o banco de dados:
npm run seed
Iniciar o projeto:
npm start
Inciar o projeto em modo de desenvolvimento (nodemon):
npm run dev
Executar os a cobertura de testes:
npm run test:mocha
Executar o ESLint para verificar os erros do código estático:
npm run lint
Recriar o banco de dados já populado:
npm run reset
Deixei uma documentação feita com Swagger UI para facilitar e lhe orientar no uso da API. Você pode acessa-la em http://127.0.0.1:3000/v1/docs/.
Apesar de ser uma API Rest bem simples, eu fiz esse DER para facilitar a visualização da estrutura do banco de dados. Desta forma fica mais fácil saber como esta o relacionamento entre as entidades. Confira:
Descrevo neste tópico alguns possíveis erros que você pode estar enfrentando durante a instalação ou execução desta API.
Uma das opções descritas no erro poderá resolver o problema que você esta enfrentando. Contudo, caso ainda permaneça com dificuldade para testar a API, me envie um e-mail: adelson.onod@gmail.com.
Antes de prosseguir, por favor confirme que:
- Docker 🐳
- Você tem instalado em sua máquina o Docker e o Docker Compose nas versões mínimas exigidas.
- Verificou que a Docker Engine esta funcionando corretamente na sua máquina.
- Localmente 💻
- Você tem instalado em minha máquina o MySQL, Node.js e NPM nas versões mínimas exigidas.
- Verificou que o MySQL esta funcionando corretamente na sua máquina.
Erro ao subir os contêiners: docker compose up -d
Você esta tentando subir os contêiners do Docker porém uma das portas já está em uso. Pode ser o banco de dados ou a API com este erro.
As portas descritas para uso no docker-compose.yml são:
- API: 3000
- Banco: 3307
Para resolver isso, você pode:
- Desativar os programas que estão fazendo uso das portas; OU
- Alterar o valor para as portas no arquivo docker-compose.yml, em:
- MYSQL_PORT;
- APP_PORT e;
- ports (para db e node): as portas da máquina local são descritas no lado esquerdo.
Erro durante a instalação de dependências: npm install
O NPM não encontrou o arquivo 'package.json' na pasta de execução. Você pode ter excluído sem querer ou pode estar executando o comando fora da pasta do projeto.
Para resolver isso, você pode:
- Verificar se esta na pasta do projeto. Se não tiver, basta entrar e executar o comando
npm install
; OU - Baixar o
package-lock.json
e opackage.json
, depois colar na pasta do projeto:
Erro ao tentar popular o banco de dados ou ele não foi reconhecido
Este erro significa que não há criado o banco de dados 'StoreManager'.
Para resolver isso você deve:
- Executar o comando
npm run migration
(acho que você esqueceu disso lá nos comando acima).
Com este projeto tive a oportunidade de trabalhar com camadas na construção da API Rest e utilizar a técnica de TDD, cobrindo parte do desenvolvimento com testes unitários.
E nada disso seria possível se não houvesse a idealização do projeto, portanto, agradeço a @tryber pelo cuidado em trazer um projeto que nos desafia (nos alunos), a colocar em prática todos os nossos conhecimento em programação.