Система представляет собой HTTP API со следующей бизнес-логикой:
- регистрация, аутентификация и авторизация пользователей;
- приём номеров заказов от зарегистрированных пользователей;
- учёт и ведение списка переданных номеров заказов зарегистрированного пользователя;
- учёт и ведение накопительного счёта зарегистрированного пользователя;
- проверка принятых номеров заказов через систему расчёта баллов лояльности;
- начисление за каждый подходящий номер заказа положенного вознаграждения на счёт лояльности пользователя.
Ниже представлена абстрактная бизнес-логика взаимодействия пользователя с системой:
- Пользователь регистрируется в системе лояльности «Гофермарт».
- Пользователь совершает покупку в интернет-магазине «Гофермарт».
- Заказ попадает в систему расчёта баллов лояльности.
- Пользователь передаёт номер совершённого заказа в систему лояльности.
- Система связывает номер заказа с пользователем и сверяет номер с системой расчёта баллов лояльности.
- При наличии положительного расчёта баллов лояльности производится начисление баллов лояльности на счёт пользователя.
- Пользователь списывает доступные баллы лояльности для частичной или полной оплаты последующих заказов в интернет-магазине «Гофермарт».
Система расчёта баллов лояльности является внешним сервисом в доверенном контуре. Он работает по принципу чёрного ящика и недоступен для инспекции внешними клиентами. Система рассчитывает положенные баллы лояльности за совершённый заказ по сложным алгоритмам, которые могут меняться в любой момент времени.
Внешнему потребителю доступна только информация о количестве положенных за конкретный заказ баллов лояльности. Причины наличия или отсутствия начислений внешнему потребителю неизвестны.
Накопительная система лояльности «Гофермарт» предоставляет следующие HTTP-хендлеры:
POST /api/user/register
— регистрация пользователя;POST /api/user/login
— аутентификация пользователя;POST /api/user/orders
— загрузка пользователем номера заказа для расчёта;GET /api/user/orders
— получение списка загруженных пользователем номеров заказов, статусов их обработки и информации о начислениях;GET /api/user/balance
— получение текущего баланса счёта баллов лояльности пользователя;POST /api/user/balance/withdraw
— запрос на списание баллов с накопительного счёта в счёт оплаты нового заказа;GET /api/user/balance/withdrawals
— получение информации о выводе средств с накопительного счёта пользователем.
Конфигурирование с помощью флагов командной строки наравне с уже имеющимися переменными окружения:
- флаг
-a
отвечает за адрес и порт запуска сервиса (переменнаяRUN_ADDRESS
); - флаг
-d
отвечает за адрес подключения к базе данных (переменнаяDATABASE_URI
); - флаг
-r
отвечает за адрес системы расчёта начислений (переменнаяACCRUAL_SYSTEM_ADDRESS
).