"""Judgment standard library endpoints.""" from typing import Annotated from fastapi import APIRouter, Depends, Query from app.api.dependencies import DatabaseSession, require_permission from app.models.entities import UserAccount from app.schemas.common import ApiResponse from app.schemas.standards import StandardRuleCreate, StandardRuleDetail, StandardRuleListData, StandardRuleUpdate from app.services.standards import StandardLibraryService router = APIRouter(prefix="/standards", tags=["standards"]) @router.get("", response_model=ApiResponse[StandardRuleListData]) async def list_standards( session: DatabaseSession, _current_user: Annotated[UserAccount, Depends(require_permission("standard.read"))], keyword: str | None = Query(default=None, max_length=50), category: str = Query(default="all"), status: str = Query(default="启用"), page: int = Query(default=1, ge=1), page_size: int = Query(default=20, ge=1, le=100), ) -> ApiResponse[StandardRuleListData]: return ApiResponse(data=await StandardLibraryService(session).list( keyword=keyword, category=category, status=status, page=page, page_size=page_size, )) @router.get("/{rule_id}", response_model=ApiResponse[StandardRuleDetail]) async def get_standard( rule_id: int, session: DatabaseSession, _current_user: Annotated[UserAccount, Depends(require_permission("standard.read"))], ) -> ApiResponse[StandardRuleDetail]: return ApiResponse(data=await StandardLibraryService(session).get(rule_id)) @router.post("", response_model=ApiResponse[StandardRuleDetail]) async def create_standard( payload: StandardRuleCreate, session: DatabaseSession, current_user: Annotated[UserAccount, Depends(require_permission("standard.manage", operate=True))], ) -> ApiResponse[StandardRuleDetail]: return ApiResponse(data=await StandardLibraryService(session).create(payload, current_user)) @router.patch("/{rule_id}", response_model=ApiResponse[StandardRuleDetail]) async def update_standard( rule_id: int, payload: StandardRuleUpdate, session: DatabaseSession, current_user: Annotated[UserAccount, Depends(require_permission("standard.manage", operate=True))], ) -> ApiResponse[StandardRuleDetail]: return ApiResponse(data=await StandardLibraryService(session).update(rule_id, payload, current_user))