from typing import Annotated from fastapi import APIRouter, Depends, Path, Query from fastapi.responses import JSONResponse from sqlalchemy.ext.asyncio import AsyncSession from app.common.response import ResponseSchema, SuccessResponse from app.core.base_schema import AuthSchema, PageResultSchema, PaginationQueryParam from app.core.dependencies import AuthPermission, db_getter from app.core.router_class import OperationLogRoute from .schema import AuditLogOutSchema, AuditLogQueryParam from .service import AuditLogService AuditRouter = APIRouter(route_class=OperationLogRoute, prefix="/audit", tags=["育种审计日志"]) @AuditRouter.get("/list", summary="分页查询审计日志", response_model=ResponseSchema[PageResultSchema[AuditLogOutSchema]]) async def get_audit__list_controller( auth: Annotated[AuthSchema, Depends(AuthPermission(["module_bre:audit:query"]))], page: Annotated[PaginationQueryParam, Depends()], search: Annotated[AuditLogQueryParam, Query()], db: Annotated[AsyncSession, Depends(db_getter)], ) -> JSONResponse: service = AuditLogService(auth, db) result_dict = await service.page( page_no=page.page_no, page_size=page.page_size, search=search, order_by=page.order_by, ) return SuccessResponse(data=result_dict, msg="查询审计日志列表成功") @AuditRouter.get("/detail/{id}", summary="获取审计日志详情", response_model=ResponseSchema[AuditLogOutSchema]) async def get_audit__detail_controller( auth: Annotated[AuthSchema, Depends(AuthPermission(["module_bre:audit:query"]))], id: Annotated[int, Path(description="审计日志ID")], db: Annotated[AsyncSession, Depends(db_getter)], ) -> JSONResponse: service = AuditLogService(auth, db) result_dict = await service.detail(id=id) return SuccessResponse(data=result_dict, msg="获取审计日志详情成功") @AuditRouter.get("/options", summary="审计日志筛选选项") async def get_audit__options_controller( auth: Annotated[AuthSchema, Depends(AuthPermission(["module_bre:audit:query"]))], db: Annotated[AsyncSession, Depends(db_getter)], ) -> JSONResponse: service = AuditLogService(auth, db) options = await service.options() return SuccessResponse(data=options, msg="获取审计日志选项成功")