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