Изменение эндпоинтов и БД для работы с длинными telegram_id(сменил тип данных с инт на стринг)
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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)):
|
||||
"""
|
||||
Возвращает список подписок пользователя.
|
||||
"""
|
||||
|
||||
@@ -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)
|
||||
):
|
||||
|
||||
@@ -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 для пользователя.
|
||||
|
||||
|
||||
@@ -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.
|
||||
"""
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user