API REST para gerenciamento de contatos desenvolvida em Node.js com Express e MySQL.
- Node.js (versão 14 ou superior)
- MySQL Server (versão 5.7 ou superior)
- npm ou yarn
npm install
Crie um banco de dados no MySQL:
CREATE DATABASE contatos_db;
Crie um arquivo .env
na raiz do projeto com as seguintes variáveis:
DB_HOST=localhost
DB_USER=seu_usuario
DB_PASSWORD=sua_senha
DB_NAME=contatos_db
DB_PORT=3306
PORT=3000
NODE_ENV=development
A tabela será criada automaticamente ao iniciar a aplicação, mas você também pode criar manualmente:
CREATE TABLE contatos (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(255) NOT NULL,
telefone VARCHAR(20) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
npm run dev
npm start
npm test
npm run test:coverage
A API estará disponível em http://localhost:3000
- Método: POST
- URL:
/contatos
- Body:
{
"nome": "João Silva",
"telefone": "(83) 98765-4321"
}
- Resposta (201):
{
"id": 1,
"nome": "João Silva",
"telefone": "(83) 98765-4321",
"created_at": "2025-10-02T10:30:00.000Z",
"updated_at": "2025-10-02T10:30:00.000Z"
}
- Método: GET
- URL:
/contatos
- Resposta (200):
[
{
"id": 1,
"nome": "João Silva",
"telefone": "(83) 98765-4321",
"created_at": "2025-10-02T10:30:00.000Z",
"updated_at": "2025-10-02T10:30:00.000Z"
}
]
- Método: PATCH
- URL:
/contatos/:id
- Body:
{
"nome": "João Pedro Silva",
"telefone": "(83) 99999-8888"
}
- Resposta (200):
{
"id": 1,
"nome": "João Pedro Silva",
"telefone": "(83) 99999-8888",
"created_at": "2025-10-02T10:30:00.000Z",
"updated_at": "2025-10-02T10:35:00.000Z"
}
- Método: DELETE
- URL:
/contatos/:id
- Resposta (204): Sem conteúdo
- Deve conter no mínimo duas palavras
- Cada palavra deve ter pelo menos 3 letras
- Exemplos válidos: "João Silva", "Maria Fernanda Santos"
- Exemplos inválidos: "João", "Ana Lu", "A B"
- Aceita formatos variados: (XX) XXXXX-XXXX, (XX) XXXX-XXXX, apenas números
- Deve conter entre 10 e 15 dígitos
- Node.js - Runtime JavaScript
- Express - Framework web
- MySQL2 - Driver MySQL com suporte a Promises
- dotenv - Gerenciamento de variáveis de ambiente
- express-validator - Validação de dados
- Jest - Framework de testes
- Supertest - Testes de API
/src
/config
database.js # Configuração da conexão com MySQL
/controllers
contactsControllerss.js # Lógica de negócio dos contatos
/routes
contactsRoutes.js # Definição das rotas
/validators
contactValidator.js # Validações dos dados
/middlewares
errorHandler.js # Tratamento global de erros
app.js # Configuração do Express
server.js # Inicialização do servidor
/tests
contacts.test.js # Testes da API
.env # Variáveis de ambiente (não versionar)
.env.example # Exemplo de variáveis de ambiente
package.json # Dependências e scripts
jest.config.js # Configuração do Jest
Você pode usar ferramentas como Postman, Insomnia ou cURL para testar os endpoints.
Exemplo com cURL:
# Criar contato
curl -X POST http://localhost:3000/contacts \
-H "Content-Type: application/json" \
-d '{"nome":"João Silva","telefone":"(83) 98765-4321"}'
# Listar contatos
curl http://localhost:3000/contacts
# Atualizar contato
curl -X PUT http://localhost:3000/contacts/1 \
-H "Content-Type: application/json" \
-d '{"nome":"João Pedro Silva"}'
# Deletar contato
curl -X DELETE http://localhost:3000/contacts/1
- Verifique se o MySQL está rodando
- Confirme as credenciais no arquivo
.env
- Verifique se o banco de dados foi criado
- Altere a variável
PORT
no arquivo.env
Este projeto foi desenvolvido como teste técnico.