Этот проект представляет собой сервис для управления пунктами выдачи заказов (ПВЗ). Он предоставляет пользователям следующие возможности:
- Регистрация и авторизация.
- Создание и управление пунктами выдачи заказов.
- Добавление информации о приемке товаров.
- Управление товарами в рамках одной приемки: добавление и удаление (до закрытия приемки).
- Закрытие приемки.
- Получение списка пунктов выдачи заказов и подробной информации о них.
- Docker и Docker Compose
- Go 1.24 или выше (для локальной разработки)
- Клонируйте репозиторий:
git clone https://github.com/nabishec/avito_pvz_service.git
cd avito_pvz_service
- Запустите проект:
docker-compose up -d
- Сервис будет доступен по адресу: http://localhost:8080
- Swagger документация: http://localhost:8080/swagger/
-
В задании была ошибка, которая выражалась в том, что в openapi документации был employee, а в задании client. Поэтому было принято решение везде использовать client.
-
В задании было указано, что prometheus должен быть доступен по порту 9000, endpoint'у /metrics. Поэтому приложение передает свои метрики prometheus по порту 9090 внутри контейнера . А prometheus к пользоват елю по порту 9000. И к метрикам приложения нет доступа с наружи контейнера.
-
Также в файле .proto было enum, которое не используется в модели ПВЗ, и модели ответа grpc сервиса. Поэтому существование enum игнорировалось, и по порту 3000 доступен grpc сервер, который возвращает список пвз, без поля активности подписок.
В ручки добавлены следующие коды ошибок:
- 400 Bad Request - некорректный запрос
- 401 Unauthorized - проблема с аутентификацией
- 403 Forbidden - доступ запрещен (когда роль не модератор и не клиент)
- 500 Internal Server Error - внутренняя ошибка сервера
Формат даты в API: dateonly (YYYY-MM-DD)
Проект использует следующую структуру базы данных:
- users - пользователи системы с ролями (client, moderator)
- pvzs - пункты выдачи заказов
- receptions - приемки товаров в ПВЗ
- products - товары, входящие в приемку
Был создан интеграционный тест
go test ./integration_test/...
А также юнит тесты для бизнес логики.
Для проверки покрытия кода тестами:
go test ./internal/http_server/handlers/... -coverprofile cover.out
go tool cover -func cover.out
(на снимке показан процент покрытия бизнес логики юнит тестами)
- Язык программирования: Go 1.24
- Web-фреймворк: Chi
- База данных: PostgreSQL
- Миграции: Goose
- Валидация: go-playground/validator
- Логгирование: zerolog
- Документация API: Swagger
- Аутентификация: JWT
- Контейнеризация: Docker, Docker Compose