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")