{"id":38710944,"url":"https://github.com/wallacemt/dev-portifoio-api","last_synced_at":"2026-01-17T11:00:08.702Z","repository":{"id":311636099,"uuid":"1014008946","full_name":"wallacemt/dev-portifoio-api","owner":"wallacemt","description":"Uma API RESTful completa para portfólio pessoal, desenvolvida em TypeScript com Node.js, Express e Prisma ORM.","archived":false,"fork":false,"pushed_at":"2025-09-04T19:00:28.000Z","size":777,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-04T20:42:40.919Z","etag":null,"topics":["api","backend","bun","express","jwt","node","orm","prisma","typescript"],"latest_commit_sha":null,"homepage":"https://dev-portifoio-api.onrender.com/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wallacemt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-04T21:41:39.000Z","updated_at":"2025-09-04T19:00:32.000Z","dependencies_parsed_at":"2025-08-25T18:07:36.861Z","dependency_job_id":"ea9db1e1-8bd4-4ba9-b439-f1943be79989","html_url":"https://github.com/wallacemt/dev-portifoio-api","commit_stats":null,"previous_names":["wallacemt/dev-portifoio-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wallacemt/dev-portifoio-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wallacemt%2Fdev-portifoio-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wallacemt%2Fdev-portifoio-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wallacemt%2Fdev-portifoio-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wallacemt%2Fdev-portifoio-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wallacemt","download_url":"https://codeload.github.com/wallacemt/dev-portifoio-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wallacemt%2Fdev-portifoio-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28506593,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T10:25:30.148Z","status":"ssl_error","status_checked_at":"2026-01-17T10:25:29.718Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","backend","bun","express","jwt","node","orm","prisma","typescript"],"created_at":"2026-01-17T11:00:08.476Z","updated_at":"2026-01-17T11:00:08.665Z","avatar_url":"https://github.com/wallacemt.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚀 Developer Portfolio Backend API\n\nUma 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.\n\n## 📋 Índice\n\n- [Recursos](#recursos)\n- [Tecnologias](#tecnologias)\n- [Pré-requisitos](#pré-requisitos)\n- [Instalação](#instalação)\n- [Configuração](#configuração)\n- [Uso](#uso)\n- [API Endpoints](#api-endpoints)\n- [Autenticação](#autenticação)\n- [Tradução Multi-idioma](#tradução-multi-idioma)\n- [Docker](#docker)\n- [Testes](#testes)\n- [Documentação da API](#documentação-da-api)\n- [Contribuição](#contribuição)\n\n## ✨ Recursos\n\n### 🔐 Autenticação e Segurança\n\n- Autenticação JWT com tokens de 7 dias\n- Proteção contra ataques de força bruta (máx. 3 tentativas)\n- Hash de senhas com Argon2\n- Middleware de autenticação para rotas privadas\n\n### 📊 Gerenciamento de Dados\n\n- **Projetos**: CRUD completo com filtros, paginação e ativação/desativação\n- **Habilidades**: Organização por stack e tipo com sub-habilidades\n- **Formações**: Gerenciamento de certificações e cursos\n- **Perfil do Owner**: Atualização de dados pessoais e profissionais\n\n### 🌍 Tradução Automática\n\n- Tradução automática usando Gemini AI\n- Cache inteligente de 24 horas para otimização\n- Gerenciamento de quota com rate limiting\n- Fallback para dados originais quando quota esgotada\n- Suporte a múltiplos idiomas\n\n### 🛠️ Recursos Técnicos\n\n- Arquitetura em camadas (Controller → Service → Repository)\n- Validação de dados com Joi e Zod\n- Documentação automática com Swagger\n- Logs de requisições em desenvolvimento\n- Tratamento centralizado de erros\n\n## 🛠️ Tecnologias\n\n### Backend\n\n- **Node.js** - Runtime JavaScript\n- **TypeScript** - Superset tipado do JavaScript\n- **Express** - Framework web minimalista\n- **Prisma ORM** - ORM moderno para TypeScript/JavaScript\n\n### Banco de Dados\n\n- **MongoDB** - Banco de dados NoSQL\n\n### Autenticação e Segurança\n\n- **JWT** - JSON Web Tokens para autenticação\n- **Argon2** - Hash de senhas seguro\n- **CORS** - Cross-Origin Resource Sharing\n\n### IA e Tradução\n\n- **Gemini AI SDK** - Serviço de tradução automática\n- Sistema de cache e quota inteligente\n\n### Testes e Documentação\n\n- **Jest** - Framework de testes\n- **Supertest** - Testes de API HTTP\n- **Swagger** - Documentação automática da API\n\n### DevOps\n\n- **Docker** - Containerização\n- **Docker Compose** - Orquestração de containers\n\n## 📋 Pré-requisitos\n\n- Node.js (versão 18 ou superior)\n- npm ou yarn\n- MongoDB (local ou Atlas)\n- Docker (opcional)\n\n## 🚀 Instalação\n\n### 1. Clone o repositório\n\n```bash\ngit clone https://github.com/wallacemt/dev-portifoio-api.git\ncd dev-portifoio-api\n```\n\n### 2. Instale as dependências\n\n```bash\nnpm install\n```\n\n### 3. Configure as variáveis de ambiente\n\nCrie um arquivo `.env` na raiz do projeto:\n\n```env\n# Ambiente\nNODE_ENV=dev\n\n# Banco de dados\nMONGODB_URI=mongodb://localhost:27017/portfolio\n\n# Servidor\nPORT=8081\nFRONTEND_URL=http://localhost:3000\n\n# Autenticação\nJWT_SECRET=sua_chave_jwt_super_secreta_aqui\n\n# Gemini AI (para tradução)\nGEMINI_API_KEY=sua_chave_gemini_api_aqui\n```\n\n### 4. Configure o banco de dados\n\n```bash\n# Gera o cliente Prisma\nnpm run db:generate\n\n# Sincroniza o schema com o banco\nnpm run db\n```\n\n## 🎯 Uso\n\n### Desenvolvimento\n\n```bash\n# Inicia o servidor em modo desenvolvimento\nnpm run dev\n```\n\n### Produção\n\n```bash\n# Constrói o projeto\nnpm run build\n\n# Inicia o servidor de produção\nnpm start\n```\n\n### Docker\n\n```bash\n# Inicia com Docker Compose\nnpm run prod:up\n\n# Para o container\nnpm run prod:down\n```\n\nO servidor estará disponível em `http://localhost:8081`\n\n## 📡 API Endpoints\n\n### 🔐 Autenticação (`/auth`)\n\n```http\nPOST /auth/register      # Cadastro de novo owner\nPOST /auth/login         # Login do owner\nGET  /auth               # Status da autenticação\n```\n\n### 👤 Owner (`/owner`)\n\n```http\n# Rotas públicas\nGET  /owner/:ownerId     # Buscar dados do owner\n\n# Rotas privadas (requer JWT)\nPUT  /owner/private/update  # Atualizar dados do owner\n```\n\n### 🚀 Projetos (`/projects`)\n\n```http\n# Rotas públicas\nGET  /projects/owner/:ownerId        # Listar projetos (com filtros)\nGET  /projects/owner/:ownerId/techs  # Listar tecnologias usadas\n\n# Rotas privadas (requer JWT)\nPOST /projects/private/create             # Criar projeto\nPUT  /projects/private/:id/update         # Atualizar projeto\nDELETE /projects/private/:id/delete       # Deletar projeto\nPUT  /projects/private/:id/handle-activate # Ativar/desativar projeto\n```\n\n### 🛠️ Habilidades (`/skills`)\n\n```http\n# Rotas públicas\nGET  /skills/owner/:ownerId  # Listar habilidades\nGET  /skills/types           # Listar tipos de habilidades\n\n# Rotas privadas (requer JWT)\nPOST /skills/private/create        # Criar habilidade\nPUT  /skills/private/:id/update    # Atualizar habilidade\nDELETE /skills/private/:id/delete  # Deletar habilidade\n```\n\n### 🎓 Formações (`/formations`)\n\n```http\n# Rotas públicas\nGET  /formations/owner/:ownerId  # Listar formações\nGET  /formations/types           # Listar tipos de formações\n\n# Rotas privadas (requer JWT)\nPOST /formations/private/create        # Criar formação\nPUT  /formations/private/:id/update    # Atualizar formação\nDELETE /formations/private/:id/delete  # Deletar formação\n```\n\n### 🔧 Utilitários (`/utilis`)\n\n```http\nGET  /utilis/navbar     # Itens da navegação\nGET  /utilis/services   # Lista de serviços oferecidos\nGET  /utilis/languages  # Idiomas suportados para tradução\n```\n\n### 📊 Status (`/status`)\n\n```http\nGET  /status            # Status da aplicação e sistema\n```\n\n## 🔐 Autenticação\n\nA API usa JWT (JSON Web Tokens) para autenticação. Para acessar rotas privadas:\n\n1. **Registre-se ou faça login** para obter um token\n2. **Inclua o token** no header das requisições:\n\n```http\nAuthorization: Bearer seu_jwt_token_aqui\n```\n\n### Exemplo de registro:\n\n```json\nPOST /auth/register\n{\n  \"name\": \"João Silva\",\n  \"email\": \"joao@exemplo.com\",\n  \"password\": \"senha123\",\n  \"about\": \"Desenvolvedor Full Stack\",\n  \"occupation\": \"Software Engineer\",\n  \"birthDate\": \"1990-01-01\"\n}\n```\n\n### Exemplo de login:\n\n```json\nPOST /auth/login\n{\n  \"email\": \"joao@exemplo.com\",\n  \"password\": \"senha123\"\n}\n```\n\n## 🌍 Tradução Multi-idioma\n\nA API oferece tradução automática usando Gemini AI:\n\n### Como usar:\n\nAdicione o parâmetro `language` em qualquer endpoint público:\n\n```http\nGET /projects/owner/123?language=en\nGET /skills/owner/123?language=es\nGET /formations/owner/123?language=fr\n```\n\n### Recursos de tradução:\n\n- **Cache inteligente**: Traduções são cached por 24 horas\n- **Gerenciamento de quota**: Proteção contra esgotamento da quota da API\n- **Fallback automático**: Retorna dados originais se a tradução falhar\n- **Rate limiting**: Controle automático de requisições\n\n### Idiomas suportados:\n\nConsulte `/utilis/languages` para lista completa de idiomas suportados.\n\n## 🐳 Docker\n\n### Configuração Docker\n\n```dockerfile\n# Dockerfile já configurado para produção\n# Usa Node.js 22 Alpine para otimização\n```\n\n### Docker Compose\n\n```yaml\nservices:\n  app:\n    build: .\n    ports:\n      - \"8081:8081\"\n    volumes:\n      - ./src:/app/src\n      - ./prisma:/app/prisma\n```\n\n### Comandos úteis:\n\n```bash\n# Construir e iniciar\ndocker compose up -d\n\n# Ver logs\ndocker compose logs -f\n\n# Parar containers\ndocker compose down\n```\n\n## 🧪 Testes\n\n### Executar testes:\n\n```bash\n# Todos os testes\nnpm test\n\n# Modo watch (desenvolvimento)\nnpm run test:watch\n```\n\n### Estrutura de testes:\n\n- **Unit tests**: Testam serviços e funções isoladamente\n- **Integration tests**: Testam endpoints da API\n- **Mocks**: Prisma e Gemini AI mockados para testes\n\n## 📚 Documentação da API\n\n### Swagger UI\n\nAcesse a documentação interativa em:\n\n```\nhttp://localhost:8081/docs\n```\n\n### Recursos da documentação:\n\n- **Explorar endpoints**: Interface interativa\n- **Testar requisições**: Execute chamadas diretamente na documentação\n- **Schemas**: Visualize modelos de dados\n- **Autenticação**: Teste com JWT tokens\n\n### OpenAPI Spec\n\nA especificação OpenAPI está disponível em formato YAML em `/src/docs/`.\n\n## 🏗️ Arquitetura\n\n### Estrutura de pastas:\n\n```\nsrc/\n├── controllers/     # Controladores HTTP\n├── services/        # Lógica de negócio\n├── repository/      # Acesso ao banco de dados\n├── middleware/      # Middlewares (auth, logs)\n├── validations/     # Validações de dados\n├── types/           # Tipos TypeScript\n├── utils/           # Utilitários\n├── docs/            # Documentação Swagger\n└── tests/           # Testes automatizados\n```\n\n### Fluxo de dados:\n\n```\nRequest → Controller → Service → Repository → Database\n                    ↓\nResponse ← Controller ← Service ← Repository ← Database\n```\n\n## 🔧 Scripts NPM\n\n```json\n{\n  \"dev\": \"Desenvolvimento com hot reload\",\n  \"build\": \"Compilar TypeScript\",\n  \"start\": \"Iniciar servidor de produção\",\n  \"test\": \"Executar testes\",\n  \"test:watch\": \"Testes em modo watch\",\n  \"db\": \"Sincronizar schema do Prisma\",\n  \"db:generate\": \"Gerar cliente Prisma\",\n  \"db:studio\": \"Abrir Prisma Studio\",\n  \"prod:up\": \"Docker Compose up\",\n  \"prod:down\": \"Docker Compose down\"\n}\n```\n\n## 🌟 Recursos Avançados\n\n### Quota Management\n\n- Monitoramento automático de uso da API Gemini\n- Rate limiting inteligente\n- Logs detalhados de uso de quota\n\n### Error Handling\n\n- Tratamento centralizado de erros\n- Códigos de status HTTP apropriados\n- Mensagens de erro descritivas\n\n### Security Features\n\n- Proteção contra ataques de força bruta\n- Validação rigorosa de dados de entrada\n- Hash seguro de senhas com Argon2\n\n## 🤝 Contribuição\n\n1. Fork o projeto\n2. Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`)\n3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)\n4. Push para a branch (`git push origin feature/AmazingFeature`)\n5. Abra um Pull Request\n\n## 📝 Licença\n\nEste projeto está sob a licença ISC. Veja o arquivo `LICENSE` para mais detalhes.\n\n## 👨‍💻 Autor\n- GitHub: [@wallacemt](https://github.com/wallacemt)\n- API em produção: [https://dev-portifoio-api.onrender.com](https://dev-portifoio-api.onrender.com)\n\n---\n\n⭐ Se este projeto foi útil para você, considere dar uma estrela no GitHub!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwallacemt%2Fdev-portifoio-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwallacemt%2Fdev-portifoio-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwallacemt%2Fdev-portifoio-api/lists"}