Este repositório contém a minha solução para o Desafio Fullstack proposto pela Goalfy.
O objetivo é desenvolver um CRUD de clientes, utilizando boas práticas de desenvolvimento e separação entre frontend e backend.
- 🛠️ TypeScript
- ⚛️ React
- 🎨 Styled Components
- 📡 React-Router-Dom
- 🖼️ Lucide-React
- 🟢 Node.js (TypeScript)
- 🚀 Express + CORS
- 🗄️ MySQL
- 🧩 DDD (Domain Driven Design) para organização do código
desafio-fullstack-goalfy/
│── app/ # Backend (Node + Express + CORS)
│ ├── assets/ # Script .sql
│ ├── connection/ # Conexão com banco [alterar caso necessário]
│ ├── interfaces/ # Interface http (request e response)
│ ├── model/ # Casos de Uso de Client
│ ├── router/ # Rotas de acesso aos métodos de Client
│ └── server/ # Arquivo de inicialização de servidor/rotas
│
│── src/ # Frontend (React + TypeScript + Styled Components)
│ ├── components/ # Componentes reutilizáveis
│ ├── contexts/ # Client Context
│ └── pages/ # Páginas da aplicação
│
│
└── README.md- Node.js >= 22.x
- npm >= 10.x
⚠️ É necessário ter uma versão do Node atualizada para rodar este projeto.
Verifique sua versão:
node -vSe precisar atualizar:
Windows: baixe do site [oficial] (https://nodejs.org/)
Linux/macOS: use [nvm] (https://github.com/nvm-sh/nvm)
nvm install 22.19.0
nvm use 22.19.0git clone https://github.com/gfloriano11/desafio-fullstack-goalfy.git
cd desafio-fullstack-goalfynpm installnpm run start- O script de criação do banco de dados
goalfyestá emapp/assets/database.sql - Antes de iniciar o projeto, rode o banco na sua máquina e configure a conexão em
app/connection/connection.ts, se necessário.
A API permite adicionar, editar, remover e listar clientes.
Ao adicionar ou editar um cliente, a API consulta automaticamente a ViaCEP para preencher o endereço completo.
| Método | Endpoint | Descrição | Parâmetros/Body |
|---|---|---|---|
| GET | /clients |
Lista todos os clientes | Nenhum |
| POST | /clients |
Adiciona um novo cliente | JSON no body: - fullname: string - email: string - phone: string - CNPJ: string - CEP: string |
| PUT | /clients/:id |
Edita um cliente existente | JSON no body (mesmos campos do POST) Params: id (cliente) |
| DELETE | /clients/:id |
Remove um cliente | Params: id (cliente) |
POST /clients
Content-Type: application/json
{
"fullname": "João Silva",
"email": "joao@email.com",
"phone": "11999999999",
"CNPJ": "12345678000199",
"CEP": "01001000"
}A API consulta o ViaCEP e salva address, city, state, UF e neighborhood no banco automaticamente.
PUT /clients/1
Content-Type: application/json
{
"fullname": "João Silva",
"email": "joao@email.com",
"phone": "11999999999",
"CNPJ": "12345678000199",
"CEP": "01001000"
}Atualiza o cliente com id = 1 e reconsulta o ViaCEP para atualizar o endereço.
GET /clientsRetorna todos os clientes cadastrados.
DELETE /clients/1Remove o cliente com id = 1 do banco.
[
{
"id": 1,
"fullname": "João Silva",
"email": "joao@email.com",
"phone": "11999999999",
"CNPJ": "12345678000199",
"CEP": "01001000",
"address": "Praça da Sé",
"neighborhood": "Sé",
"city": "São Paulo",
"state": "SP",
"UF": "SP"
}
]