Files
vibecode-malenia/app/services/user_service.py
2026-04-04 21:30:35 +07:00

47 lines
1.3 KiB
Python

from app.models.user import User
from app.repositories.protocols import IUserRepository
from app.services.referral_service import ReferralService
class UserService:
def __init__(
self,
users: IUserRepository,
referrals: ReferralService,
) -> None:
self._users = users
self._referrals = referrals
async def ensure_user(
self,
*,
telegram_id: int,
username: str | None,
first_name: str | None,
start_payload: str | None,
) -> User:
referrer_internal_id = await self._referrals.resolve_referrer_id(
start_payload,
invitee_telegram_id=telegram_id,
)
existing = await self._users.get_by_telegram_id(telegram_id)
if existing is not None:
await self._users.update_profile(
existing,
username=username,
first_name=first_name,
)
if referrer_internal_id is not None:
await self._users.set_referrer_if_unset(
existing,
referrer_internal_id,
)
return existing
return await self._users.create(
telegram_id=telegram_id,
username=username,
first_name=first_name,
referrer_id=referrer_internal_id,
)