hotspot / App /Plans /Model.py
Mbonea's picture
timezone comparison
dfa6f47
raw
history blame
1.91 kB
from tortoise import fields
from tortoise.models import Model
from datetime import datetime, timedelta
class Plan(Model):
id = fields.UUIDField(pk=True)
name = fields.CharField(
max_length=100, unique=True, description="Name of the subscription plan"
)
amount = fields.DecimalField(
max_digits=10, decimal_places=2, description="Cost of the plan"
)
duration = fields.IntField(description="Duration of the subscription in hours")
download_speed = fields.FloatField(description="Download speed in Mbps")
upload_speed = fields.FloatField(description="Upload speed in Mbps")
expire_date = fields.DatetimeField(
default=None, null=True, description="Expiration date of the plan"
)
is_promo = fields.BooleanField(
default=False, description="Indicates if the plan is a promotional plan"
)
promo_duration_days = fields.IntField(
default=None, null=True, description="Number of days the promotion is valid"
)
is_valid = fields.BooleanField(
default=True, description="Indicates if the plan is valid"
)
class Meta:
table = "plans"
async def set_expiration(self):
"""Set the expiration date based on the promo duration if applicable."""
if self.is_promo and self.promo_duration_days:
self.expire_date = datetime.now() + timedelta(days=self.promo_duration_days)
elif self.duration:
self.expire_date = datetime.now() + timedelta(
days=self.duration // 24
) # Convert hours to days
await self.save()
async def is_promo_valid(self) -> bool:
"""Check if the promotional plan is still valid."""
if self.is_promo and self.expire_date:
return datetime.now() < self.expire_date.replace(tzinfo=None)
self.is_valid = False
await self.save()
return False