feat: handle unsubscribe

This commit is contained in:
Artem Tsyrulnikov
2025-12-01 10:30:31 +03:00
parent c32635839a
commit ca3805eec3
14 changed files with 447 additions and 164 deletions

View File

@@ -1,4 +1,6 @@
import datetime
import uuid
from enum import StrEnum
from typing import TYPE_CHECKING
from sqlalchemy import ForeignKey
@@ -11,10 +13,18 @@ if TYPE_CHECKING:
from .subscriber import Subscriber
class SubscriptionStatus(StrEnum):
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]
# Relationships
placement: Mapped['Placement'] = relationship(back_populates='subscriptions')