Go to file
2024-11-02 14:41:58 +00:00
.github TD-955: Add implementation (#1) 2024-09-04 14:23:32 +03:00
src EMP-99: Fix duplicate values for limits (#25) 2024-11-02 17:41:24 +03:00
.gitignore TD-955: Add implementation (#1) 2024-09-04 14:23:32 +03:00
pom.xml Update dependency dev.vality.geck:filter to v1.0.2 2024-11-02 14:41:58 +00:00
README.md TD-955: Bump proto (add LimitChange object to proto) (#17) 2024-09-18 14:53:07 +03:00
renovate.json TD-955: Add implementation (#1) 2024-09-04 14:23:32 +03:00

Liminator

Liminator - вспомогательный сервис для подсчета лимитов.


Алгоритм работы

  1. Создание лимита. Необходимо указать наименование лимита и опционально можно указать контекст (провайдер, терминал и т.п.). Если лимит с таким именем уже есть будет выброшена ошибка DuplicateLimitName
  2. Холдирование. Операция заморозки определенного лимита до финализации. Возвращает значения лимитов на момент холдирования. (если что-то пришло чуть позже на долю секунды, то не будет участвовать в подсчете даже если запись в БД уже есть). Могут быть следующие ошибки:
  • LimitNotFound - данная ошибка будет даже если какого-то одного лимита из списка переданных нет в БД
  • DuplicateOperation - данная ошибка будет передана если для связки LimitName+OperationId в БД уже имеется запись в значении HOLD и флаг skipExistedHoldOps в настройках сервиса установлен в false
  • OperationAlreadyInFinalState - данная ошибка будет передана если для связки LimitName+OperationId в БД уже имеется запись в значении COMMIT/ROLLBACK
  • LimitsValuesReadingException - данная ошибка будет передана если при подсчете лимитов произошла какая-то ошибка (это значит, что холдирование уже было выполнено и нужно перезапросить значение лимитов для данной операции; c установленным флагом skipExistedHoldOps можно запустить повторно операцию холдирования, а найденные в БД строки по ключу limitId+operationId будут проигнорированы)
  1. Финализация операции (COMMIT/ROLLBACK). Применение или отмена внесенного значения. Могут быть следующие ошибки:
  • LimitNotFound - данная ошибка будет даже если какого-то одного лимита из списка переданных нет в БД
  • OperationNotFound - данная ошибка будет передана если для связки LimitName+OperationId в БД отсутствует запись в значении HOLD
  1. Получение значений по лимитам. Может быть получено как для определенной операции, так и последнее актуальное значение. Могут быть следующие ошибки:
  • LimitNotFound - если переданный лимит не найден
  • LimitsValuesReadingException - данная ошибка будет передана если при подсчете лимитов произошла какая-то ошибка