Api de encurtamento de URLs desenvolvido com NestJS.
Antes de executar o projeto, certifique-se de ter instalado:
# Verificar Docker
docker --version
# Verificar Docker Compose
docker-compose --version
# Verificar Git
git --version
git clone https://github.com/jheisonnovak/url-shortener.git
cd url-shortener
Crie o arquivo .env
baseado no .env.example
:
# Windows (Command Prompt)
copy .env.example .env
# Windows (PowerShell)
Copy-Item .env.example .env
# Linux/Mac
cp .env.example .env
# Construir e iniciar todos os serviços
npm run docker:up
# Ou usando Docker Compose diretamente
docker-compose up --build -d
# Verificar status dos containers
docker-compose ps
# Visualizar logs em tempo real
npm run docker:logs
# Ou para um serviço específico
docker-compose logs -f api-gateway
- Documentação Swagger: http://localhost:2000/api/docs
- API Gateway: http://localhost:2000
- pgAdmin: http://localhost:5050
- RabbitMQ Management: http://localhost:15672
# Ambiente
NODE_ENV=production
# API Gateway
PORT=2000
# RabbitMQ
RABBITMQ_URL=amqp://user:password@rabbitmq:5672
RABBITMQ_USER=user
RABBITMQ_PASSWORD=password
# Banco de Dados
DB_HOST=postgres
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=postgres
DB_NAME=postgres
DB_NAME_SHORTENER=url_shortener
DB_NAME_AUTH=auth_service
# JWT
JWT_SECRET=sua_chave_secreta_super_segura_aqui
JWT_EXPIRES_IN=15m
# PgAdmin
[email protected]
PGADMIN_PASSWORD=admin
- Host: localhost:5434 ou postgres
- Usuário: postgres
- Senha: postgres
- Databases:
url_shortener
,auth_service
- URL: http://localhost:5050
- Email: [email protected]
- Senha: admin
- URL: http://localhost:15672
- Usuário: user
- Senha: password
A documentação completa da API está disponível via Swagger UI:
URL: http://localhost:2000/api/docs
POST /auth/register
- Registrar usuárioPOST /auth/login
- Fazer login
POST /shortener
- Encurtar URLGET /:shortCode
- Redirecionar para URL originalGET /shortener
- Listar URLs do usuário (autenticado)PATCH /shortener/:shortCode
- Atualizar URL (autenticado)DELETE /shortener/:shortCode
- Excluir URL (autenticado)
Para suportar crescimento e alta demanda, o sistema pode ser expandido com as seguintes melhorias:
-
Múltiplas Instâncias de Microserviços
-
Cache Distribuído
-
Monitoramento e Observabilidade
-
Geração de Short Codes Únicos: garantir unicidade em múltiplas instâncias
-
Consistência de Dados: manter consistência entre múltiplas instâncias e databases
-
Rate Limiting Distribuído: controlar limite de requisições por usuário/IP globalmente
- Jheison Novak - Github