REST API для магазина бытовой техники, разработанный на Go (Gin) и PostgreSQL.
Поддерживает управление клиентами, продуктами, поставщиками и изображениями с полной документацией через Swagger UI.
- CRUD-операции для клиентов, продуктов, поставщиков и изображений
- Поиск клиентов по имени и фамилии с пагинацией
- Управление складом - уменьшение остатка с проверкой доступного количества
- Каскадное обновление адресов (клиенты, поставщики)
- Загрузка изображений в формате
multipart/form-data - Валидация входных данных с возвратом детализированных ошибок
- HTTP-статусы 200/201/204, 400, 404, 409, 500
- Документация OpenAPI 3.0 (Swagger UI) доступна из коробки
- Контейнеризация через Docker и docker-compose
- Миграции БД с
golang-migrate
git clone <repo-url> && cd src
docker compose up --buildПосле сборки и старта контейнеров:
- API:
http://localhost:8080 - Swagger UI:
http://localhost:8080/swagger/index.html
cp .env.example .env # отредактируйте под свои настройки
make build
make migrate-up
make run # или go run ./cmd/serverВсе маршруты начинаются с префикса /api/v1.
| Метод | URL | Описание |
|---|---|---|
| POST | /clients |
Создать клиента |
| DELETE | /clients/:id |
Удалить клиента |
| GET | /clients?name=...&surname= |
Поиск по имени и фамилии |
| GET | /clients/all?limit=&offset= |
Получить всех клиентов |
| PATCH | /clients/:id/address |
Обновить адрес клиента |
| Метод | URL | Описание |
|---|---|---|
| POST | /products |
Создать продукт |
| PATCH | /products/:id/decrease |
Уменьшить остаток |
| GET | /products/:id |
Получить продукт по ID |
| GET | /products |
Получить доступные продукты |
| DELETE | /products/:id |
Удалить продукт |
| Метод | URL | Описание |
|---|---|---|
| POST | /suppliers |
Создать поставщика |
| PATCH | /suppliers/:id/address |
Обновить адрес поставщика |
| DELETE | /suppliers/:id |
Удалить поставщика |
| GET | /suppliers |
Получить всех поставщиков |
| GET | /suppliers/:id |
Получить поставщика по ID |
| Метод | URL | Описание |
|---|---|---|
| POST | /images |
Загрузить изображение |
| PUT | /images/:id |
Заменить изображение |
| DELETE | /images/:id |
Удалить изображение |
| GET | /images/:id |
Получить изображение по ID |
| GET | /images/product/:productId |
Получить изображение продукта |
Основные таблицы: addresses, clients, suppliers, products, images.
Связи реализованы через внешние ключи. Все первичные ключи - UUID.
Индексы созданы для полей, участвующих в поиске (clients.name, clients.surname, products.category, products.available_stock).
hestia/
├── cmd/server/ # Точка входа
├── internal/
│ ├── config/ # Загрузка конфигурации из env
│ ├── database/
│ │ ├── migrations/ # SQL-файлы миграций
│ │ └── postgres.go # Подключение к БД, запуск миграций
│ ├── dto/ # Объекты передачи данных (запросы/ответы)
│ ├── handler/ # HTTP-обработчики
│ │ ├── middleware/ # Логирование
│ │ └── *_test.go # Интеграционные тесты
│ ├── mapper/ # Маппинг DTO <-> модели
│ ├── models/ # DAL-модели (структуры таблиц)
│ ├── repository/ # Интерфейсы + Postgres-реализации
│ └── service/ # Бизнес-логика
├── docs/ # Сгенерированная Swagger-документация
├── .env # Переменные окружения
├── docker-compose.yml # Оркестрация контейнеров
├── Dockerfile # Сборка образа
├── Makefile # Удобные команды
└── go.mod / go.sum
Swagger-документация генерируется автоматически при сборке контейнера или локально командой make swagger.
Интерактивный UI доступен по /swagger/index.html.
| Swagger UI | API Пример |
|---|---|
![]() |
![]() |
run – запуск docker compose up --build
build – сборка бинарника
swagger – генерация документации
migrate-up – применение миграций
migrate-down – откат миграций
test – запуск тестов с генерацией документацииТесты покрывают создание, валидацию, удаление и обработку ошибок всех сущностей. Используются моки репозиториев. Запуск:
cd hestia
make testПриложение конфигурируется через переменные окружения (прописаны в docker-compose.yml). Пример .env:
SERVER_PORT=8080
DB_HOST=db
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=store
DB_SSLMODE=disableMIT License. См. LICENSE для подробностей.
- Аутентификация и авторизация (JWT)
- Пагинация для списка товаров
- Фильтрация товаров по категории и цене
- Хранение изображений в S3/MinIO (вместо BYTEA в БД)
- Метрики Prometheus
- Форкните репозиторий
- Создайте ветку:
git checkout -b feature/your-feature - Внесите изменения и добавьте тесты
- Убедитесь, что все тесты проходят:
make test - Отправьте pull request
Автор: 4vertak
По вопросам: открывайте Issue в GitHub.



