Сущности системы#
Описание основных сущностей API Sagi, их полей и назначения.
Order (Заказ)#
Основная сущность транзакции в системе, содержащая всю информацию о покупке, начисленных/списанных бонусах и статусе.
Основные поля:
id(int64) - Уникальный идентификатор заказаorder_number(int64) - Номер заказа для отображения клиентуtype(string) - Тип заказа («direct», «qr», «online», «auto»)sender(OrderSender) - Информация о клиенте, совершившем заказrecipient(RecipientBranch) - Информация о филиале, принявшем заказcreated_at(int64) - Время создания заказа (timestamp)paid_at(int64) - Время оплаты заказа (timestamp)updated_at(int64) - Время последнего обновления (timestamp)status(string) - Статус заказа («CREATED», «COMPLETED», «DECLINED»)
Финансовые поля:
initial_order_total_amount(float64) - Изначальная сумма заказаorder_total_amount(float64) - Итоговая сумма заказаorder_cashback_amount(float64) - Сумма начисленного кешбекаpaid_from_card(float64) - Оплачено картойpaid_from_balance(float64) - Оплачено из общего балансаpaid_from_private_balance(float64) - Оплачено из приватного баланса (бонусы филиала)paid_from_cash(float64) - Оплачено наличными
Дополнительные поля:
comment(string) - Комментарий к заказуpayment_method(string) - Способ оплаты («cash», «card», «online», «mixed»)award(OrderAwardItem) - Информация о выданной наградеprivate_order(bool) - Является ли заказ приватным (в рамках филиала)refunds([]OrderRefund) - Массив возвратов по заказуerror(OrderError) - Информация об ошибке (если статус DECLINED)
UserAward (Награда пользователя)#
Сущность, представляющая информацию о программе наград и накопленных штампах клиента.
Основные поля:
id(ObjectID) - Уникальный идентификатор записи наградыtitle(string) - Название награды (например, «Бесплатный кофе»)description(string) - Описание условий получения наградыstamp_count(int) - Требуемое количество штампов для получения наградыreceived_stamp_count(int) - Текущее накопленное количество штампов
Временные поля:
created_at(int64) - Время создания записи (timestamp)activated_at(int64) - Время активации программы наград (timestamp)expired_at(int64) - Время истечения программы наград (timestamp)updated_at(int64) - Время последнего обновления (timestamp)
Связанные сущности:
branch(RecipientBranch) - Филиал, в котором действует программа наградrecipient(OrderSender) - Клиент, участвующий в программе
Статистика:
total(int) - Количество раз, когда клиент получал эту наградуis_active(bool) - Активна ли программа наград
User (Пользователь)#
Сущность клиента системы с персональной информацией и связями с филиалами.
Персональные данные:
id(int64) - Уникальный идентификатор пользователяphone(string) - Номер телефона (основной идентификатор)first_name(string) - Имяlast_name(string) - Фамилияavatar(string) - URL аватара пользователяbirthday(time.Time) - Дата рожденияbirthday_json(string) - Дата рождения в формате DD-MM-YYYY
Статус и безопасность:
is_blocked(bool) - Заблокирован ли пользовательblocked_reason(string) - Причина блокировкиcreated_at(int64) - Время регистрации (timestamp)updated_at(int64) - Время последнего обновления (timestamp)
Связи с филиалами:
private_branches([]PrivateBranch) - Массив филиалов, в которых клиент участвует в программе лояльности
PrivateBranch (Частный филиал)#
Сущность, представляющая отношения клиента с конкретным филиалом, включая баланс, ограничения и настройки.
Идентификаторы:
branch_id(int64) - Уникальный ID филиалаgroup_id(int64) - ID группы филиалов (одинаковый для всех филиалов бизнеса)
Баланс и лимиты:
balance(float64) - Текущий баланс бонусов в этом филиалеdaily_tx_count(int64) - Количество транзакций сегодняdaily_tx_limit(int64) - Дневной лимит транзакцийspend_amount(float64) - Общая сумма покупок в филиале
Проценты и бонусы:
cash_back_percent(float64) - Текущий процент кешбекаincreased_cashback_percent(float64) - Повышенный процент кешбекаusage_bonus_percentage(float64) - Процент использования бонусовbirthday_bonus(PrivateBranchBirthdayBonus) - Настройки birthday bonus
Временные метки:
expired_at(int64) - Время истечения отношений с филиаломupdated_at(int64) - Время последнего обновленияlast_uploaded_notification(int64) - Время последнего уведомленияfirst_transaction_date_after_notification(int64) - Первая транзакция после уведомления
Статус:
is_client(bool) - Является ли активным клиентом филиалаcome_from(BonusComeFrom) - Информация о том, откуда пришел клиент
Дополнительные поля:
certificates([]UserCertificate) - Сертификаты клиента в филиалеdelay_bonuses([]DelayBonus) - Отложенные бонусыtags(Tags) - Теги клиента в филиалеwallet(PrivateBranchWallet) - Кошелек клиента
Legacy поля (устаревшие):
certificate_balance(int) - Баланс сертификатов (будет удален)certificate_balance_expiration(int64) - Истечение баланса сертификатовcertificate_id(int64) - ID сертификата
RecipientBranch (Филиал-получатель)#
Информация о филиале, используемая в заказах и других операциях.
Основные поля:
id(int64) - Уникальный идентификатор филиалаname(string) - Название филиалаaddress(string) - Адрес филиалаphone(string) - Телефон филиалаgroup_id(int64) - ID группы филиалов
OrderSender (Отправитель заказа)#
Информация о клиенте в контексте заказа.
Поля:
id(int64) - ID пользователяfirst_name(string) - Имяlast_name(string) - Фамилияphone(string) - Телефонavatar(string) - Аватар
Использование сущностей#
В API ответах#
Эндпоинты возвращают полные объекты сущностей или их части в зависимости от назначения:
GET /api/v1/orders/{order_id} → полный объект
OrderGET /api/v1/branches/{branch_id}/customers/{user_id}/award → объект
UserAwardGET /api/v1/promoters/find → объект
UserGET /api/v1/branches/{branch_id}/customers/{user_id}/private-branch → объект
PrivateBranch
В бизнес-логике#
Сущности связаны между собой:
Orderсодержит ссылки наOrderSenderиRecipientBranchUserсодержит массивPrivateBranchдля каждого филиалаUserAwardсвязана с конкретнымRecipientBranchPrivateBranchсодержит баланс и историю взаимодействий клиента с филиалом
★ Insight ─────────────────────────────────────
Структура сущностей отражает реальную бизнес-модель системы лояльности, где клиенты могут участвовать в программах разных филиалов одновременно, накапливать отдельные балансы и получать персонализированные условия кешбека в каждом филиале.
─────────────────────────────────────────────────