WB L0 Go микросервис на языке Go, для обработки и управления заказами
- Go 1.25.0 или выше
- Docker и Docker Compose
- Make (опционально)
- Клонируйте репозиторий:
git clone <repository-url>
cd wb-l0-go- Запустите все сервисы:
docker-compose up -d- Проверьте статус сервисов:
docker-compose ps- Установите зависимости:
make deps
go mod tidy- Настройте переменные окружения:
cp .env.example .env
# Отредактируйте .env файл под ваши настройки- Запустите миграции:
make migrate-up- Запустите приложение:
make run-api- URL:
http://localhost:8080/swagger/ - Описание: Интерактивная документация API
GET /orders?limit=50&offset=0
Параметры:
limit(опционально) - количество заказов (по умолчанию: 50)offset(опционально) - смещение (по умолчанию: 0)
GET /orders/{order_uid}
Параметры:
order_uid(обязательно) - уникальный идентификатор заказа
POST /publish
Тело запроса: JSON объект заказа Ответ: Статус публикации
| Переменная | Описание | Значение по умолчанию |
|---|---|---|
APP_NAME |
Название приложения | wb-l0-go |
HTTP_ADDR |
HTTP адрес сервера | :8080 |
KAFKA_BROKERS |
Адреса Kafka брокеров | localhost:9092 |
KAFKA_TOPIC |
Топик Kafka | orders |
KAFKA_GROUP_ID |
ID группы потребителя | wb-l0-go-consumer |
PG_DSN |
DSN PostgreSQL | postgres://postgres:postgres@localhost:5432/l0?sslmode=disable |
LOG_LEVEL |
Уровень логирования | info |
CACHE_MAX_ITEMS |
Максимальное количество элементов в кэше | 100 |
type Config struct {
AppName string `envconfig:"APP_NAME" default:"wb-l0-go"`
HTTPAddr string `envconfig:"HTTP_ADDR" default:":8080"`
KafkaBrokers []string `envconfig:"KAFKA_BROKERS" default:"localhost:9092"`
KafkaTopic string `envconfig:"KAFKA_TOPIC" default:"orders"`
KafkaGroupID string `envconfig:"KAFKA_GROUP_ID" default:"wb-l0-go-consumer"`
PostgresDSN string `envconfig:"PG_DSN" default:"postgres://postgres:postgres@localhost:5432/l0?sslmode=disable"`
LogLevel string `envconfig:"LOG_LEVEL" default:"info"`
CacheMaxItems int `envconfig:"CACHE_MAX_ITEMS" default:"100"`
}wb-l0-go/
├── cmd/ # Точки входа приложения
│ └── app/
│ └── main.go # Основная функция main
├── internal/ # Внутренние пакеты
│ ├── cache/ # Слой кэширования
│ ├── config/ # Конфигурация
│ ├── db/ # Подключение к БД
│ ├── domain/ # Доменные модели
│ ├── frontend/ # Статические файлы
│ ├── logger/ # Логирование
│ ├── repository/ # Слой доступа к данным
│ ├── service/ # Бизнес-логика
│ └── transport/ # Транспортный слой
│ ├── http/ # HTTP handlers
│ └── kafka/ # Kafka producer/consumer
├── migrations/ # Миграции базы данных
├── docs/ # Swagger документация
├── docker-compose.yml # Docker Compose конфигурация
├── Dockerfile # Docker образ
├── Makefile # Команды для сборки и запуска
├── go.mod # Go модули
└── README.md # Документация
# Запуск приложения
make run-app
# Сборка приложения
make build
# Управление зависимостями
make deps
make tidy
# Тестирование
make test # Все тесты
# Миграции БД
make migrate-install # Установка golang-migrate
make migrate-create # Создание новой миграции
make migrate-up # Применение миграций
make migrate-down # Откат миграций# Запуск всех сервисов
docker-compose up -d
# Остановка всех сервисов
docker-compose down
# Просмотр логов
docker-compose logs -f app
# Пересборка и перезапуск
docker-compose up -d --buildmake migrate-create name=add_new_table# Все тесты
make test
# Конкретный пакет
go test -v ./internal/service/
Приложение использует структурированное логирование с помощью Zap:
log.Info("server started", zap.String("addr", cfg.HTTPAddr))
log.Error("failed to process order", zap.Error(err), zap.String("order_uid", orderUID))Доступен веб-интерфейс для мониторинга Kafka:
- URL:
http://localhost:8081 - Описание: Управление топиками, просмотр сообщений