mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-03-01 07:42:30 +00:00
@@ -276,6 +276,7 @@ async def list_users(
|
||||
offset: int = Query(0, ge=0),
|
||||
limit: int = Query(50, ge=1, le=200),
|
||||
search: str | None = Query(None, max_length=255),
|
||||
email: str | None = Query(None, max_length=255),
|
||||
status: UserStatusEnum | None = Query(None),
|
||||
sort_by: SortByEnum = Query(SortByEnum.CREATED_AT),
|
||||
admin: User = Depends(get_current_admin_user),
|
||||
@@ -287,6 +288,7 @@ async def list_users(
|
||||
- **offset**: Pagination offset
|
||||
- **limit**: Number of users per page (max 200)
|
||||
- **search**: Search by telegram_id, username, first_name, last_name
|
||||
- **email**: Search by email
|
||||
- **status**: Filter by user status (active, blocked, deleted)
|
||||
- **sort_by**: Sort field (created_at, balance, traffic, last_activity, total_spent, purchase_count)
|
||||
"""
|
||||
@@ -307,6 +309,7 @@ async def list_users(
|
||||
offset=offset,
|
||||
limit=limit,
|
||||
search=search,
|
||||
email=email,
|
||||
status=user_status,
|
||||
order_by_balance=order_by_balance,
|
||||
order_by_traffic=order_by_traffic,
|
||||
@@ -315,7 +318,7 @@ async def list_users(
|
||||
order_by_purchase_count=order_by_purchase_count,
|
||||
)
|
||||
|
||||
total = await get_users_count(db=db, status=user_status, search=search)
|
||||
total = await get_users_count(db=db, status=user_status, search=search, email=email)
|
||||
|
||||
# Get spending stats for all users
|
||||
user_ids = [u.id for u in users]
|
||||
|
||||
@@ -686,6 +686,7 @@ async def get_users_list(
|
||||
offset: int = 0,
|
||||
limit: int = 50,
|
||||
search: str | None = None,
|
||||
email: str | None = None,
|
||||
status: UserStatus | None = None,
|
||||
order_by_balance: bool = False,
|
||||
order_by_traffic: bool = False,
|
||||
@@ -722,6 +723,9 @@ async def get_users_list(
|
||||
|
||||
query = query.where(or_(*conditions))
|
||||
|
||||
if email:
|
||||
query = query.where(User.email.ilike(f'%{email}%'))
|
||||
|
||||
sort_flags = [
|
||||
order_by_balance,
|
||||
order_by_traffic,
|
||||
@@ -777,7 +781,9 @@ async def get_users_list(
|
||||
return users
|
||||
|
||||
|
||||
async def get_users_count(db: AsyncSession, status: UserStatus | None = None, search: str | None = None) -> int:
|
||||
async def get_users_count(
|
||||
db: AsyncSession, status: UserStatus | None = None, search: str | None = None, email: str | None = None
|
||||
) -> int:
|
||||
query = select(func.count(User.id))
|
||||
|
||||
if status:
|
||||
@@ -803,6 +809,9 @@ async def get_users_count(db: AsyncSession, status: UserStatus | None = None, se
|
||||
|
||||
query = query.where(or_(*conditions))
|
||||
|
||||
if email:
|
||||
query = query.where(User.email.ilike(f'%{email}%'))
|
||||
|
||||
result = await db.execute(query)
|
||||
return result.scalar()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user