temp
This commit is contained in:
@@ -3,6 +3,7 @@ Use cases для работы с пользователями
|
||||
"""
|
||||
from uuid import UUID
|
||||
from typing import Optional
|
||||
from datetime import datetime, timedelta
|
||||
from src.domain.entities.user import User, UserRole
|
||||
from src.domain.repositories.user_repository import IUserRepository
|
||||
from src.shared.exceptions import NotFoundError, ValidationError
|
||||
@@ -52,4 +53,27 @@ class UserUseCases:
|
||||
async def list_users(self, skip: int = 0, limit: int = 100) -> list[User]:
|
||||
"""Получить список пользователей"""
|
||||
return await self.user_repository.list_all(skip=skip, limit=limit)
|
||||
|
||||
async def increment_questions_used(self, telegram_id: str) -> User:
|
||||
"""Увеличить счетчик использованных вопросов"""
|
||||
user = await self.user_repository.get_by_telegram_id(telegram_id)
|
||||
if not user:
|
||||
raise NotFoundError(f"Пользователь с telegram_id {telegram_id} не найден")
|
||||
|
||||
user.questions_used += 1
|
||||
return await self.user_repository.update(user)
|
||||
|
||||
async def activate_premium(self, telegram_id: str, days: int = 30) -> User:
|
||||
"""Активировать premium статус"""
|
||||
user = await self.user_repository.get_by_telegram_id(telegram_id)
|
||||
if not user:
|
||||
raise NotFoundError(f"Пользователь с telegram_id {telegram_id} не найден")
|
||||
|
||||
user.is_premium = True
|
||||
if user.premium_until and user.premium_until > datetime.utcnow():
|
||||
user.premium_until = user.premium_until + timedelta(days=days)
|
||||
else:
|
||||
user.premium_until = datetime.utcnow() + timedelta(days=days)
|
||||
|
||||
return await self.user_repository.update(user)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user