Merge pull request #13267 from AnapatChaiwongse/dev

feat: implement pagination for /admin/users
This commit is contained in:
Tim Jaeryang Baek
2025-04-30 05:04:14 -07:00
committed by GitHub
5 changed files with 115 additions and 45 deletions

View File

@@ -160,11 +160,26 @@ class UsersTable:
return None
def get_users(
self, skip: Optional[int] = None, limit: Optional[int] = None
self,
skip: Optional[int] = None,
limit: Optional[int] = None,
query_key: Optional[int] = None
) -> list[UserModel]:
with get_db() as db:
query = db.query(User).order_by(User.created_at.desc())
if not query_key:
query = db.query(User).order_by(User.created_at.desc())
else:
query = (
db.query(User)
.filter(
or_(
User.name.ilike(f'%{query_key}%'),
User.email.ilike(f'%{query_key}%')
)
)
.order_by(User.created_at.desc())
)
if skip:
query = query.offset(skip)

View File

@@ -35,11 +35,21 @@ router = APIRouter()
@router.get("/", response_model=list[UserModel])
async def get_users(
skip: Optional[int] = None,
page: Optional[int] = None,
limit: Optional[int] = None,
q: Optional[str] = None,
user=Depends(get_admin_user),
):
return Users.get_users(skip, limit)
if q:
skip: Optional[int] = None
if page:
skip = (page - 1) * limit
return Users.get_users(skip=skip, limit=limit, query_key=q)
else:
skip: Optional[int] = None
if page:
skip = (page - 1) * limit
return Users.get_users(skip=skip, limit=limit)
############################