Skip to content

jheisonnovak/url-shortener

Repository files navigation

URL Shortener - API de Encurtamento de URLs

Api de encurtamento de URLs desenvolvido com NestJS.

📋 Pré-requisitos

Antes de executar o projeto, certifique-se de ter instalado:

Verificar Instalação

# Verificar Docker
docker --version

# Verificar Docker Compose
docker-compose --version

# Verificar Git
git --version

🚀 Instalação e Execução

1. Clone o Repositório

git clone https://github.com/jheisonnovak/url-shortener.git
cd url-shortener

2. Configuração das Variáveis de Ambiente

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

3. Execute o Sistema com Docker

# Construir e iniciar todos os serviços
npm run docker:up

# Ou usando Docker Compose diretamente
docker-compose up --build -d

4. Verificar se os Serviços Estão Funcionando

# 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

5. Acessar a Aplicação

⚙️ Configuração

Variáveis de Ambiente (.env)

# 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

Credenciais Padrão

PostgreSQL

  • Host: localhost:5434 ou postgres
  • Usuário: postgres
  • Senha: postgres
  • Databases: url_shortener, auth_service

pgAdmin

RabbitMQ Management

📚 Documentação da API

A documentação completa da API está disponível via Swagger UI:

URL: http://localhost:2000/api/docs

Principais Endpoints:

Autenticação

  • POST /auth/register - Registrar usuário
  • POST /auth/login - Fazer login

URLs

  • POST /shortener - Encurtar URL
  • GET /:shortCode - Redirecionar para URL original
  • GET /shortener - Listar URLs do usuário (autenticado)
  • PATCH /shortener/:shortCode - Atualizar URL (autenticado)
  • DELETE /shortener/:shortCode - Excluir URL (autenticado)

📈 Escalabilidade e Pontos de Melhoria

🚀 Preparação para Escalabilidade Horizontal

Para suportar crescimento e alta demanda, o sistema pode ser expandido com as seguintes melhorias:

  1. Múltiplas Instâncias de Microserviços

  2. Cache Distribuído

  3. Monitoramento e Observabilidade

🎯 Principais Desafios de Escalabilidade

  1. Geração de Short Codes Únicos: garantir unicidade em múltiplas instâncias

  2. Consistência de Dados: manter consistência entre múltiplas instâncias e databases

  3. Rate Limiting Distribuído: controlar limite de requisições por usuário/IP globalmente

👥 Autor

About

URL shortener in a monorepo with microservices – built with NestJS, PostgreSQL and RabbitMQ.

Resources

Stars

Watchers

Forks

Packages

No packages published