feat: доменный нейминг изменен

This commit is contained in:
Artem Tsyrulnikov
2025-11-13 01:18:04 +03:00
parent a48d5e67cb
commit bba37fbb21
51 changed files with 1144 additions and 1154 deletions

View File

@@ -14,6 +14,8 @@ async def handle_subscription(
user_telegram_id: int,
username: str | None,
invite_link: str,
first_name: str | None = None,
last_name: str | None = None,
) -> None:
"""
Обрабатывает подписку пользователя в целевой канал.
@@ -23,37 +25,48 @@ async def handle_subscription(
"""
async with self.database.transaction():
# Находим закуп по пригласительной ссылке
purchase = await self.database.get_purchase_by_invite_link(invite_link)
if not purchase:
log.warning('Purchase not found for invite_link: %s', invite_link)
placement = await self.database.get_placement_by_invite_link(invite_link)
if not placement:
log.warning('Placement not found for invite_link: %s', invite_link)
return
# Создаём или обновляем подписчика
subscriber = domain.Subscriber(
telegram_id=user_telegram_id,
username=username,
first_name=first_name,
last_name=last_name,
)
subscriber = await self.database.upsert_subscriber(subscriber)
# Проверяем, не создана ли уже подписка для этого пользователя
existing_subscription = await self.database.get_subscription_by_user_and_purchase(user_telegram_id, purchase.id)
existing_subscription = await self.database.get_subscription_by_subscriber_and_placement(
subscriber.id, placement.id
)
if existing_subscription:
log.info(
'Subscription already exists for user %s and purchase %s',
user_telegram_id,
purchase.id,
'Subscription already exists for subscriber %s and placement %s',
subscriber.id,
placement.id,
)
return
# Создаём запись о подписке
subscription = domain.Subscription(
purchase_id=purchase.id,
user_telegram_id=user_telegram_id,
username=username,
placement_id=placement.id,
subscriber_id=subscriber.id,
invite_link=invite_link,
)
await self.database.create_subscription(subscription)
# Увеличиваем счётчик подписок у закупа
purchase.subscriptions_count += 1
await self.database.update_purchase(purchase)
placement.subscriptions_count += 1
await self.database.update_placement(placement)
log.info(
'Subscription created: user %s subscribed via purchase %s (invite_link: %s)',
'Subscription created: subscriber %s (telegram_id: %s) subscribed via placement %s (invite_link: %s)',
subscriber.id,
user_telegram_id,
purchase.id,
placement.id,
invite_link,
)