|
1 | 1 | from typing import Optional |
2 | 2 | from fastapi import APIRouter, Query |
3 | | -from sqlmodel import or_, select |
| 3 | +from sqlmodel import exists, or_, select |
4 | 4 | from apps.system.models.system_model import UserWsModel, WorkspaceBase, WorkspaceEditor, WorkspaceModel |
5 | 5 | from apps.system.models.user import UserModel |
6 | | -from apps.system.schemas.system_schema import UserWsBase, UserWsDTO, WorkspaceUser |
| 6 | +from apps.system.schemas.system_schema import UserWsBase, UserWsDTO, UserWsOption, WorkspaceUser |
7 | 7 | from common.core.deps import CurrentUser, SessionDep, Trans |
8 | 8 | from common.core.pagination import Paginator |
9 | 9 | from common.core.schemas import PaginatedResponse, PaginationParams |
10 | 10 | from common.utils.time import get_timestamp |
11 | 11 |
|
12 | 12 | router = APIRouter(tags=["system/workspace"], prefix="/system/workspace") |
13 | 13 |
|
| 14 | +@router.get("/uws/option/pager/{pageNum}/{pageSize}", response_model=PaginatedResponse[UserWsOption]) |
| 15 | +async def option_pager( |
| 16 | + session: SessionDep, |
| 17 | + current_user: CurrentUser, |
| 18 | + pageNum: int, |
| 19 | + pageSize: int, |
| 20 | + oid: int = Query(description="空间ID"), |
| 21 | + keyword: Optional[str] = Query(None, description="搜索关键字(可选)"), |
| 22 | +): |
| 23 | + if not current_user.isAdmin: |
| 24 | + raise RuntimeError('only for admin') |
| 25 | + if not oid: |
| 26 | + raise RuntimeError('oid miss error') |
| 27 | + pagination = PaginationParams(page=pageNum, size=pageSize) |
| 28 | + paginator = Paginator(session) |
| 29 | + stmt = select(UserModel.id, UserModel.account, UserModel.name).where( |
| 30 | + ~exists().where(UserWsModel.uid == UserModel.id, UserWsModel.oid == oid) |
| 31 | + ).order_by(UserModel.create_time) |
| 32 | + |
| 33 | + if keyword: |
| 34 | + keyword_pattern = f"%{keyword}%" |
| 35 | + stmt = stmt.where( |
| 36 | + or_( |
| 37 | + UserModel.account.ilike(keyword_pattern), |
| 38 | + UserModel.name.ilike(keyword_pattern), |
| 39 | + ) |
| 40 | + ) |
| 41 | + return await paginator.get_paginated_response( |
| 42 | + stmt=stmt, |
| 43 | + pagination=pagination, |
| 44 | + ) |
14 | 45 |
|
15 | 46 | @router.get("/uws/pager/{pageNum}/{pageSize}", response_model=PaginatedResponse[WorkspaceUser]) |
16 | 47 | async def pager( |
|
0 commit comments