Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/adolligit/store-manager

Store Manager é uma API Rest feita em NodeJS + ExpressJS, que faz consultas diretamente no banco de dados MySQL através query's no 'hardcoded'. O projeto foi idealizado pela escola de programação @tryber e realizado pelos alunos, como eu. Seja muito bem-vindo ao repositório!
https://github.com/adolligit/store-manager

api-rest architecture-components docker docker-compose docker-image dockerfile express-api express-js express-rescue expressjs mocha-chai mocha-tests mochajs mysql mysql-database mysql2 nodejs swagger-ui unit-testing unittest

Last synced: about 2 months ago
JSON representation

Store Manager é uma API Rest feita em NodeJS + ExpressJS, que faz consultas diretamente no banco de dados MySQL através query's no 'hardcoded'. O projeto foi idealizado pela escola de programação @tryber e realizado pelos alunos, como eu. Seja muito bem-vindo ao repositório!

Awesome Lists containing this project

README

        

Store Manager


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.

## Como eu faço para executar este projeto?

Antes de mais nada, primeiro faça o clone e navegue até a pasta do projeto:

```bash
git clone [email protected]:Adolligit/store-manager.git && cd store-manager/
```

### Instalação


🚨 É 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 🐳
Requisitos

Você deve possuir as seguintes ferramentas:


  • Docker: v20.1

  • Docker Compose: v1.29

1. Crie e inicie os contêiners:
```bash
docker compose up -d
```
2. Entre no contêiner da aplicação:
```bash
docker exec -it store_manager bash
```
---

Instalar localmente 💻
Requisitos

Você deve possuir as seguintes ferramentas:


  • Node.js: v16

  • npm: v8.19

  • MySQL: v8

1. Crie um arquivo **.env** na pasta raiz e declare as variáveis de ambiente:
```bash
touch .env
```
2. Abra o arquivo **.env** e então copie e cole as informações a seguir:
```bash
# db
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=
MYSQL_PASSWORD=
MYSQL_DATABASE=StoreManager

# app
APP_PORT=3000
```
3. 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).
---

### Execução

Instalar as dependências do projeto:
```bash
npm install
```
Criar as tabelas no banco de dados MySQL:
```bash
npm run migration
```
Popular o banco de dados:
```bash
npm run seed
```
Iniciar o projeto:
```bash
npm start
```
Inciar o projeto em modo de desenvolvimento (nodemon):
```bash
npm run dev
```
Executar os a cobertura de testes:
```bash
npm run test:mocha
```
Executar o **ESLint** para verificar os erros do código estático:
```bash
npm run lint
```
Recriar o banco de dados já populado:
```bash
npm run reset
```
## Quais são as rotas desta API?
Deixei uma documentação feita com [Swagger UI](https://swagger.io/tools/swagger-ui/) para facilitar e lhe orientar no uso da API. Você pode acessa-la em [http://127.0.0.1:3000/v1/docs/](http://127.0.0.1:3000/v1/docs/).
gif de demonstração de uso

## Como estão organizadas as tabelas?
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:
DER

## Erros comuns
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: [email protected].

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.

### Possíveis erros de instalação e execução:

Erro ao subir os contêiners: docker compose up -d
docker-error

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
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 o `package.json`, depois colar na pasta do projeto:
- https://github.com/Adolligit/store-manager/blob/main/package-lock.json;
- https://github.com/Adolligit/store-manager/blob/main/package.json.

Erro ao tentar popular o banco de dados ou ele não foi reconhecido
npm-seed

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).

## Linguagens e ferramentas:


NodeJs
NodeJs
Express
Mocha
Chai
Sinon
NodeJs
NodeJs

## Agradecimento


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.