Thanks to visit codestin.com
Credit goes to github.com

Skip to content

wallacemt/dev-portifoio-api

Repository files navigation

🚀 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

🔐 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

git clone https://github.com/wallacemt/dev-portifoio-api.git
cd dev-portifoio-api

2. Instale as dependências

npm install

3. Configure as variáveis de ambiente

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

4. Configure o banco de dados

# Gera o cliente Prisma
npm run db:generate

# Sincroniza o schema com o banco
npm run db

🎯 Uso

Desenvolvimento

# Inicia o servidor em modo desenvolvimento
npm run dev

Produção

# Constrói o projeto
npm run build

# Inicia o servidor de produção
npm start

Docker

# 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)

POST /auth/register      # Cadastro de novo owner
POST /auth/login         # Login do owner
GET  /auth               # Status da autenticação

👤 Owner (/owner)

# Rotas públicas
GET  /owner/:ownerId     # Buscar dados do owner

# Rotas privadas (requer JWT)
PUT  /owner/private/update  # Atualizar dados do owner

🚀 Projetos (/projects)

# 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)

# 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)

# 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)

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)

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:
Authorization: Bearer seu_jwt_token_aqui

Exemplo de registro:

POST /auth/register
{
  "name": "João Silva",
  "email": "[email protected]",
  "password": "senha123",
  "about": "Desenvolvedor Full Stack",
  "occupation": "Software Engineer",
  "birthDate": "1990-01-01"
}

Exemplo de login:

POST /auth/login
{
  "email": "[email protected]",
  "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:

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 já configurado para produção
# Usa Node.js 22 Alpine para otimização

Docker Compose

services:
  app:
    build: .
    ports:
      - "8081:8081"
    volumes:
      - ./src:/app/src
      - ./prisma:/app/prisma

Comandos úteis:

# Construir e iniciar
docker compose up -d

# Ver logs
docker compose logs -f

# Parar containers
docker compose down

🧪 Testes

Executar testes:

# 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

{
  "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


⭐ Se este projeto foi útil para você, considere dar uma estrela no GitHub!

About

Uma API RESTful completa para portfólio pessoal, desenvolvida em TypeScript com Node.js, Express e Prisma ORM.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published