liminator/README.md
Baikov Dmitrii 20314fd894
Some checks failed
Deploy Docker Image / build-and-deploy (push) Has been cancelled
TD-955: Bump proto (add LimitChange object to proto) (#17)
2024-09-18 14:53:07 +03:00

36 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Liminator
**Liminator** - вспомогательный сервис для подсчета лимитов.
***
### Алгоритм работы
1. **Создание лимита**. Необходимо указать наименование лимита и опционально можно указать
контекст (провайдер, терминал и т.п.). Если лимит с таким именем уже есть будет
выброшена ошибка _DuplicateLimitName_
2. **Холдирование**. Операция заморозки определенного лимита до финализации. Возвращает значения лимитов на
момент холдирования. (если что-то пришло чуть позже на долю секунды, то не будет участвовать в
подсчете даже если запись в БД уже есть). Могут быть следующие ошибки:
- _LimitNotFound_ - данная ошибка будет даже если какого-то одного лимита из списка
переданных нет в БД
- _DuplicateOperation_ - данная ошибка будет передана если для связки LimitName+OperationId в
БД уже имеется запись в значении HOLD и флаг skipExistedHoldOps в настройках сервиса установлен в false
- _OperationAlreadyInFinalState_ - данная ошибка будет передана если для связки LimitName+OperationId в
БД уже имеется запись в значении COMMIT/ROLLBACK
- _LimitsValuesReadingException_ - данная ошибка будет передана если при подсчете лимитов произошла
какая-то ошибка (это значит, что холдирование уже было выполнено и нужно перезапросить значение
лимитов для данной операции; c установленным флагом skipExistedHoldOps можно запустить повторно
операцию холдирования, а найденные в БД строки по ключу limitId+operationId будут проигнорированы)
3. **Финализация операции (COMMIT/ROLLBACK)**. Применение или отмена внесенного значения. Могут быть
следующие ошибки:
- _LimitNotFound_ - данная ошибка будет даже если какого-то одного лимита из списка
переданных нет в БД
- _OperationNotFound_ - данная ошибка будет передана если для связки LimitName+OperationId в
БД отсутствует запись в значении HOLD
4. **Получение значений по лимитам.** Может быть получено как для определенной операции, так и
последнее актуальное значение. Могут быть следующие ошибки:
- _LimitNotFound_ - если переданный лимит не найден
- _LimitsValuesReadingException_ - данная ошибка будет передана если при подсчете лимитов произошла
какая-то ошибка