feat(subscription): improve subscription sync and renewal logic.
This commit is contained in:
@@ -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,
|
||||
]
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user