feat(sub): subscription logic (pre release)
This commit is contained in:
33
db/models/subscriptions.py
Normal file
33
db/models/subscriptions.py
Normal file
@@ -0,0 +1,33 @@
|
||||
import datetime
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from sqlalchemy import INTEGER, DateTime, Enum, ForeignKey
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
|
||||
from db.base import Base
|
||||
from schemas.enums import SubscriptionStatus
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from db.models import SubscriptionAddon, User
|
||||
|
||||
|
||||
class Subscription(Base):
|
||||
__tablename__ = "subscriptions"
|
||||
|
||||
id: Mapped[int] = mapped_column(
|
||||
INTEGER, nullable=False, autoincrement=True, unique=True, primary_key=True
|
||||
)
|
||||
user_id: Mapped[int] = mapped_column(ForeignKey("users.id"), nullable=False, unique=True)
|
||||
|
||||
devices: Mapped[int] = mapped_column(INTEGER, nullable=False)
|
||||
status: Mapped[SubscriptionStatus] = mapped_column(
|
||||
Enum(SubscriptionStatus, name="subscriptionstatus"),
|
||||
nullable=False,
|
||||
default=SubscriptionStatus.EXPIRED,
|
||||
)
|
||||
expires_at: Mapped[datetime.datetime] = mapped_column(DateTime(True), nullable=False)
|
||||
|
||||
user: Mapped["User"] = relationship("User", back_populates="subscription", lazy="selectin")
|
||||
addons: Mapped[list["SubscriptionAddon"]] = relationship(
|
||||
"SubscriptionAddon", back_populates="subscription", lazy="selectin"
|
||||
)
|
||||
Reference in New Issue
Block a user