jerry 3 månader sedan
förälder
incheckning
da9cb9d1e7
3 ändrade filer med 32 tillägg och 3 borttagningar
  1. 12 2
      app/api/router.py
  2. 1 1
      app/schemas/account.py
  3. 19 0
      app/services/account_service.py

+ 12 - 2
app/api/router.py

@@ -560,6 +560,16 @@ async def email_authorizations_send_email_bulk(
     )
     return success(data={"body": result})
 
+@admin_required_router.get("/account/list_all", summary="分页查询账号", tags=["账号管理"], response_model=ApiResponse[PageResponse[AccountResponse]])
+async def account_next(
+    page: int = Query(0, description="第几页"),
+    size: int = Query(10, description="分页大小"),
+    keyword: str = Query("", description="查询条件"),
+    db: AsyncSession = Depends(get_db)
+):
+    obj = await AccountService.list_all(db, page, size, keyword)
+    return success(data=obj)
+
 @admin_required_router.get("/account/next", summary="获取下一个账号", tags=["账号管理"], response_model=ApiResponse[AccountResponse])
 async def account_next(
     pool_name: str, 
@@ -582,7 +592,7 @@ async def account_lock(
     payload: LockRequest,
     db: AsyncSession = Depends(get_db)
 ):
-    await AccountManager.manual_lock(db, payload)
+    await AccountService.manual_lock(db, payload)
     return success()
 
 @admin_required_router.post("/account/disable", summary="禁用账号", tags=["账号管理"], response_model=ApiResponse)
@@ -590,7 +600,7 @@ async def account_disable(
     payload: LockRequest,
     db: AsyncSession = Depends(get_db)
 ):
-    await AccountManager.disable_account(db, payload)
+    await AccountService.disable_account(db, payload)
     return success()
 
 @public_router.post("/resource/upload_file", summary="上传文件", tags=["文件管理"], response_model=ApiResponse[FileUploadOut])

+ 1 - 1
app/schemas/account.py

@@ -18,7 +18,7 @@ class AccountResponse(BaseModel):
     password: Optional[str] = None
     lock_until: float
     extra_data: Optional[Dict[str, Any]] = None
-    
+    status: str
     model_config = {
         "from_attributes": True
     }

+ 19 - 0
app/services/account_service.py

@@ -2,12 +2,31 @@ import time
 from typing import Optional
 from sqlalchemy.ext.asyncio import AsyncSession
 from sqlalchemy import select, delete
+
+from app.utils.search import apply_keyword_search_stmt
+from app.utils.pagination import paginate
 from app.core.biz_exception import NotFoundError
 from app.models.account import Account
 from app.schemas.account import AccountCreate, LockRequest
 
 class AccountService:
     
+    @staticmethod
+    async def list_all(
+        db: AsyncSession,
+        page: int = 0,
+        size: int = 10,
+        keyword: Optional[str] = None
+    ):
+        stmt = select(Account)
+        stmt = apply_keyword_search_stmt(
+            stmt=stmt,
+            model=Account,
+            keyword=keyword,
+            fields=["id", "pool_name", "username", "password", "extra_data", "status"],
+        ).order_by(Account.id.desc())
+        return await paginate(db, stmt, page, size)
+    
     @staticmethod
     async def add_account(db: AsyncSession, payload: AccountCreate):
         """