Перейти к основному содержимому

Описание таблицы в БД

Пример того, как я описываю таблицы PostgreSQL в спецификациях: нейминг-конвеншн, типы, ключи, дефолты, not null и ссылки на глоссарий. Таблица связана со спецификацией «Спецификация + REST API» — коды ошибок и типы операций совпадают с контрактом API.

Loyalty.GPB.pgsql.sch.bonus.t.charge_off_operation

ОписаниеТаблица операций списания / отмены списания бонусных баллов через партнерский API
имятипключnot nulldefaultописание
idbigintPK+generated always as identityИдентификатор операции (суррогатный ключ)
operation_uiduuidUQ+gen_random_uuid()Внешний идентификатор операции — параметр id партнерского API
phone_numbervarchar(11)IDX+Идентификатор клиента, номер телефона в формате 7XXXXXXXXXX
partner_idintFK+Идентификатор партнера в системе Банка, см. глоссарий Partner
operation_typesmallint+Тип операции: 1 — списание, 2 — отмена
amountnumeric(12,2)+Сумма баллов (1 балл = 1 рубль)
statusvarchar(20)IDX+'created'Статус операции: created / sent / success / rejected, см. глоссарий OperationStatus
error_codeintКод отказа ГПБ: 14, см. «Спецификация + REST API», маппинг ответов с ошибками
external_responsejsonbСырой ответ ГПБ API для аудита и разбора спорных операций
is_retryboolean+falseПризнак повторного запроса (механизм retry)
retry_countsmallint+0Количество выполненных повторов
sent_attimestamptzМомент отправки запроса в ГПБ API
created_attimestamptz+now()Момент создания записи
updated_attimestamptz+now()Момент последнего изменения статуса (обновляется триггером)
created_byvarchar(64)+'system'Инициатор: system или логин сотрудника при ручной обработке
commenttextКомментарий оператора поддержки при ручной обработке
loyalty_program_codevarchar(10)'GPB_MVP'Код программы лояльности — поле в планах, при переходе на несколько программ

Индексы и ограничения

  • pk_charge_off_operation — первичный ключ по id.
  • uq_charge_off_operation_uid — уникальность operation_uid: защита от двойного списания при повторных запросах.
  • idx_charge_off_operation_phone — поиск операций клиента по номеру телефона.
  • idx_charge_off_operation_status_sent — частичный индекс where status in ('created','sent') для воркера повторов.
  • fk_charge_off_operation_partner — внешний ключ к t.partner (partner_id).

ERD фрагмента схемы

PlantUML диаграмма

Примечание: описание таблицы синхронизировано с контрактом API — значения error_code и operation_type один в один из спецификации, чтобы разработка и тестирование не гадали, где истина.