Вроде пофиксил всё
This commit is contained in:
@@ -4,6 +4,7 @@ from app.services.db_manager import DatabaseManager
|
|||||||
from sqlalchemy.exc import SQLAlchemyError
|
from sqlalchemy.exc import SQLAlchemyError
|
||||||
from instance.configdb import get_database_manager
|
from instance.configdb import get_database_manager
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
from typing import Optional
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
@@ -15,13 +16,14 @@ router = APIRouter()
|
|||||||
# Модели запросов и ответов
|
# Модели запросов и ответов
|
||||||
class CreateUserRequest(BaseModel):
|
class CreateUserRequest(BaseModel):
|
||||||
telegram_id: str
|
telegram_id: str
|
||||||
referrer_id: str
|
referrer_id: Optional[str] = None
|
||||||
|
|
||||||
class UserResponse(BaseModel):
|
class UserResponse(BaseModel):
|
||||||
id: UUID
|
id: UUID
|
||||||
telegram_id: str
|
telegram_id: str
|
||||||
username: str
|
username: Optional[str]
|
||||||
balance: float
|
balance: float
|
||||||
|
referrer_id: Optional[str]
|
||||||
created_at: str
|
created_at: str
|
||||||
updated_at: str
|
updated_at: str
|
||||||
|
|
||||||
@@ -44,7 +46,7 @@ async def create_user(
|
|||||||
telegram_id=user.telegram_id,
|
telegram_id=user.telegram_id,
|
||||||
username=user.username,
|
username=user.username,
|
||||||
balance=user.balance,
|
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(),
|
created_at=user.created_at.isoformat(),
|
||||||
updated_at=user.updated_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}")
|
logger.info(f"Пользователь найден: ID={user.id}, Username={user.username}")
|
||||||
|
|
||||||
user_response = UserResponse(
|
return UserResponse(
|
||||||
id=user.id,
|
id=user.id,
|
||||||
telegram_id=user.telegram_id,
|
telegram_id=user.telegram_id,
|
||||||
username=user.username,
|
username=user.username,
|
||||||
balance=user.balance,
|
balance=user.balance,
|
||||||
|
referrer_id=user.referrer_id if user.referrer_id is not None else None,
|
||||||
created_at=user.created_at.isoformat(),
|
created_at=user.created_at.isoformat(),
|
||||||
updated_at=user.updated_at.isoformat()
|
updated_at=user.updated_at.isoformat()
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ from dateutil.relativedelta import relativedelta
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import random
|
import random
|
||||||
import string
|
import string
|
||||||
|
from typing import Optional
|
||||||
import logging
|
import logging
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
@@ -26,12 +27,16 @@ class DatabaseManager:
|
|||||||
Получает активные подписки пользователя
|
Получает активные подписки пользователя
|
||||||
"""
|
"""
|
||||||
return await self.postgres_repo.list_active_tickets(user_id)
|
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):
|
||||||
"""
|
"""
|
||||||
Создаёт пользователя.
|
Создаёт пользователя.
|
||||||
"""
|
"""
|
||||||
|
try:
|
||||||
username = self.generate_string(6)
|
username = self.generate_string(6)
|
||||||
return await self.postgres_repo.create_user(telegram_id, username, str)
|
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):
|
async def get_user_by_telegram_id(self, telegram_id: str):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -23,18 +23,19 @@ class User(Base):
|
|||||||
__tablename__ = 'users'
|
__tablename__ = 'users'
|
||||||
|
|
||||||
id = Column(UUID(as_uuid=True), primary_key=True, default=generate_uuid)
|
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)
|
username = Column(String)
|
||||||
balance = Column(Numeric(10, 2), default=0.0)
|
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)
|
created_at = Column(DateTime, default=datetime.utcnow)
|
||||||
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=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")
|
subscriptions = relationship("Subscription", back_populates="user")
|
||||||
transactions = relationship("Transaction", back_populates="user")
|
transactions = relationship("Transaction", back_populates="user")
|
||||||
admins = relationship("Administrators", back_populates="user")
|
admins = relationship("Administrators", back_populates="user")
|
||||||
|
|
||||||
|
|
||||||
"""Подписки"""
|
"""Подписки"""
|
||||||
class Subscription(Base):
|
class Subscription(Base):
|
||||||
__tablename__ = 'subscriptions'
|
__tablename__ = 'subscriptions'
|
||||||
|
|||||||
Reference in New Issue
Block a user