Calanggo é um encurtador de URLs de alta performance desenvolvido em Go, seguindo os princípios da Arquitetura Hexagonal (Ports & Adapters).
O projeto visa demonstrar uma implementação limpa e desacoplada de um serviço de encurtamento de links, separando a lógica de negócio (Core) das dependências externas (Adapters), como interfaces HTTP e persistência de dados.
- Encurtamento de URLs: Gera códigos curtos e únicos para URLs longas.
- Redirecionamento: Redireciona usuários da URL curta para a original.
- Contagem de Visitas: Monitora o número de acessos de cada link encurtado.
- Documentação API: Interface Swagger integrada.
O sistema utiliza a arquitetura Hexagonal para garantir testabilidade e manutenibilidade.
- Core (Hexagon): Contém as regras de negócio (
LinkService) e entidades (Link). Não depende de frameworks externos. - Ports: Interfaces que definem como o mundo externo interage com o Core (Inbound) e como o Core interage com recursos externos (Outbound).
- Adapters: Implementações concretas das portas.
- Driving (Primary): Handler HTTP.
- Driven (Secondary): Repositório SQLite / Memória.
- Go 1.21+ instalado.
-
Clone o repositório:
git clone https://github.com/seu-usuario/calanggo-server.git cd calanggo-server -
Instale as dependências:
go mod download
-
Execute a aplicação:
go run main.go
O servidor iniciará na porta
8080por padrão.
Com o servidor rodando, acesse a documentação interativa em:
👉 http://localhost:8080/swagger/index.html
- POST
/api/v1/shorten- Cria uma nova URL encurtada.
- Body:
{ "long_url": "https://exemplo.com" }
- GET
/{code}- Redireciona para a URL original.
/
├── docs/ # Documentação Swagger e Specs
├── internal/
│ ├── adapters/ # Implementações (HTTP, SQLite)
│ └── core/ # Lógica de Negócio (Services, Domain)
├── pkg/ # Pacotes utilitários (Base62)
├── tests/ # Testes de integração
└── main.go # Ponto de entrada
Para rodar os testes do projeto:
go test ./...