Сервис для сотрудников ПВЗ, позволяющий:
- Регистрацию и авторизацию пользователей (клиент, модератор, сотрудник ПВЗ)
- Заведение пунктов выдачи заказов (ПВЗ) модератором
- Открытие/закрытие приёмок товаров сотрудником ПВЗ
- Добавление и удаление товаров в рамках приёмки (LIFO)
- Получение списка ПВЗ с полной информацией по приёмкам по дате, с пагинацией
- Go (grpc, sqlx, squirrel)
- gRPC API (protobuf)
- PostgreSQL
pvz-service/
├── cmd/main # точка входа приложения
├── internal/ # логика приложения, репозиторий, сервисы
├── migrations/ # SQL-файлы миграций
├── pkg/pvz_service # gRPC описание (protobuf)
└── integration/ # интеграционные тесты
- Go 1.20+
- PostgreSQL 12+
Создайте .env, указав параметры:
DB_USER=postgres
DB_PASSWORD=secret
DB_HOST=localhost
DB_PORT=5432
DB_NAME=pvz_database
SECRET_KEY_FOR_JWT=<ваш base64-ключ>- Создайте БД:
CREATE DATABASE pvz_database;
- Примените миграции:
psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -f migrations/0001_create_pvzs.sql psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -f migrations/0001_create_receptions.sql psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -f migrations/0001_create_products.sql psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -f migrations/0001_create_users.sql
go run cmd/main/main.goСервер будет слушать порт :8080.
После старта сервис доступен по gRPC на localhost:8080. Ниже примеры вызовов через grpcurl.
-
Регистрация:
grpcurl -plaintext -d '{"login":"<LOGIN>","password":"<PASSWORD>","role":"<ROLE>"}' localhost:8080 pvz_service.PVZService/Register -
Логин:
grpcurl -plaintext -d '{"login":"<LOGIN>","password":"<PASSWORD>"}' localhost:8080 pvz_service.PVZService/Login -
Создать ПВЗ (только модератор):
grpcurl -plaintext -d '{"token":"<TOKEN>","city":"<CITY>"}' localhost:8080 pvz_service.PVZService/CreatePVZ -
Открыть приёмку:
grpcurl -plaintext -d '{"token":"<TOKEN>","id":"<PVZ_ID>"}' localhost:8080 pvz_service.PVZService/OpenReception -
Добавить товар:
grpcurl -plaintext -d '{"token":"<TOKEN>","id":"<PVZ_ID>","type":"<TYPE>"}' localhost:8080 pvz_service.PVZService/AddProduct -
Удалить товар:
grpcurl -plaintext -d '{"token":"<TOKEN>","id":"<PVZ_ID>"}' localhost:8080 pvz_service.PVZService/RemoveProduct -
Закрыть приёмку:
grpcurl -plaintext -d '{"token":"<TOKEN>","id":"<PVZ_ID>"}' localhost:8080 pvz_service.PVZService/CloseReception -
Получить отфильтрованные ПВЗ:
grpcurl -plaintext -d '{"token":"<TOKEN>","start":"2024-04-22T00:00:00Z","finish":"2024-04-23T00:00:00Z","limit":<LIMIT>,"offset":<OFFSET>}' localhost:8080 pvz_service.PVZService/GetFilteredPVZs
go test ./internal/app/repo/repo_test.go
go test ./internal/service/pvz_service/api_test.gogo test ./integration/integration_test.goАвтор: Девришев Турал, 2025