""" Wrappers for user management in web interface """ from datetime import datetime from sqlalchemy.ext.asyncio import AsyncSession from shared.database.models import User from shared.config import settings import logging logger = logging.getLogger(__name__) async def add_user_web(user_id: int, db: AsyncSession) -> dict: """ Add user (for web interface) Args: user_id: User ID db: Database session Returns: Dictionary with operation result """ try: # Check existence existing_user = await db.get(User, user_id) if existing_user: return { "success": False, "message": f"Пользователь {user_id} уже существует" } # Create new user user = User( user_id=user_id, is_admin=False, is_blocked=False ) db.add(user) await db.commit() logger.info(f"User {user_id} added via web interface") return { "success": True, "message": f"Пользователь {user_id} успешно добавлен" } except Exception as e: logger.error(f"Error adding user: {e}") await db.rollback() return { "success": False, "message": f"Ошибка при добавлении пользователя: {str(e)}" } async def remove_user_web(user_id: int, db: AsyncSession) -> dict: """ Remove user (for web interface) Args: user_id: User ID db: Database session Returns: Dictionary with operation result """ try: user = await db.get(User, user_id) if not user: return { "success": False, "message": f"Пользователь {user_id} не найден" } # Cannot delete Owner if user_id == settings.OWNER_ID: return { "success": False, "message": "Нельзя удалить Owner" } await db.delete(user) await db.commit() logger.info(f"User {user_id} removed via web interface") return { "success": True, "message": f"Пользователь {user_id} успешно удален" } except Exception as e: logger.error(f"Error removing user: {e}") await db.rollback() return { "success": False, "message": f"Ошибка при удалении пользователя: {str(e)}" } async def block_user_web(user_id: int, db: AsyncSession) -> dict: """ Block user (for web interface) Args: user_id: User ID db: Database session Returns: Dictionary with operation result """ try: user = await db.get(User, user_id) if not user: return { "success": False, "message": f"Пользователь {user_id} не найден" } # Cannot block Owner if user_id == settings.OWNER_ID: return { "success": False, "message": "Нельзя заблокировать Owner" } user.is_blocked = True user.updated_at = datetime.utcnow() await db.commit() logger.info(f"User {user_id} blocked via web interface") return { "success": True, "message": f"Пользователь {user_id} успешно заблокирован" } except Exception as e: logger.error(f"Error blocking user: {e}") await db.rollback() return { "success": False, "message": f"Ошибка при блокировке пользователя: {str(e)}" } async def unblock_user_web(user_id: int, db: AsyncSession) -> dict: """ Unblock user (for web interface) Args: user_id: User ID db: Database session Returns: Dictionary with operation result """ try: user = await db.get(User, user_id) if not user: return { "success": False, "message": f"Пользователь {user_id} не найден" } user.is_blocked = False user.updated_at = datetime.utcnow() await db.commit() logger.info(f"User {user_id} unblocked via web interface") return { "success": True, "message": f"Пользователь {user_id} успешно разблокирован" } except Exception as e: logger.error(f"Error unblocking user: {e}") await db.rollback() return { "success": False, "message": f"Ошибка при разблокировке пользователя: {str(e)}" } async def add_admin_web(user_id: int, db: AsyncSession) -> dict: """ Add administrator (for web interface, Owner only) Args: user_id: User ID db: Database session Returns: Dictionary with operation result """ try: user = await db.get(User, user_id) if not user: # Create user if doesn't exist user = User(user_id=user_id, is_admin=True, is_blocked=False) db.add(user) else: user.is_admin = True user.updated_at = datetime.utcnow() await db.commit() logger.info(f"User {user_id} assigned as administrator via web interface") return { "success": True, "message": f"Пользователь {user_id} успешно назначен администратором" } except Exception as e: logger.error(f"Error assigning administrator: {e}") await db.rollback() return { "success": False, "message": f"Ошибка при назначении администратора: {str(e)}" } async def remove_admin_web(user_id: int, db: AsyncSession) -> dict: """ Remove administrator (for web interface, Owner only) Args: user_id: User ID db: Database session Returns: Dictionary with operation result """ try: # Cannot remove privileges from Owner if user_id == settings.OWNER_ID: return { "success": False, "message": "Нельзя снять права администратора у Owner" } user = await db.get(User, user_id) if not user or not user.is_admin: return { "success": False, "message": f"Пользователь {user_id} не является администратором" } user.is_admin = False user.updated_at = datetime.utcnow() await db.commit() logger.info(f"Administrator privileges removed from user {user_id} via web interface") return { "success": True, "message": f"Права администратора успешно сняты у пользователя {user_id}" } except Exception as e: logger.error(f"Error removing administrator privileges: {e}") await db.rollback() return { "success": False, "message": f"Ошибка при снятии прав администратора: {str(e)}" }