diff --git a/app/routes/user_routes.py b/app/routes/user_routes.py index db92cab..cd5ca4f 100644 --- a/app/routes/user_routes.py +++ b/app/routes/user_routes.py @@ -4,6 +4,7 @@ from app.services.db_manager import DatabaseManager from sqlalchemy.exc import SQLAlchemyError from instance.configdb import get_database_manager from pydantic import BaseModel +from typing import Optional from uuid import UUID import logging @@ -15,13 +16,14 @@ router = APIRouter() # Модели запросов и ответов class CreateUserRequest(BaseModel): telegram_id: str - referrer_id: str + referrer_id: Optional[str] = None class UserResponse(BaseModel): id: UUID telegram_id: str - username: str + username: Optional[str] balance: float + referrer_id: Optional[str] created_at: str updated_at: str @@ -44,7 +46,7 @@ async def create_user( telegram_id=user.telegram_id, username=user.username, balance=user.balance, - referrer_id = user.referrer_id, + referrer_id=user.referrer_id if user.referrer_id is not None else None, created_at=user.created_at.isoformat(), updated_at=user.updated_at.isoformat() ) @@ -70,11 +72,12 @@ async def get_user( logger.info(f"Пользователь найден: ID={user.id}, Username={user.username}") - user_response = UserResponse( + return UserResponse( id=user.id, telegram_id=user.telegram_id, username=user.username, balance=user.balance, + referrer_id=user.referrer_id if user.referrer_id is not None else None, created_at=user.created_at.isoformat(), updated_at=user.updated_at.isoformat() ) diff --git a/app/services/db_manager.py b/app/services/db_manager.py index adc3cec..f483f65 100644 --- a/app/services/db_manager.py +++ b/app/services/db_manager.py @@ -9,6 +9,7 @@ from dateutil.relativedelta import relativedelta from datetime import datetime import random import string +from typing import Optional import logging from uuid import UUID @@ -26,12 +27,16 @@ class DatabaseManager: Получает активные подписки пользователя """ return await self.postgres_repo.list_active_tickets(user_id) - async def create_user(self, telegram_id: str, referrer_id: str): + + async def create_user(self, telegram_id: str, referrer_id: Optional[str]= None): """ Создаёт пользователя. """ - username = self.generate_string(6) - return await self.postgres_repo.create_user(telegram_id, username, str) + try: + username = self.generate_string(6) + return await self.postgres_repo.create_user(telegram_id, username, referrer_id) + except Exception as e: + self.logger.error(f"Ошибка при создании пользователя:{e}") async def get_user_by_telegram_id(self, telegram_id: str): """ diff --git a/instance/model.py b/instance/model.py index 05ca613..a4b62d4 100644 --- a/instance/model.py +++ b/instance/model.py @@ -23,18 +23,19 @@ class User(Base): __tablename__ = 'users' id = Column(UUID(as_uuid=True), primary_key=True, default=generate_uuid) - telegram_id = Column(String, unique=True, nullable=False) + telegram_id = Column(String, unique=True, nullable=False) # telegram_id как уникальный идентификатор username = Column(String) balance = Column(Numeric(10, 2), default=0.0) - referrer_id = Column(UUID(as_uuid=True), ForeignKey('users.id'), nullable=True) # Кто пригласил + referrer_id = Column(String, ForeignKey('users.telegram_id'), nullable=True) # Ссылка на telegram_id created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) - referrals = relationship("User", backref="referrer", remote_side=[id]) # Список рефералов + referrals = relationship("User", backref="referrer", remote_side=[telegram_id]) # Ссылка на telegram_id subscriptions = relationship("Subscription", back_populates="user") transactions = relationship("Transaction", back_populates="user") admins = relationship("Administrators", back_populates="user") + """Подписки""" class Subscription(Base): __tablename__ = 'subscriptions'