feat(subscription): improve subscription sync and renewal logic.

This commit is contained in:
2026-06-17 18:10:56 +07:00
parent 7ab0e71108
commit 245741b182
8 changed files with 88 additions and 32 deletions

View File

@@ -8,6 +8,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
from bot.texts import NO_SUBSCRIPTION, NOTHING_PLACEHOLDER, SUBSCRIPTION_INFORMATION
from config import settings
from db.models import Subscription
from db.models.users import User
from misc import utils
from repositories import UserRepository
@@ -122,7 +123,7 @@ class UserService:
session,
user.id,
end_date=rw_user.expire_at + duration,
autorenew=False,
autorenew=db_subscription.autorenew,
status=SubscriptionStatus.ACTIVE,
devices=int(subscription.devices),
whitelists=subscription.whitelists,
@@ -179,7 +180,7 @@ class UserService:
session,
user.id,
end_date=expire,
autorenew=False,
autorenew=db_subscription.autorenew,
status=SubscriptionStatus.ACTIVE,
devices=int(subscription.devices),
whitelists=subscription.whitelists,
@@ -239,3 +240,14 @@ class UserService:
logger.exception("caught an exception while launching promo, skipping user...")
return sent
def validate_db_subscription(self, subscription: Subscription, rw_user: rw.RWUserInfo):
return all(
[
(rw_user.status != "ACTIVE" and subscription.status == SubscriptionStatus.EXPIRED)
or (
rw_user.status == "ACTIVE" and subscription.status == SubscriptionStatus.ACTIVE
),
rw_user.expire_at == subscription.end_date,
]
)