https://github.com/lasbrdev/backend-node-programacao-2
REST API desenvolvida durante o semestre para explorar o backend com Node.js. Proposta da disciplina de Programação II do curso de Engenharia de Software da Unoeste.
https://github.com/lasbrdev/backend-node-programacao-2
api-rest backend docker mysql nodejs
Last synced: about 2 months ago
JSON representation
REST API desenvolvida durante o semestre para explorar o backend com Node.js. Proposta da disciplina de Programação II do curso de Engenharia de Software da Unoeste.
- Host: GitHub
- URL: https://github.com/lasbrdev/backend-node-programacao-2
- Owner: lasbrDev
- License: mit
- Created: 2024-12-01T21:40:13.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-12-01T21:49:36.000Z (over 1 year ago)
- Last Synced: 2025-01-30T09:41:48.975Z (over 1 year ago)
- Topics: api-rest, backend, docker, mysql, nodejs
- Language: JavaScript
- Homepage:
- Size: 32.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# API REST Backend Node.js - Atividade Programação II
Este projeto foi desenvolvido durante as disciplinas de Programação I e II do curso de Engenharia de Software da Unoeste. A proposta era criar separadamente um frontend e um backend e, ao final, integrar ambos.
## Funcionalidades
Esta API fornece endpoints para gerenciar clientes, fornecedores e produtos. As principais funcionalidades incluem:
- **Clientes**:
- Cadastro de clientes
- Consulta de clientes
- Atualização de clientes (total e parcial)
- Exclusão de clientes
- **Fornecedores**:
- Cadastro de fornecedores
- Consulta de fornecedores
- Atualização de fornecedores (total e parcial)
- Exclusão de fornecedores
- **Produtos**:
- Cadastro de produtos
- Consulta de produtos
- Atualização de produtos (total e parcial)
- Exclusão de produtos
## Endpoints
### Clientes
- `POST /api/clientes`: Cadastrar um novo cliente
- `GET /api/clientes`: Consultar todos os clientes
- `PUT /api/clientes/:id`: Atualizar um cliente
- `PATCH /api/clientes/:id`: Atualizar parcialmente um cliente
- `DELETE /api/clientes/:id`: Excluir um cliente
### Fornecedores
- `POST /api/fornecedores`: Cadastrar um novo fornecedor
- `GET /api/fornecedores`: Consultar todos os fornecedores
- `PUT /api/fornecedores/:id`: Atualizar um fornecedor
- `PATCH /api/fornecedores/:id`: Atualizar parcialmente um fornecedor
- `DELETE /api/fornecedores/:id`: Excluir um fornecedor
### Produtos
- `POST /api/produtos`: Cadastrar um novo produto
- `GET /api/produtos`: Consultar todos os produtos
- `PUT /api/produtos/:id`: Atualizar um produto
- `PATCH /api/produtos/:id`: Atualizar parcialmente um produto
- `DELETE /api/produtos/:id`: Excluir um produto
## Tecnologias Utilizadas
### Bibliotecas Principais
- **Express**: Framework para construção de APIs REST.
- **Sequelize**: ORM para interação com o banco de dados.
- **dotenv**: Carregar variáveis de ambiente a partir de um arquivo `.env`.
- **express-validator**: Middleware para validação de dados.
- **cors**: Middleware para habilitar CORS (Cross-Origin Resource Sharing).
### Banco de Dados
- **MySQL**: Banco de dados relacional utilizado para armazenar os dados da aplicação.
## Diagramas do Projeto
### Diagrama de Classes
```mermaid
classDiagram
class App {
}
class ClienteController {
+cadastrarCliente(req, res)
+consultarClientes(req, res)
+atualizarCliente(req, res)
+atualizarClienteParcial(req, res)
+excluirCliente(req, res)
}
class FornecedorController {
+cadastrarFornecedor(req, res)
+consultarFornecedores(req, res)
+atualizarFornecedor(req, res)
+atualizarFornecedorParcial(req, res)
+excluirFornecedor(req, res)
}
class ProdutoController {
+cadastrarProduto(req, res)
+consultarProdutos(req, res)
+atualizarProduto(req, res)
+atualizarProdutoParcial(req, res)
+excluirProduto(req, res)
}
class ClienteRoutes {
+post("/")
+get("/")
+put("/:id")
+patch("/:id")
+delete("/:id")
}
class FornecedorRoutes {
+post("/")
+get("/")
+put("/:id")
+patch("/:id")
+delete("/:id")
}
class ProdutoRoutes {
+post("/")
+get("/")
+put("/:id")
+patch("/:id")
+delete("/:id")
}
class Cliente {
-id: INTEGER
-cpf: STRING
-nomeCompleto: STRING
-endereco: STRING
-cidade: STRING
-estado: STRING
-cep: STRING
}
class Fornecedor {
-id: INTEGER
-cnpj: STRING
-razaoSocial: STRING
-telefone: STRING
-email: STRING
-endereco: STRING
}
class Produto {
-id: INTEGER
-codigo: STRING
-nome: STRING
-descricao: STRING
-preco: FLOAT
-categoria: STRING
-estoque: INTEGER
}
App --> ClienteRoutes
App --> FornecedorRoutes
App --> ProdutoRoutes
ClienteRoutes --> ClienteController
FornecedorRoutes --> FornecedorController
ProdutoRoutes --> ProdutoController
ClienteController --> Cliente
FornecedorController --> Fornecedor
ProdutoController --> Produto
```
### Diagrama de Sequência - Cliente case
```mermaid
sequenceDiagram
actor User
User->>App: Request to /api/clientes (POST)
App->>ClienteRoutes: Route request
ClienteRoutes->>ClienteController: Call cadastrarCliente
ClienteController->>Cliente: Create new Cliente
Cliente->>Database: Save Cliente
Database-->>Cliente: Return saved Cliente
Cliente-->>ClienteController: Return saved Cliente
ClienteController-->>ClienteRoutes: Return response
ClienteRoutes-->>App: Return response
App-->>User: Return response (201 Created)
```
### Diagrama de Camada de Apresentação
```mermaid
classDiagram
direction LR
class database {
<>
Database (Sequelize)
}
class index {
<>
Index.js
}
class authMiddleware {
<>
Authentication.js
}
class loginVerification {
<>
LoginVerification.js
}
class clienteValidator {
<>
ClienteValidator.js
}
class clienteRoutes {
<>
ClienteRoutes.js
}
class clienteController {
<>
ClienteController.js
}
class clienteModel {
<>
Cliente.js
}
%% Repeat similar classes for Fornecedor and Produto
class fornecedorValidator {
<>
FornecedorValidator.js
}
class produtoValidator {
<>
ProdutoValidator.js
}
%% ... (other classes omitted for brevity)
%% Server connections
index --> clienteRoutes
index --> fornecedorRoutes
index --> produtoRoutes
%% Routes to controllers
clienteRoutes --> clienteController
fornecedorRoutes --> fornecedorController
produtoRoutes --> produtoController
%% Controllers to models
clienteController --> clienteModel
fornecedorController --> fornecedorModel
produtoController --> produtoModel
%% Models to database
clienteModel --> database
fornecedorModel --> database
produtoModel --> database
%% Middleware applied to routes
clienteRoutes ..> authMiddleware: uses
fornecedorRoutes ..> authMiddleware: uses
produtoRoutes ..> authMiddleware: uses
%% Validations before controllers
clienteRoutes ..> clienteValidator: validates with
fornecedorRoutes ..> fornecedorValidator: validates with
produtoRoutes ..> produtoValidator: validates with
```
## Configuração do Projeto
1. Clone o repositório:
```sh
git clone https://github.com/lasbrDev/backend-node-programacao-2.git
```
2. Instale as dependências
```bash
npm install
```
3. Configure as variáveis de ambiente no arquivo *.env*:
```bash
DB_NAME=
DB_USER=
DB_PASSWORD=
DB_HOST=
DB_PORT=
APP_PORT=
```
4. Inicie a aplicação
```bash
npm start
```
## Licença
Este projeto está licenciado sob a [MIT LICENSE](LICENSE).