Сервис сокращения ссылок на Go. Поддерживает кастомные коды, аналитику визитов и кэширование через Redis.
- Go 1.26 — язык
- PostgreSQL 16 — хранилище ссылок и визитов
- Redis 7 — кэш ссылок
- golang-migrate — миграции БД
- pgx/v5 — драйвер PostgreSQL
- Скопируйте конфиг и при необходимости отредактируйте:
cp config.example.yaml config.yaml- Поднимает PostgreSQL, Redis, запускает миграции и само приложение:
docker compose up -dПриложение будет доступно на http://localhost:8080.
Остановить и удалить контейнеры:
docker compose downТребования: Go 1.22+, PostgreSQL, Redis, Task.
- Скопируйте конфиг и при необходимости отредактируйте:
cp config.example.yaml config.yaml- Запустите зависимости (PostgreSQL и Redis):
docker compose up -d postgres redis- Примените миграции:
go run ./cmd/app/main.go --config config.yaml --migrate- Запустите приложение:
task run| Метод | Путь | Описание |
|---|---|---|
POST |
/shorten |
Создать короткую ссылку |
GET |
/s/{code} |
Редирект по короткому коду |
GET |
/analytics/{code} |
Аналитика ссылки |
GET |
/ |
Веб-интерфейс |
{
"long_url": "https://example.com/very/long/path",
"custom_code": "mycode"
}custom_code — опционально, 3–30 символов, только буквы, цифры и дефис.
{
"total_visits": 42,
"by_day": [{ "day": "2026-03-31", "count": 10 }],
"by_month": [{ "month": "2026-03", "count": 42 }],
"by_user_agent": [{ "user_agent": "Chrome/120", "count": 30 }]
}# Unit-тесты (без Docker)
go test ./internal/service/... ./internal/handler/...
# Интеграционные тесты (поднимают контейнеры через testcontainers-go)
go test ./internal/repository/... ./internal/cache/redis/...
# Все тесты без кэша
go test -count=1 ./...
# С покрытием
go test -coverprofile=coverage.out ./... && go tool cover -html=coverage.out| Команда | Описание |
|---|---|
task run |
Запустить приложение |
task lint |
Запустить golangci-lint |
task docker:up |
Поднять все контейнеры |
task docker:down |
Остановить контейнеры |
task docker:logs |
Логи приложения |
task docker:rebuild |
Пересобрать и перезапустить app |