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:
admin committed 2026-10-30 13:52:03 +02:00
1 parent a9e8c2e3ba
commit 57ccc3d70c
2 files changed
+11 -5

No files matched your search

+1 -1
View File
@@ -1 +1 @@
0.1.0+83
0.1.0+84
+10 -4
View File
@@ -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]: