Вроде пофиксил всё

This commit is contained in:
Disledg
2025-01-18 17:33:44 +03:00
parent 0392eee6e1
commit 54f04cc355
3 changed files with 19 additions and 10 deletions

View File

@@ -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()
) )

View File

@@ -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):
""" """
Создаёт пользователя. Создаёт пользователя.
""" """
username = self.generate_string(6) try:
return await self.postgres_repo.create_user(telegram_id, username, str) 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): async def get_user_by_telegram_id(self, telegram_id: str):
""" """

View File

@@ -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'