Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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.
- Host: GitHub
- URL: https://github.com/guilhermecampellof/store-manager-backend
- Owner: GuilhermeCampelloF
- Created: 2024-07-23T15:05:47.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2024-07-23T18:08:40.000Z (6 months ago)
- Last Synced: 2024-10-15T17:31:47.101Z (3 months ago)
- Topics: chai, joi-validation, mysql, restful-api, sinon
- Language: JavaScript
- Homepage:
- Size: 189 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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.