Skip to content

ericmadson/Contacts-API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API de Gerenciamento de Contatos

API REST para gerenciamento de contatos desenvolvida em Node.js com Express e MySQL.

📋 Pré-requisitos

  • Node.js (versão 14 ou superior)
  • MySQL Server (versão 5.7 ou superior)
  • npm ou yarn

🚀 Instalação

1. Clone o repositório e instale as dependências

npm install

2. Configure o banco de dados MySQL

Crie um banco de dados no MySQL:

CREATE DATABASE contatos_db;

3. Configure as variáveis de ambiente

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

4. Execute o script de criação da tabela

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
);

▶️ Executando a aplicação

Modo desenvolvimento (com nodemon)

npm run dev

Modo produção

npm start

Executar testes

npm test

Executar testes com coverage

npm run test:coverage

A API estará disponível em http://localhost:3000

📡 Endpoints da API

1. Criar novo contato

  • 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"
}

2. Listar todos os contatos

  • 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"
  }
]

3. Atualizar contato

  • 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"
}

4. Excluir contato

  • Método: DELETE
  • URL: /contatos/:id
  • Resposta (204): Sem conteúdo

✅ Validações

Nome

  • 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"

Telefone

  • Aceita formatos variados: (XX) XXXXX-XXXX, (XX) XXXX-XXXX, apenas números
  • Deve conter entre 10 e 15 dígitos

🛠️ Tecnologias Utilizadas

  • 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

📂 Estrutura do Projeto

/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

🧪 Testando a API

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

📝 Erros Comuns

Erro de conexão com MySQL

  • Verifique se o MySQL está rodando
  • Confirme as credenciais no arquivo .env
  • Verifique se o banco de dados foi criado

Porta já em uso

  • Altere a variável PORT no arquivo .env

📄 Licença

Este projeto foi desenvolvido como teste técnico.

About

REST API for contacts management with Node.js and MySQL

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published