feat: переезд на tortose

This commit is contained in:
Artem Tsyrulnikov
2025-12-11 09:17:31 +03:00
parent 2af23f84fe
commit 0f0de396e1
16 changed files with 437 additions and 611 deletions

View File

@@ -1,31 +1,34 @@
import datetime
import uuid
from enum import StrEnum
from typing import TYPE_CHECKING
import enum
from sqlalchemy import ForeignKey
from sqlalchemy.orm import Mapped, mapped_column, relationship
from src import domain
if TYPE_CHECKING:
from .placement import Placement
from .subscriber import Subscriber
from tortoise import fields
from tortoise.models import Model
class SubscriptionStatus(StrEnum):
class SubscriptionStatus(str, enum.Enum):
ACTIVE = 'active'
UNSUBSCRIBED = 'unsubscribed'
class Subscription(domain.Base):
placement_id: Mapped[uuid.UUID] = mapped_column(ForeignKey('placement.id'), index=True)
subscriber_id: Mapped[uuid.UUID] = mapped_column(ForeignKey('subscriber.id'), index=True)
target_channel_id: Mapped[uuid.UUID] = mapped_column(ForeignKey('target_channel.id'), index=True)
invite_link: Mapped[str] = mapped_column(index=True) # По которой пришёл пользователь
status: Mapped[SubscriptionStatus] = mapped_column(default=SubscriptionStatus.ACTIVE)
unsubscribed_at: Mapped[datetime.datetime | None]
class Subscription(Model):
id = fields.UUIDField(pk=True)
# Relationships
placement: Mapped['Placement'] = relationship(back_populates='subscriptions')
subscriber: Mapped['Subscriber'] = relationship(back_populates='subscriptions')
placement = fields.ForeignKeyField(
'models.Placement', related_name='subscriptions', on_delete=fields.CASCADE, index=True
)
subscriber = fields.ForeignKeyField(
'models.Subscriber', related_name='subscriptions', on_delete=fields.CASCADE, index=True
)
target_channel = fields.ForeignKeyField(
'models.TargetChannel', related_name='subscriptions', on_delete=fields.CASCADE, index=True
)
invite_link = fields.CharField(max_length=512, index=True)
status = fields.CharEnumField(SubscriptionStatus, default=SubscriptionStatus.ACTIVE)
unsubscribed_at = fields.DatetimeField(null=True)
created_at = fields.DatetimeField(auto_now_add=True)
updated_at = fields.DatetimeField(auto_now=True)
deleted_at = fields.DatetimeField(null=True)
class Meta:
table = 'subscription'