Изменение эндпоинтов и БД для работы с длинными telegram_id(сменил тип данных с инт на стринг)

This commit is contained in:
Disledg
2025-01-18 15:48:02 +03:00
parent 1aabe8f88e
commit 6d6b8832cf
6 changed files with 23 additions and 19 deletions

View File

@@ -8,7 +8,7 @@ from app.services.db_manager import DatabaseManager
router = APIRouter()
class CreatePaymentRequest(BaseModel):
telegram_id: int
telegram_id: str
amount: float
class PaymentResponse(BaseModel):

View File

@@ -14,7 +14,7 @@ router = APIRouter()
class BuySubscriptionRequest(BaseModel):
telegram_id: int
telegram_id: str
plan_id: str
class SubscriptionResponse(BaseModel):
@@ -126,7 +126,7 @@ async def get_subscriptions(user_id: UUID, database_manager: DatabaseManager = D
raise e
@router.get("/uri", response_model=dict)
async def get_uri(telegram_id: int, database_manager: DatabaseManager = Depends(get_database_manager)):
async def get_uri(telegram_id: str, database_manager: DatabaseManager = Depends(get_database_manager)):
"""
Возвращает список подписок пользователя.
"""

View File

@@ -14,11 +14,12 @@ router = APIRouter()
# Модели запросов и ответов
class CreateUserRequest(BaseModel):
telegram_id: int
telegram_id: str
referrer_id: str
class UserResponse(BaseModel):
id: UUID
telegram_id: int
telegram_id: str
username: str
balance: float
created_at: str
@@ -34,7 +35,7 @@ async def create_user(
Создание пользователя через Telegram ID.
"""
try:
user = await db_manager.create_user(request.telegram_id)
user = await db_manager.create_user(request.telegram_id,request.referrer_id)
if user == "ERROR":
raise HTTPException(status_code=500, detail="Failed to create user")
@@ -43,6 +44,7 @@ async def create_user(
telegram_id=user.telegram_id,
username=user.username,
balance=user.balance,
referrer_id = user.referrer_id,
created_at=user.created_at.isoformat(),
updated_at=user.updated_at.isoformat()
)
@@ -53,7 +55,7 @@ async def create_user(
@router.get("/user/{telegram_id}", response_model=UserResponse, summary="Получить информацию о пользователе")
async def get_user(
telegram_id: int,
telegram_id: str,
db_manager: DatabaseManager = Depends(get_database_manager)
):
"""
@@ -95,7 +97,7 @@ async def get_user(
@router.post("/user/{telegram_id}/balance/{amount}", summary="Обновить баланс")
async def update_balance(
telegram_id: int,
telegram_id: str,
amount: float,
db_manager: DatabaseManager = Depends(get_database_manager)
):

View File

@@ -26,14 +26,14 @@ class DatabaseManager:
Получает активные подписки пользователя
"""
return await self.postgres_repo.list_active_tickets(user_id)
async def create_user(self, telegram_id: int):
async def create_user(self, telegram_id: str, referrer_id: str):
"""
Создаёт пользователя.
"""
username = self.generate_string(6)
return await self.postgres_repo.create_user(telegram_id, username)
return await self.postgres_repo.create_user(telegram_id, username, str)
async def get_user_by_telegram_id(self, telegram_id: int):
async def get_user_by_telegram_id(self, telegram_id: str):
"""
Возвращает пользователя по Telegram ID.
"""
@@ -56,7 +56,7 @@ class DatabaseManager:
"""
return await self.postgres_repo.get_last_transactions(user_id, limit)
async def update_balance(self, telegram_id: int, amount: float):
async def update_balance(self, telegram_id: str, amount: float):
"""
Обновляет баланс пользователя и добавляет транзакцию.
"""
@@ -76,7 +76,7 @@ class DatabaseManager:
return "OK"
async def get_active_subscription(self, telegram_id: int):
async def get_active_subscription(self, telegram_id: str):
"""
Проверяет наличие активной подписки.
"""
@@ -170,7 +170,7 @@ class DatabaseManager:
return new_subscription, server
async def generate_uri(self, telegram_id: int):
async def generate_uri(self, telegram_id: str):
"""
Генерация URI для пользователя.

View File

@@ -12,13 +12,13 @@ class PostgresRepository:
self.session_generator = session_generator
self.logger = logger
async def create_user(self, telegram_id: int, username: str):
async def create_user(self, telegram_id: str, username: str, referrer_id: str):
"""
Создаёт нового пользователя в PostgreSQL.
"""
async for session in self.session_generator():
try:
new_user = User(telegram_id=telegram_id, username=username)
new_user = User(telegram_id=telegram_id, username=username, referrer_id=referrer_id)
session.add(new_user)
await session.commit()
return new_user
@@ -27,7 +27,7 @@ class PostgresRepository:
await session.rollback()
return None
async def get_active_subscription(self, telegram_id: int):
async def get_active_subscription(self, telegram_id: str):
"""
Проверяет наличие активной подписки у пользователя.
"""
@@ -45,7 +45,7 @@ class PostgresRepository:
self.logger.error(f"Ошибка проверки активной подписки для пользователя {telegram_id}: {e}")
return None
async def get_user_by_telegram_id(self, telegram_id: int):
async def get_user_by_telegram_id(self, telegram_id: str):
"""
Возвращает пользователя по Telegram ID.
"""

View File

@@ -23,12 +23,14 @@ class User(Base):
__tablename__ = 'users'
id = Column(UUID(as_uuid=True), primary_key=True, default=generate_uuid)
telegram_id = Column(Integer, unique=True, nullable=False)
telegram_id = Column(String, unique=True, nullable=False)
username = Column(String)
balance = Column(Numeric(10, 2), default=0.0)
referrer_id = Column(String, ForeignKey('users.id'), nullable=True) # Кто пригласил
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]) # Список рефералов
subscriptions = relationship("Subscription", back_populates="user")
transactions = relationship("Transaction", back_populates="user")
admins = relationship("Administrators", back_populates="user")