From 160ff7ff9f18b2f06f93087a66b889726ce154b9 Mon Sep 17 00:00:00 2001 From: belousotroll Date: Sun, 30 Nov 2025 19:29:29 +0700 Subject: [PATCH] fix: calculating telegram starts amount --- app/config.py | 3 ++- app/services/payment/stars.py | 9 +-------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/app/config.py b/app/config.py index 14f6bffe..54ba531a 100644 --- a/app/config.py +++ b/app/config.py @@ -1,6 +1,7 @@ import hashlib import hmac import logging +import math import os import re import html @@ -1280,7 +1281,7 @@ class Settings(BaseSettings): return stars * self.get_stars_rate() def rubles_to_stars(self, rubles: float) -> int: - return max(1, int(rubles / self.get_stars_rate())) + return max(1, math.ceil(rubles / self.get_stars_rate())) def get_admin_notifications_chat_id(self) -> Optional[int]: if not self.ADMIN_NOTIFICATIONS_CHAT_ID: diff --git a/app/services/payment/stars.py b/app/services/payment/stars.py index 3f1022d7..108c5af2 100644 --- a/app/services/payment/stars.py +++ b/app/services/payment/stars.py @@ -56,14 +56,7 @@ class TelegramStarsMixin: # Если количество звёзд не задано, вычисляем его из курса. if stars_amount is None: - rate = Decimal(str(settings.get_stars_rate())) - if rate <= 0: - raise ValueError("Stars rate must be positive") - - normalized_stars = (amount_rubles / rate).to_integral_value( - rounding=ROUND_FLOOR - ) - stars_amount = int(normalized_stars) or 1 + stars_amount = settings.rubles_to_stars(float(amount_rubles)) if stars_amount <= 0: raise ValueError("Stars amount must be positive")