Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/guilhermecampellof/store-manager-backend

API RESTful de um sistema de gerenciamento de vendas. Projeto desenvolvido durante o curso de formação Full-Stack da Trybe.
https://github.com/guilhermecampellof/store-manager-backend

chai joi-validation mysql restful-api sinon

Last synced: 3 months ago
JSON representation

API RESTful de um sistema de gerenciamento de vendas. Projeto desenvolvido durante o curso de formação Full-Stack da Trybe.

Awesome Lists containing this project

README

        

## STORE MANAGER

O Projeto Store Manager foi desenvolvido durante o curso de formação full-stack pela Trybe.

A aplicação consiste em uma API RESTful de um sistema de gerenciamento de vendas, no qual é possível criar, visualizar, deletar e atualizar produtos e vendas. A API utiliza arquitetura em camadas e um banco de dados MySQL para a gestão de dados, possuindo também testes para garantir as funcionalidade das implementações.

## REQUISITOS

- Node.js
- Docker/Docker Compose

🐳 Iniciando a aplicação no Docker Compose

```bash

# Após clonar o repositório:

# Instale as dependências
npm install

# Inicie os containers do compose `backend` e `db`
# A aplicação estará disponível em `http://localhost:3001` em modo de desenvolvimento
docker-compose up -d

# É possível ver os logs da aplicação com `docker logs -n 10 -f `
docker logs -n 10 -f store_manager
```

🖥️ Rodando testes

```bash
#### Comandos dos testes com mocha
npm run test:mocha # roda os testes do mocha
npm run test:coverage # roda os testes e mostra a cobertura geral
npm run test:mutation # roda os testes e mostra a cobertura de mutações
```

🎲 Diagrama entidade-relacionamento

A modelagem do banco de dados respeita o seguinte diagrama de entidade-relacionamento:

![erStoreManager](https://github.com/user-attachments/assets/4b012efa-f6f2-46e6-82e7-9dd62fd149fb)

## 📖 HABILIDADES TRABALHADAS 📖

- Desenvolvimento de API RESTful;
- Interação com banco de dados MySQL;
- Validação de dados recebidos pela API;
- Criação de testes para garantir correta implementação dos endpoints;

## IMPLEMENTAÇÕES REALIZADAS

- É possível ver o desenvolvimento passo-a-passo dos tópicos abaixo através do histórico de commits da aplicação

Endpoints para listar produtos

- `GET /products`: retorna todos os produtos;
- `GET /products/:id`: retorna apenas o produto com o `id` presente na URL;
- O resultado da listagem é **ordenado** de forma crescente pelo campo `id`;

Endpoints para listar vendas

- `GET /sales`: retorna todas as vendas;
- `GET /sales/:id`: retorna apenas a venda o `id` presente na URL;
- O resultado da listagem é **ordenado** de forma crescente pelo campo `saleId`, em caso de empate, **ordena** também de forma crescente pelo campo `productId`;

Endpoint para cadastrar produtos

- `POST /products`: Os produtos enviados na requisição são salvos na tabela `products` do banco de dados;

Validações para o cadastro de produtos

- Mensagens de erro personalizadas utilizando JOI, para as requisições com dados inválidos;

Endpoint para cadastrar vendas

- `POST /sales`: As vendas enviadas na requisição são salvas nas tabelas `sales` e `sales_products` do banco de dados;

Validações para o cadastro de vendas

- Mensagens de erro personalizadas utilizando JOI, para as requisições com dados inválidos;

Endpoint para atualizar um produto

- `PUT /products/:id`: O produto com `id` presente na URL é atualizado;
- O corpo da requisição é validado igualmente como feito no cadastro;

Endpoint para atualizar a quantidade de um produto em uma venda

- `PUT /sales/:saleId/products/:productId/quantity`: A quantidade `quantity` do produto vendido com o `productId` presente na URL é atualizada;
- O corpo da requisição é validado;

Endpoint para pesquisar um produto

- `GET /products/search`: Traz todos os produtos no banco de dados contendo o valor da query `q` em `name`, se existirem;
- Retorna um array de produtos que contenham em seu nome o termo passado na URL;
- Retorna todos os produtos caso _query params_ `q` esteja vazia;
- Retorna um array vazio caso nenhum nome satisfaça a busca;

Endpoint para deletar um produto

- `DELETE /products/:id`: O produto com `id` presente na URL é deletado;

Endpoint para deletar uma venda

- `DELETE /sales/:id`: A venda com `id` presente na URL é deletada;

## ©️ DISCLAIMER


Com exceção das alterações destacadas acima no tópico "implementações realizadas", TODOS OS DEMAIS ARQUIVOS foram desenvolvidos e estão sob responsabilidade da TRYBE, incluindo, mas não se limitando ao: diagrama entidade-relacionamento do sistema, seeders, containers docker e organização dos demais diretórios da aplicação.