https://github.com/wallacemt/dev-portifoio-api
Uma API RESTful completa para portfólio pessoal, desenvolvida em TypeScript com Node.js, Express e Prisma ORM.
https://github.com/wallacemt/dev-portifoio-api
api backend bun express jwt node orm prisma typescript
Last synced: 5 months ago
JSON representation
Uma API RESTful completa para portfólio pessoal, desenvolvida em TypeScript com Node.js, Express e Prisma ORM.
- Host: GitHub
- URL: https://github.com/wallacemt/dev-portifoio-api
- Owner: wallacemt
- Created: 2025-07-04T21:41:39.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2025-09-04T19:00:28.000Z (10 months ago)
- Last Synced: 2025-09-04T20:42:40.919Z (10 months ago)
- Topics: api, backend, bun, express, jwt, node, orm, prisma, typescript
- Language: TypeScript
- Homepage: https://dev-portifoio-api.onrender.com/
- Size: 759 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 🚀 Developer Portfolio Backend API
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.
## 📋 Índice
- [Recursos](#recursos)
- [Tecnologias](#tecnologias)
- [Pré-requisitos](#pré-requisitos)
- [Instalação](#instalação)
- [Configuração](#configuração)
- [Uso](#uso)
- [API Endpoints](#api-endpoints)
- [Autenticação](#autenticação)
- [Tradução Multi-idioma](#tradução-multi-idioma)
- [Docker](#docker)
- [Testes](#testes)
- [Documentação da API](#documentação-da-api)
- [Contribuição](#contribuição)
## ✨ Recursos
### 🔐 Autenticação e Segurança
- 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
### 📊 Gerenciamento de Dados
- **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
- 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
### 🛠️ Recursos Técnicos
- 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
## 🛠️ Tecnologias
### Backend
- **Node.js** - Runtime JavaScript
- **TypeScript** - Superset tipado do JavaScript
- **Express** - Framework web minimalista
- **Prisma ORM** - ORM moderno para TypeScript/JavaScript
### Banco de Dados
- **MongoDB** - Banco de dados NoSQL
### Autenticação e Segurança
- **JWT** - JSON Web Tokens para autenticação
- **Argon2** - Hash de senhas seguro
- **CORS** - Cross-Origin Resource Sharing
### IA e Tradução
- **Gemini AI SDK** - Serviço de tradução automática
- Sistema de cache e quota inteligente
### Testes e Documentação
- **Jest** - Framework de testes
- **Supertest** - Testes de API HTTP
- **Swagger** - Documentação automática da API
### DevOps
- **Docker** - Containerização
- **Docker Compose** - Orquestração de containers
## 📋 Pré-requisitos
- Node.js (versão 18 ou superior)
- npm ou yarn
- MongoDB (local ou Atlas)
- Docker (opcional)
## 🚀 Instalação
### 1. Clone o repositório
```bash
git clone https://github.com/wallacemt/dev-portifoio-api.git
cd dev-portifoio-api
```
### 2. Instale as dependências
```bash
npm install
```
### 3. Configure as variáveis de ambiente
Crie um arquivo `.env` na raiz do projeto:
```env
# 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
```
### 4. Configure o banco de dados
```bash
# Gera o cliente Prisma
npm run db:generate
# Sincroniza o schema com o banco
npm run db
```
## 🎯 Uso
### Desenvolvimento
```bash
# Inicia o servidor em modo desenvolvimento
npm run dev
```
### Produção
```bash
# Constrói o projeto
npm run build
# Inicia o servidor de produção
npm start
```
### Docker
```bash
# Inicia com Docker Compose
npm run prod:up
# Para o container
npm run prod:down
```
O servidor estará disponível em `http://localhost:8081`
## 📡 API Endpoints
### 🔐 Autenticação (`/auth`)
```http
POST /auth/register # Cadastro de novo owner
POST /auth/login # Login do owner
GET /auth # Status da autenticação
```
### 👤 Owner (`/owner`)
```http
# Rotas públicas
GET /owner/:ownerId # Buscar dados do owner
# Rotas privadas (requer JWT)
PUT /owner/private/update # Atualizar dados do owner
```
### 🚀 Projetos (`/projects`)
```http
# 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
```
### 🛠️ Habilidades (`/skills`)
```http
# 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
```
### 🎓 Formações (`/formations`)
```http
# 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
```
### 🔧 Utilitários (`/utilis`)
```http
GET /utilis/navbar # Itens da navegação
GET /utilis/services # Lista de serviços oferecidos
GET /utilis/languages # Idiomas suportados para tradução
```
### 📊 Status (`/status`)
```http
GET /status # Status da aplicação e sistema
```
## 🔐 Autenticação
A API usa JWT (JSON Web Tokens) para autenticação. Para acessar rotas privadas:
1. **Registre-se ou faça login** para obter um token
2. **Inclua o token** no header das requisições:
```http
Authorization: Bearer seu_jwt_token_aqui
```
### Exemplo de registro:
```json
POST /auth/register
{
"name": "João Silva",
"email": "joao@exemplo.com",
"password": "senha123",
"about": "Desenvolvedor Full Stack",
"occupation": "Software Engineer",
"birthDate": "1990-01-01"
}
```
### Exemplo de login:
```json
POST /auth/login
{
"email": "joao@exemplo.com",
"password": "senha123"
}
```
## 🌍 Tradução Multi-idioma
A API oferece tradução automática usando Gemini AI:
### Como usar:
Adicione o parâmetro `language` em qualquer endpoint público:
```http
GET /projects/owner/123?language=en
GET /skills/owner/123?language=es
GET /formations/owner/123?language=fr
```
### Recursos de tradução:
- **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
### Idiomas suportados:
Consulte `/utilis/languages` para lista completa de idiomas suportados.
## 🐳 Docker
### Configuração Docker
```dockerfile
# Dockerfile já configurado para produção
# Usa Node.js 22 Alpine para otimização
```
### Docker Compose
```yaml
services:
app:
build: .
ports:
- "8081:8081"
volumes:
- ./src:/app/src
- ./prisma:/app/prisma
```
### Comandos úteis:
```bash
# Construir e iniciar
docker compose up -d
# Ver logs
docker compose logs -f
# Parar containers
docker compose down
```
## 🧪 Testes
### Executar testes:
```bash
# Todos os testes
npm test
# Modo watch (desenvolvimento)
npm run test:watch
```
### Estrutura de testes:
- **Unit tests**: Testam serviços e funções isoladamente
- **Integration tests**: Testam endpoints da API
- **Mocks**: Prisma e Gemini AI mockados para testes
## 📚 Documentação da API
### Swagger UI
Acesse a documentação interativa em:
```
http://localhost:8081/docs
```
### Recursos da documentação:
- **Explorar endpoints**: Interface interativa
- **Testar requisições**: Execute chamadas diretamente na documentação
- **Schemas**: Visualize modelos de dados
- **Autenticação**: Teste com JWT tokens
### OpenAPI Spec
A especificação OpenAPI está disponível em formato YAML em `/src/docs/`.
## 🏗️ Arquitetura
### Estrutura de pastas:
```
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
```
### Fluxo de dados:
```
Request → Controller → Service → Repository → Database
↓
Response ← Controller ← Service ← Repository ← Database
```
## 🔧 Scripts NPM
```json
{
"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"
}
```
## 🌟 Recursos Avançados
### Quota Management
- Monitoramento automático de uso da API Gemini
- Rate limiting inteligente
- Logs detalhados de uso de quota
### Error Handling
- Tratamento centralizado de erros
- Códigos de status HTTP apropriados
- Mensagens de erro descritivas
### Security Features
- Proteção contra ataques de força bruta
- Validação rigorosa de dados de entrada
- Hash seguro de senhas com Argon2
## 🤝 Contribuição
1. Fork o projeto
2. Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)
4. Push para a branch (`git push origin feature/AmazingFeature`)
5. Abra um Pull Request
## 📝 Licença
Este projeto está sob a licença ISC. Veja o arquivo `LICENSE` para mais detalhes.
## 👨💻 Autor
- GitHub: [@wallacemt](https://github.com/wallacemt)
- API em produção: [https://dev-portifoio-api.onrender.com](https://dev-portifoio-api.onrender.com)
---
⭐ Se este projeto foi útil para você, considere dar uma estrela no GitHub!