Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/lionelsu/store-manager-api

RESTful API offering comprehensive CRUD functionality for sales management, specifically drop shipping. Developed with TDD methodology.
https://github.com/lionelsu/store-manager-api

api docker docker-compose javascript mocha mysql nodejs openapi3 postman swagger swagger-ui tdd

Last synced: 9 days ago
JSON representation

RESTful API offering comprehensive CRUD functionality for sales management, specifically drop shipping. Developed with TDD methodology.

Awesome Lists containing this project

README

        

# Store Manager

[Documentação da API no Postman](https://documenter.getpostman.com/view/30159355/2s9YJgTLHB)

O Store Manager API é uma solução completa de gerenciamento de vendas por drop shipping. Esta API oferece operações de CRUD (Create, Read, Update, Delete) para facilitar o gerenciamento de vendas. Desenvolvida com foco na qualidade e seguindo a metodologia TDD (Test-Driven Development), a API adota uma arquitetura em camadas consistente com Model, Service e Controller (MSC).

Ferramentas Utilizadas

- **Tecnologias Principais:**
- Node.js
- Express.js
- MySQL Server

- **Testes:**
- Mocha
- Chai
- Sinon

- **Documentação:**
- Swagger
- Postman

## Pré-Requisitos

Utilize o Docker:

- [Docker & Docker Compose](https://docs.docker.com/compose/)

## Instalação

1. Clonar o Repositório

Primeiro, copie ou clone este repositório para o seu sistema local usando o Git:

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

2. Iniciar o Contêiner Docker

Utilize o Docker Compose para iniciar o contêiner do Store Manager:

```bash
docker compose up -d
```

3. Acesse a documentação da API no navegador:

```http
http://127.0.0.1:3001/v1/docs/
```

## Uso

Para interagir com o Store Manager, você pode usar os seguintes comandos:

Visualização de Logs

```bash
docker logs -n 10 -f store_manager
```

Linha de Comando Interativa, usada para **[testar](#testes)** a aplicação

```bash
docker exec -it store_manager bash
```

Resetar o Banco de Dados (deve ser executado dentro da **[linha de comando interativa](#uso)**)

```bash
npm run db:reset
```

## Rotas da API

**Produtos:**

- **`POST /products`**: Cadastra um novo produto.
- **`GET /products`**: Retorna todos os produtos cadastrados.
- **`GET /products/:id`**: Retorna um produto específico pelo ID.
- **`GET /products/search`**: Retorna produtos com base na consulta de nome.
- **`PUT /products/:id`**: Atualiza um produto pelo ID.
- **`DELETE /products/:id`**: Exclui um produto pelo ID.

**Vendas:**

- **`POST /sales`**: Cadastra uma nova venda.
- **`GET /sales`**: Retorna todas as vendas cadastradas.
- **`GET /sales/:id`**: Retorna uma venda específica pelo ID.
- **`PUT /sales/:saleId/products/:productId/quantity`**: Atualiza a quantidade de um produto em uma venda.
- **`DELETE /sales/:id`**: Exclui uma venda pelo ID.

Configuração

Variáveis de ambiente dentro do container:

```mysql
MYSQL_USER: root
MYSQL_PASSWORD: password
MYSQL_HOSTNAME: db
MYSQL_PORT: 3306
PORT: 3001
```

## Testes

- Dentro da **[linha de comando interativa](#uso)**, você pode executar os seguintes testes:

- Testes Unitários:

```bash
npm run test:mocha
```

- Cobertura de Testes:

```bash
npm run test:coverage
```

- Testes de Mutação:

```bash
npm run test:mutation
```

## Habilidades desenvolvidas

Usei o `Node.js` com o `Express.js` como base da minha aplicação, permitindo criar facilmente endpoints `HTTP` para atender às necessidades do sistema.

O banco de dados `MySQL Server` foi escolhido para armazenar dados relacionados a produtos, vendas e outros elementos cruciais do sistema.

A qualidade do código foi garantida por meio de testes rigorosos usando `Mocha`, `Chai` e `Sinon`. Esses testes avaliaram minuciosamente os endpoints, serviços e funções para garantir que tudo funcionasse corretamente.

Para documentar a `API`, utilizei o `Swagger`, que inclui informações sobre rotas, parâmetros e exemplos práticos.

Também disponibilizei uma coleção no `Postman` para facilitar testes e interações com a `API`.

Com essas etapas concluídas, estou confiante na entrega de uma `API` sólida e funcional, pronta para atender às necessidades dos usuários.