fix(subscription): keep access until last second of the term
- is_subscribed used _days_until() (floor), blocking generation for the whole last day when <24h remained though subscription was still active; now checks absolute expiry timestamp (expires > now) - covers all gated actions (post generation, ideas) via _check_subscription
This commit is contained in:
1 parent
a9e8c2e3ba
commit
57ccc3d70c
2 files changed
+11
-5
No files matched your search
+10
-4
@@ -281,13 +281,19 @@ def deactivate_subscription(user_id: int, db_path: str | None = None) -> None:
|
||||
|
||||
|
||||
def is_subscribed(user_id: int, db_path: str | None = None) -> bool:
|
||||
"""Правда ли подписка активна (срок не истёк)."""
|
||||
"""Правда ли подписка активна (срок не истёк).
|
||||
|
||||
Проверяем по абсолютному UTC-моменту истечения, а не по целым оставшимся
|
||||
дням: доступ действует до последней секунды срока, весь «последний день».
|
||||
"""
|
||||
sub = subscription_row(user_id, db_path)
|
||||
if not sub:
|
||||
if not sub or not sub["is_active"]:
|
||||
return False
|
||||
if not sub["is_active"]:
|
||||
expires = _subscription_expires_at(sub)
|
||||
if expires is None:
|
||||
return False
|
||||
return _days_until(sub) > 0
|
||||
now = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
|
||||
return expires > now
|
||||
|
||||
|
||||
def add_post_samples(user_id: int, posts: list[str], db_path: str | None = None) -> list[str]:
|
||||
|
||||
Reference in new issue
Block a user