Исправление точности вещественных чисел (Float Precision) при ставках, казино, переводах и вкладах #37

Closed
Dan4ick wants to merge 0 commits from Dan4ick/bot_tg:feature/FenyaBot into main
Member

Этот PR исправляет несколько критических проблем с точностью вычислений, проверками баланса и обработкой ошибок:

  1. Исправление точности вещественных чисел (Float Precision):

    • Из-за хранения балансов в типе данных REAL в PostgreSQL возникала потеря точности при извлечении значений в Python (например, 0.2 превращалось в 0.199999988). Это приводило к сбоям при ставках "впритык", переводах лимитов и открытии депозитов.
    • Все проверки порогов теперь выполняются с использованием round(val, 2) с обеих сторон сравнения.
  2. Корректная логика возврата ошибок для ставок в Web App:

    • Сигнатура функции place_bet обновлена для возврата tuple[bool, str].
    • В /api/bet при неудаче теперь корректно вызывается HTTPException(status_code=400, detail=result). Это устраняет баг в Telegram Mini App, где всегда всплывало уведомление "Ставка принята!", даже если ставка не проходила по балансу.
  3. Информативные сообщения при открытии депозитов:

    • Функция create_deposit теперь возвращает tuple[bool, str]. В случае ошибок пользователю отправляется развернутое сообщение (например, если сумма ниже лимита или на балансе не хватает средств), вместо того чтобы тихо отклонять вклад.
  4. Автоматические тесты:

    • Создан тестовый модуль test_precision.py с использованием моков для БД, проверяющий все критические операции с вещественными числами.
Этот PR исправляет несколько критических проблем с точностью вычислений, проверками баланса и обработкой ошибок: 1. **Исправление точности вещественных чисел (Float Precision):** - Из-за хранения балансов в типе данных `REAL` в PostgreSQL возникала потеря точности при извлечении значений в Python (например, 0.2 превращалось в 0.199999988). Это приводило к сбоям при ставках "впритык", переводах лимитов и открытии депозитов. - Все проверки порогов теперь выполняются с использованием `round(val, 2)` с обеих сторон сравнения. 2. **Корректная логика возврата ошибок для ставок в Web App:** - Сигнатура функции `place_bet` обновлена для возврата `tuple[bool, str]`. - В `/api/bet` при неудаче теперь корректно вызывается `HTTPException(status_code=400, detail=result)`. Это устраняет баг в Telegram Mini App, где всегда всплывало уведомление "Ставка принята!", даже если ставка не проходила по балансу. 3. **Информативные сообщения при открытии депозитов:** - Функция `create_deposit` теперь возвращает `tuple[bool, str]`. В случае ошибок пользователю отправляется развернутое сообщение (например, если сумма ниже лимита или на балансе не хватает средств), вместо того чтобы тихо отклонять вклад. 4. **Автоматические тесты:** - Создан тестовый модуль `test_precision.py` с использованием моков для БД, проверяющий все критические операции с вещественными числами.
Dan4ick added 1 commit 2026-05-20 20:16:17 +00:00
Dan4ick added 1 commit 2026-05-20 20:30:27 +00:00
Dan4ick force-pushed feature/FenyaBot from 0218be79ca to 0bf728eb4b 2026-05-20 20:32:17 +00:00 Compare
Dan4ick force-pushed feature/FenyaBot from 0bf728eb4b to 191aa8ef93 2026-05-20 20:33:40 +00:00 Compare
Dan4ick closed this pull request 2026-05-20 20:33:45 +00:00

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: zovos/bot_tg#37
No description provided.