Uma API RESTful completa para portfólio pessoal, desenvolvida em TypeScript com Node.js, Express e Prisma ORM. A API oferece recursos de autenticação JWT, CRUD completo para projetos, habilidades e formações, além de tradução automática multi-idioma usando Gemini AI.
- Recursos
- Tecnologias
- Pré-requisitos
- Instalação
- Configuração
- Uso
- API Endpoints
- Autenticação
- Tradução Multi-idioma
- Docker
- Testes
- Documentação da API
- Contribuição
- Autenticação JWT com tokens de 7 dias
- Proteção contra ataques de força bruta (máx. 3 tentativas)
- Hash de senhas com Argon2
- Middleware de autenticação para rotas privadas
- Projetos: CRUD completo com filtros, paginação e ativação/desativação
- Habilidades: Organização por stack e tipo com sub-habilidades
- Formações: Gerenciamento de certificações e cursos
- Perfil do Owner: Atualização de dados pessoais e profissionais
- Tradução automática usando Gemini AI
- Cache inteligente de 24 horas para otimização
- Gerenciamento de quota com rate limiting
- Fallback para dados originais quando quota esgotada
- Suporte a múltiplos idiomas
- Arquitetura em camadas (Controller → Service → Repository)
- Validação de dados com Joi e Zod
- Documentação automática com Swagger
- Logs de requisições em desenvolvimento
- Tratamento centralizado de erros
- Node.js - Runtime JavaScript
- TypeScript - Superset tipado do JavaScript
- Express - Framework web minimalista
- Prisma ORM - ORM moderno para TypeScript/JavaScript
- MongoDB - Banco de dados NoSQL
- JWT - JSON Web Tokens para autenticação
- Argon2 - Hash de senhas seguro
- CORS - Cross-Origin Resource Sharing
- Gemini AI SDK - Serviço de tradução automática
- Sistema de cache e quota inteligente
- Jest - Framework de testes
- Supertest - Testes de API HTTP
- Swagger - Documentação automática da API
- Docker - Containerização
- Docker Compose - Orquestração de containers
- Node.js (versão 18 ou superior)
- npm ou yarn
- MongoDB (local ou Atlas)
- Docker (opcional)
git clone https://github.com/wallacemt/dev-portifoio-api.git
cd dev-portifoio-api
npm install
Crie um arquivo .env
na raiz do projeto:
# Ambiente
NODE_ENV=dev
# Banco de dados
MONGODB_URI=mongodb://localhost:27017/portfolio
# Servidor
PORT=8081
FRONTEND_URL=http://localhost:3000
# Autenticação
JWT_SECRET=sua_chave_jwt_super_secreta_aqui
# Gemini AI (para tradução)
GEMINI_API_KEY=sua_chave_gemini_api_aqui
# Gera o cliente Prisma
npm run db:generate
# Sincroniza o schema com o banco
npm run db
# Inicia o servidor em modo desenvolvimento
npm run dev
# Constrói o projeto
npm run build
# Inicia o servidor de produção
npm start
# Inicia com Docker Compose
npm run prod:up
# Para o container
npm run prod:down
O servidor estará disponível em http://localhost:8081
POST /auth/register # Cadastro de novo owner
POST /auth/login # Login do owner
GET /auth # Status da autenticação
# Rotas públicas
GET /owner/:ownerId # Buscar dados do owner
# Rotas privadas (requer JWT)
PUT /owner/private/update # Atualizar dados do owner
# Rotas públicas
GET /projects/owner/:ownerId # Listar projetos (com filtros)
GET /projects/owner/:ownerId/techs # Listar tecnologias usadas
# Rotas privadas (requer JWT)
POST /projects/private/create # Criar projeto
PUT /projects/private/:id/update # Atualizar projeto
DELETE /projects/private/:id/delete # Deletar projeto
PUT /projects/private/:id/handle-activate # Ativar/desativar projeto
# Rotas públicas
GET /skills/owner/:ownerId # Listar habilidades
GET /skills/types # Listar tipos de habilidades
# Rotas privadas (requer JWT)
POST /skills/private/create # Criar habilidade
PUT /skills/private/:id/update # Atualizar habilidade
DELETE /skills/private/:id/delete # Deletar habilidade
# Rotas públicas
GET /formations/owner/:ownerId # Listar formações
GET /formations/types # Listar tipos de formações
# Rotas privadas (requer JWT)
POST /formations/private/create # Criar formação
PUT /formations/private/:id/update # Atualizar formação
DELETE /formations/private/:id/delete # Deletar formação
GET /utilis/navbar # Itens da navegação
GET /utilis/services # Lista de serviços oferecidos
GET /utilis/languages # Idiomas suportados para tradução
GET /status # Status da aplicação e sistema
A API usa JWT (JSON Web Tokens) para autenticação. Para acessar rotas privadas:
- Registre-se ou faça login para obter um token
- Inclua o token no header das requisições:
Authorization: Bearer seu_jwt_token_aqui
POST /auth/register
{
"name": "João Silva",
"email": "[email protected]",
"password": "senha123",
"about": "Desenvolvedor Full Stack",
"occupation": "Software Engineer",
"birthDate": "1990-01-01"
}
POST /auth/login
{
"email": "[email protected]",
"password": "senha123"
}
A API oferece tradução automática usando Gemini AI:
Adicione o parâmetro language
em qualquer endpoint público:
GET /projects/owner/123?language=en
GET /skills/owner/123?language=es
GET /formations/owner/123?language=fr
- Cache inteligente: Traduções são cached por 24 horas
- Gerenciamento de quota: Proteção contra esgotamento da quota da API
- Fallback automático: Retorna dados originais se a tradução falhar
- Rate limiting: Controle automático de requisições
Consulte /utilis/languages
para lista completa de idiomas suportados.
# Dockerfile já configurado para produção
# Usa Node.js 22 Alpine para otimização
services:
app:
build: .
ports:
- "8081:8081"
volumes:
- ./src:/app/src
- ./prisma:/app/prisma
# Construir e iniciar
docker compose up -d
# Ver logs
docker compose logs -f
# Parar containers
docker compose down
# Todos os testes
npm test
# Modo watch (desenvolvimento)
npm run test:watch
- Unit tests: Testam serviços e funções isoladamente
- Integration tests: Testam endpoints da API
- Mocks: Prisma e Gemini AI mockados para testes
Acesse a documentação interativa em:
http://localhost:8081/docs
- Explorar endpoints: Interface interativa
- Testar requisições: Execute chamadas diretamente na documentação
- Schemas: Visualize modelos de dados
- Autenticação: Teste com JWT tokens
A especificação OpenAPI está disponível em formato YAML em /src/docs/
.
src/
├── controllers/ # Controladores HTTP
├── services/ # Lógica de negócio
├── repository/ # Acesso ao banco de dados
├── middleware/ # Middlewares (auth, logs)
├── validations/ # Validações de dados
├── types/ # Tipos TypeScript
├── utils/ # Utilitários
├── docs/ # Documentação Swagger
└── tests/ # Testes automatizados
Request → Controller → Service → Repository → Database
↓
Response ← Controller ← Service ← Repository ← Database
{
"dev": "Desenvolvimento com hot reload",
"build": "Compilar TypeScript",
"start": "Iniciar servidor de produção",
"test": "Executar testes",
"test:watch": "Testes em modo watch",
"db": "Sincronizar schema do Prisma",
"db:generate": "Gerar cliente Prisma",
"db:studio": "Abrir Prisma Studio",
"prod:up": "Docker Compose up",
"prod:down": "Docker Compose down"
}
- Monitoramento automático de uso da API Gemini
- Rate limiting inteligente
- Logs detalhados de uso de quota
- Tratamento centralizado de erros
- Códigos de status HTTP apropriados
- Mensagens de erro descritivas
- Proteção contra ataques de força bruta
- Validação rigorosa de dados de entrada
- Hash seguro de senhas com Argon2
- 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. Veja o arquivo LICENSE
para mais detalhes.
- GitHub: @wallacemt
- API em produção: https://dev-portifoio-api.onrender.com
⭐ Se este projeto foi útil para você, considere dar uma estrela no GitHub!