Uma API Node.js com TypeScript seguindo Clean Architecture, usando TypeORM, JWT para autenticação e bcrypt para hash de senhas.
O projeto segue os princípios da Clean Architecture com as seguintes camadas:
- Domain: Entidades e interfaces do domínio
- Application: Casos de uso e DTOs
- Infrastructure: Implementações concretas (banco de dados, autenticação)
- Presentation: Controllers, rotas e middlewares
- Node.js com TypeScript
- Express.js para o servidor web
- TypeORM como ORM
- PostgreSQL como banco de dados
- JWT para autenticação
- bcryptjs para hash de senhas
- class-validator para validação
- helmet para segurança
- Clone o repositório:
git clone <repository-url>
cd nortum-api- Instale as dependências:
npm install- Configure as variáveis de ambiente:
cp env.example .envEdite o arquivo .env com suas configurações:
# Database Configuration
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=postgres
DB_DATABASE=nortum_db
# JWT Configuration
JWT_SECRET=your-super-secret-jwt-key-here-change-in-production
JWT_EXPIRES_IN=7d
# Server Configuration
PORT=3000
NODE_ENV=development-
Configure o banco de dados PostgreSQL
-
Execute as migrações:
npm run migration:runnpm run devnpm run build
npm startRegistra um novo usuário.
Body:
{
"email": "user@example.com",
"fullName": "John Doe",
"username": "johndoe",
"password": "password123"
}Faz login do usuário.
Body:
{
"username": "johndoe",
"password": "password123"
}Response:
{
"message": "Login successful",
"token": "jwt-token-here",
"user": {
"id": 1,
"email": "user@example.com",
"fullName": "John Doe",
"username": "johndoe"
}
}Verifica o status da API.
Response:
{
"status": "OK",
"timestamp": "2024-01-01T00:00:00.000Z",
"service": "Nortum API"
}npm run dev- Executa em modo desenvolvimento com hot reloadnpm run build- Compila o TypeScript para JavaScriptnpm start- Executa a aplicação compiladanpm run migration:generate- Gera uma nova migraçãonpm run migration:run- Executa as migraçõesnpm run migration:revert- Reverte a última migração
- Helmet para headers de segurança
- Rate limiting implementado
- JWT para autenticação
- bcrypt para hash de senhas
- Validação de dados com class-validator
src/
├── domain/ # Camada de domínio
│ ├── entities/ # Entidades do domínio
│ └── repositories/ # Interfaces dos repositórios
├── application/ # Camada de aplicação
│ ├── use-cases/ # Casos de uso
│ ├── dto/ # Data Transfer Objects
│ └── interfaces/ # Interfaces da aplicação
├── infrastructure/ # Camada de infraestrutura
│ ├── database/ # Configuração do banco
│ ├── auth/ # Serviços de autenticação
│ └── config/ # Configurações
├── presentation/ # Camada de apresentação
│ ├── controllers/ # Controllers
│ ├── middleware/ # Middlewares
│ └── routes/ # Rotas
└── shared/ # Utilitários compartilhados
├── errors/ # Classes de erro
└── utils/ # Funções utilitárias
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença ISC.