feat: handle unsubscribe
This commit is contained in:
@@ -11,6 +11,7 @@ __all__ = (
|
||||
'TargetChannelStatus',
|
||||
'CreativeStatus',
|
||||
'PlacementStatus',
|
||||
'SubscriptionStatus',
|
||||
'InviteLinkType',
|
||||
'PostViewsAvailability',
|
||||
'LoginToken',
|
||||
@@ -49,6 +50,6 @@ from .login_token import LoginToken
|
||||
from .placement import InviteLinkType, Placement, PlacementStatus, PostViewsAvailability
|
||||
from .placement_views_history import PlacementViewsHistory
|
||||
from .subscriber import Subscriber
|
||||
from .subscription import Subscription
|
||||
from .subscription import Subscription, SubscriptionStatus
|
||||
from .target_channel import TargetChannel, TargetChannelStatus
|
||||
from .user import User
|
||||
|
||||
@@ -8,7 +8,6 @@ from sqlalchemy.types import DateTime
|
||||
|
||||
|
||||
def _camel_to_snake(name: str) -> str:
|
||||
"""Convert CamelCase to snake_case."""
|
||||
name = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
|
||||
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', name).lower()
|
||||
|
||||
|
||||
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user