Files
tripwithbonus/backend/api/utils/permissionChecker.py

50 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.utils.timezone import now
from datetime import timedelta
from django.core.exceptions import ObjectDoesNotExist
from sitemanagement.models import RoutePromotionLog, Pricing, Transactions
from api.models import UserProfile
def check_monthly_limit(user, route, action_type):
try:
# получаем профиль пользователя и его тарифный план
user_profile = UserProfile.objects.get(user=user)
pricing_plan = Pricing.objects.get(plan=user_profile.account_type)
# получаем последнюю успешную транзакцию пользователя
last_transaction = Transactions.objects.filter(
user=user,
plan=pricing_plan,
status='success' # предполагаем, что успешные транзакции имеют статус 'success'
).order_by('-created_at').first()
if not last_transaction:
return False
# определяем период действия подписки
subscription_start = last_transaction.created_at
subscription_period = timedelta(hours=pricing_plan.duration_hours)
subscription_end = subscription_start + subscription_period
# проверяем, не истекла ли подписка
if now() > subscription_end:
return False
# определяем лимит в зависимости от типа действия и тарифного плана
if action_type == 'highlight':
action_limit = pricing_plan.highlight_limit
else: # rising
action_limit = pricing_plan.rising_limit
# проверяем количество действий за текущий период подписки
actions_count = RoutePromotionLog.objects.filter(
user=user,
route=route,
action_type=action_type,
created_at__gte=subscription_start,
created_at__lte=subscription_end
).count()
return actions_count < action_limit
except ObjectDoesNotExist:
# если профиль или тарифный план не найден, запрещаем действие
return False