first commit
This commit is contained in:
46
app/services/user_service.py
Normal file
46
app/services/user_service.py
Normal file
@@ -0,0 +1,46 @@
|
||||
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,
|
||||
)
|
||||
Reference in New Issue
Block a user