# API de Gerenciamento de Clientes
API Node.js para gerenciamento de clientes, autenticação via JWT e controle de acesso administrativo, utilizando Express e PostgreSQL e Docker + Dbeaver.
---## Estrutura do Projeto
├── src/
│ ├── app.js
│ ├── controllers/
│ │ ├── authController.js
│ │ └── clientController.js
│ ├── database/
│ │ └── database.js
│ ├── middlewares/
│ │ └── authMiddleware.js
│ └── routes/
│ ├── authRoutes.js
│ └── clientRoutes.js
├── init.sql
├── package.json
├── Dockerfile
├── docker-compose.yml
├── .env
└── .gitignore
-
Clone o repositório:
git clone https://github.com/lorenzospada/Irrah-tech-challenge.git
-
Configure as variáveis de ambiente:
- Edite o arquivo
.envconforme necessário (exemplo disponível).
- Edite o arquivo
-
Suba os containers com Docker Compose:
docker-compose up --build
Isso irá: -Instalar automaticamente as dependências com npm install. -iniciar o banco de dados PostgreSQL e a aplicação Node.js.
-
Crie a tabela com os dados do init.sql
-
POST /auth-
Body:
{ "documentId": "..." } -
Retorno:
{ "token": "..." }
-
-
GET /clients- Requer token JWT de admin
- Lista todos os clientes
-
POST /clients{ "name": "John Doe", "documentId": "123", "documentType": "CPF", //CPF ou CNPJ "planType": "postpaid", // postpaid ou prepaid "balance": 0, "limit": 0, "active": true, "is_admin": true //false ou true }- Body: dados do cliente
- Cria um novo cliente
-
GET /clients/:id- Busca cliente por ID
-
PUT /clients/:id{ "name": "John Doe", "documentId": "123", "documentType": "CPF", //CPF ou CNPJ "planType": "postpaid", // postpaid ou prepaid "balance": 0, "limit": 0, "active": true, "is_admin": true //false ou true }- Body: dados do cliente
- Atualiza cliente
-
GET /clients/:id/balance- Requer token JWT
- Consulta saldo do cliente
- O schema precisa ser criado com base no arquivo
init.sql. - Tabela principal:
clients.
npm run dev— Inicia o servidor em modo desenvolvimento comnodemon.
Veja o arquivo .env para exemplos de configuração, incluindo:
PORTDATABASE_URLJWT_SECRET
- O acesso a rotas administrativas requer que o campo
is_admindo cliente sejatrue. - O login é feito apenas com
documentId(sem senha, para fins de demonstração).