src.db.utils.admin
Функкционал для работы с БД. Администратор
1"""Функкционал для работы с БД. Администратор""" 2 3import logging 4 5from sqlalchemy import and_, not_, select, update 6 7from core.metric import async_speed_metric 8from db.database import execute_query 9from db.models import UserActivity, UserData 10from db.utils.redis import CashManager 11 12logger = logging.getLogger() 13 14 15@async_speed_metric 16async def set_admin(user_id): 17 """Устанавливает пользователя администратором. 18 19 Удаляет кэшированные данные пользователя и обновляет его статус в базе данных. 20 21 Args: 22 user_id (int): Идентификатор пользователя, которого необходимо установить администратором. 23 24 Returns: 25 UserData | None: Объект UserData, если обновление прошло успешно, иначе None. 26 """ 27 await CashManager(UserData).delete(user_id) 28 29 query = ( 30 update(UserData) 31 .values(admin=True) 32 .filter_by(telegram_id=user_id) 33 .returning(UserData) 34 ) 35 return (await execute_query(query)).scalar_one_or_none() 36 37 38@async_speed_metric 39async def get_valid_users(my_id): 40 """Получает список всех активных пользователей, кроме указанного. 41 42 Фильтрует пользователей по различным критериям, включая статус активности и настройки. 43 44 Args: 45 my_id (int): Идентификатор пользователя, который будет исключен из списка. 46 47 Returns: 48 list[UserData]: Список объектов UserData, представляющих активных пользователей. 49 """ 50 query = select(UserData).where( 51 and_( 52 not_(UserData.mute), 53 UserData.telegram_id != my_id, 54 UserData.active != UserActivity.freezed, 55 UserData.active != UserActivity.banned, 56 UserData.active != UserActivity.deleted, 57 UserData.stage != 0, 58 ) 59 ) 60 results: list[UserData] = (await execute_query(query)).scalars().all() 61 return results 62 63 64@async_speed_metric 65async def get_all_users(): 66 """Получает список всех пользователей. 67 68 Запрашивает все записи пользователей из базы данных. 69 70 Returns: 71 list[UserData]: Список всех объектов UserData. 72 """ 73 query = select(UserData) 74 results: list[UserData] = (await execute_query(query)).scalars().all() 75 return results 76 77 78@async_speed_metric 79async def get_admins(): 80 """Получает список всех администраторов. 81 82 Фильтрует пользователей по статусу администратора и активности. 83 84 Returns: 85 list[UserData]: Список объектов UserData, представляющих администраторов. 86 """ 87 query = select(UserData).where( 88 and_( 89 UserData.admin, 90 UserData.active != UserActivity.banned, 91 UserData.active != UserActivity.deleted, 92 ) 93 ) 94 95 return (await execute_query(query)).scalars().all()
16@async_speed_metric 17async def set_admin(user_id): 18 """Устанавливает пользователя администратором. 19 20 Удаляет кэшированные данные пользователя и обновляет его статус в базе данных. 21 22 Args: 23 user_id (int): Идентификатор пользователя, которого необходимо установить администратором. 24 25 Returns: 26 UserData | None: Объект UserData, если обновление прошло успешно, иначе None. 27 """ 28 await CashManager(UserData).delete(user_id) 29 30 query = ( 31 update(UserData) 32 .values(admin=True) 33 .filter_by(telegram_id=user_id) 34 .returning(UserData) 35 ) 36 return (await execute_query(query)).scalar_one_or_none()
Устанавливает пользователя администратором.
Удаляет кэшированные данные пользователя и обновляет его статус в базе данных.
Arguments:
- user_id (int): Идентификатор пользователя, которого необходимо установить администратором.
Returns:
UserData | None: Объект UserData, если обновление прошло успешно, иначе None.
39@async_speed_metric 40async def get_valid_users(my_id): 41 """Получает список всех активных пользователей, кроме указанного. 42 43 Фильтрует пользователей по различным критериям, включая статус активности и настройки. 44 45 Args: 46 my_id (int): Идентификатор пользователя, который будет исключен из списка. 47 48 Returns: 49 list[UserData]: Список объектов UserData, представляющих активных пользователей. 50 """ 51 query = select(UserData).where( 52 and_( 53 not_(UserData.mute), 54 UserData.telegram_id != my_id, 55 UserData.active != UserActivity.freezed, 56 UserData.active != UserActivity.banned, 57 UserData.active != UserActivity.deleted, 58 UserData.stage != 0, 59 ) 60 ) 61 results: list[UserData] = (await execute_query(query)).scalars().all() 62 return results
Получает список всех активных пользователей, кроме указанного.
Фильтрует пользователей по различным критериям, включая статус активности и настройки.
Arguments:
- my_id (int): Идентификатор пользователя, который будет исключен из списка.
Returns:
list[UserData]: Список объектов UserData, представляющих активных пользователей.
65@async_speed_metric 66async def get_all_users(): 67 """Получает список всех пользователей. 68 69 Запрашивает все записи пользователей из базы данных. 70 71 Returns: 72 list[UserData]: Список всех объектов UserData. 73 """ 74 query = select(UserData) 75 results: list[UserData] = (await execute_query(query)).scalars().all() 76 return results
Получает список всех пользователей.
Запрашивает все записи пользователей из базы данных.
Returns:
list[UserData]: Список всех объектов UserData.
79@async_speed_metric 80async def get_admins(): 81 """Получает список всех администраторов. 82 83 Фильтрует пользователей по статусу администратора и активности. 84 85 Returns: 86 list[UserData]: Список объектов UserData, представляющих администраторов. 87 """ 88 query = select(UserData).where( 89 and_( 90 UserData.admin, 91 UserData.active != UserActivity.banned, 92 UserData.active != UserActivity.deleted, 93 ) 94 ) 95 96 return (await execute_query(query)).scalars().all()
Получает список всех администраторов.
Фильтрует пользователей по статусу администратора и активности.
Returns:
list[UserData]: Список объектов UserData, представляющих администраторов.