[feat]:[FL-153][系统参数管理页面一致性优化]
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
@@ -23,12 +23,14 @@ router = APIRouter(prefix="/admin/system-params", tags=["admin-system-params"])
|
||||
|
||||
@router.get("", response_model=SystemParamListResponse)
|
||||
def get_system_params(
|
||||
limit: int = Query(default=50, ge=1, le=200),
|
||||
offset: int = Query(default=0, ge=0),
|
||||
keyword: str | None = Query(default=None),
|
||||
status_filter: str | None = Query(default=None, alias="status"),
|
||||
_: CurrentUser = Depends(require_any_permission("system_param.read", "system_param.manage")),
|
||||
db: Session = Depends(get_db),
|
||||
) -> SystemParamListResponse:
|
||||
return list_system_params(db, keyword=keyword, status_filter=status_filter)
|
||||
return list_system_params(db, limit=limit, offset=offset, keyword=keyword, status_filter=status_filter)
|
||||
|
||||
|
||||
@router.post("", response_model=SystemParamSummary)
|
||||
|
||||
@@ -46,6 +46,8 @@ def serialize_system_param(item: SystemParam) -> SystemParamSummary:
|
||||
def list_system_params(
|
||||
db: Session,
|
||||
*,
|
||||
limit: int,
|
||||
offset: int,
|
||||
keyword: str | None,
|
||||
status_filter: str | None,
|
||||
) -> SystemParamListResponse:
|
||||
@@ -82,7 +84,15 @@ def list_system_params(
|
||||
total_stmt = total_stmt.where(SystemParam.status == status_filter)
|
||||
|
||||
total = db.scalar(total_stmt) or 0
|
||||
items = db.execute(stmt.order_by(SystemParam.updated_at.desc(), SystemParam.id.desc())).scalars().all()
|
||||
items = (
|
||||
db.execute(
|
||||
stmt.order_by(SystemParam.updated_at.desc(), SystemParam.id.desc())
|
||||
.offset(offset)
|
||||
.limit(limit)
|
||||
)
|
||||
.scalars()
|
||||
.all()
|
||||
)
|
||||
return SystemParamListResponse(items=[serialize_system_param(item) for item in items], total=total)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import unittest
|
||||
|
||||
os.environ.setdefault("DATABASE_URL", "sqlite+pysqlite:///:memory:")
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlalchemy.pool import StaticPool
|
||||
|
||||
from api.app import models # noqa: F401
|
||||
from api.app.core.database import Base
|
||||
from api.app.models.system_param import SystemParam
|
||||
from api.app.services.system_param_service import list_system_params
|
||||
|
||||
|
||||
class SystemParamServiceTest(unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
self.engine = create_engine(
|
||||
"sqlite+pysqlite://",
|
||||
connect_args={"check_same_thread": False},
|
||||
poolclass=StaticPool,
|
||||
)
|
||||
self.SessionLocal = sessionmaker(
|
||||
bind=self.engine,
|
||||
autocommit=False,
|
||||
autoflush=False,
|
||||
expire_on_commit=False,
|
||||
)
|
||||
Base.metadata.create_all(bind=self.engine)
|
||||
self.session = self.SessionLocal()
|
||||
|
||||
def tearDown(self) -> None:
|
||||
self.session.close()
|
||||
Base.metadata.drop_all(bind=self.engine)
|
||||
self.engine.dispose()
|
||||
|
||||
def test_list_system_params_applies_limit_and_offset(self) -> None:
|
||||
for index in range(5):
|
||||
self.session.add(
|
||||
SystemParam(
|
||||
param_key=f"param_{index}",
|
||||
param_name=f"Param {index}",
|
||||
param_value=f"value-{index}",
|
||||
description=f"description-{index}",
|
||||
status="enabled",
|
||||
)
|
||||
)
|
||||
self.session.commit()
|
||||
|
||||
page = list_system_params(
|
||||
self.session,
|
||||
limit=2,
|
||||
offset=1,
|
||||
keyword=None,
|
||||
status_filter=None,
|
||||
)
|
||||
|
||||
self.assertEqual(page.total, 5)
|
||||
self.assertEqual(len(page.items), 2)
|
||||
|
||||
def test_list_system_params_filters_before_paginating(self) -> None:
|
||||
self.session.add_all(
|
||||
[
|
||||
SystemParam(param_key="enabled_first", param_name="Enabled First", status="enabled"),
|
||||
SystemParam(param_key="disabled_first", param_name="Disabled First", status="disabled"),
|
||||
SystemParam(param_key="enabled_second", param_name="Enabled Second", status="enabled"),
|
||||
]
|
||||
)
|
||||
self.session.commit()
|
||||
|
||||
page = list_system_params(
|
||||
self.session,
|
||||
limit=1,
|
||||
offset=0,
|
||||
keyword="enabled",
|
||||
status_filter="enabled",
|
||||
)
|
||||
|
||||
self.assertEqual(page.total, 2)
|
||||
self.assertEqual(len(page.items), 1)
|
||||
self.assertEqual(page.items[0].status, "enabled")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user