Edit on GitHub

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()
logger = <RootLogger root (DEBUG)>
@async_speed_metric
async def set_admin(user_id):
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.

@async_speed_metric
async def get_valid_users(my_id):
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, представляющих активных пользователей.

@async_speed_metric
async def get_all_users():
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.

@async_speed_metric
async def get_admins():
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, представляющих администраторов.