Este projeto é uma API desenvolvida com NestJS para gerenciar usuários, incluindo funcionalidades de autenticação utilizando JWT (JSON Web Tokens).
-
Gerenciamento de Usuários:
- Criar usuários
- Listar todos os usuários (com paginação e filtragem de soft-delete)
- Buscar um usuário por ID
- Atualizar dados de usuários
- Excluir usuários (Soft Delete)
- Restaurar usuários soft-deletados
-
Autenticação:
- Login com email e senha
- Geração de token JWT
- Validação de tokens para acessar rotas protegidas
-
Segurança:
- Hashing de senhas com bcrypt
- Validações de senha (mínimo 8 caracteres, pelo menos 1 maiúscula, 1 número e 1 caractere especial)
- Node.js
- NestJS
- TypeScript
- JWT para autenticação
- TypeORM como ORM
- PostgreSQL como banco de dados
- bcrypt para hashing de senhas
- Jest para testes unitários
- Docker para conteinerização
git clone git@github.com:jonathanrodrigues12/user-management-api.git
cd user-management-apiAtualize o arquivo .env com as informações do banco e JWT:
NODE_ENV=development
POSTGRES_HOST=db
POSTGRES_PORT=5432
POSTGRES_USER=seu_usuario
DB_PASSWORD=sua_senha
POSTGRES_DB=seu_banco
JWT_SECRET=seu_segredo_jwt
JWT_EXPIRES_IN=3600s
Certifique-se de ter o Docker instalado e execute o seguinte comando para subir a API e o banco de dados:
docker-compose up --buildIsso criará os contêineres para a API e o banco de dados PostgreSQL.
docker exec -it user_management_api npm run testdocker exec -it user_management_api npm run test:covUma vez clonado o projeto, conforme passo 1.
npm installCertifique-se de que o PostgreSQL esteja rodando e crie um banco de dados. Atualize o arquivo .env com as informações do banco:
NODE_ENV=development
POSTGRES_HOST=db
POSTGRES_PORT=5432
POSTGRES_USER=seu_usuario
DB_PASSWORD=sua_senha
POSTGRES_DB=seu_banco
JWT_SECRET=seu_segredo_jwt
JWT_EXPIRES_IN=3600s
npm run migration:runnpm run start:devnpm run testA API estará acessível em: http://localhost:3000
A documentação da API estará acessível em: http://localhost:3000/api/docs
POST /users
Body:
{
"name": "John Doe",
"email": "john.doe@example.com",
"password": "Password1!"
}GET /users?page=1&limit=10
GET /users/:id
PUT /users/:id
Body:
{
"name": "Jane Doe",
"email": "jane.doe@example.com"
}DELETE /users/:id
PATCH /users/:id/restore
POST /auth/login
Body:
{
"email": "john.doe@example.com",
"password": "Password1!"
}Resposta:
{
"access_token": "jwt-token-aqui"
}POST /auth/validate
Header:
Authorization: Bearer jwt-token-aqui
Resposta:
{
"userId": "1",
"email": "john.doe@example.com"
}