Files
dpb/backend/app/api/v1/module_bre/alert/controller.py
T

65 lines
2.8 KiB
Python
Raw Normal View History

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 AlertOutSchema, AlertQueryParam
from .service import AlertService
AlertRouter = APIRouter(route_class=OperationLogRoute, prefix="/alert", tags=["育种预警中心"])
@AlertRouter.get("/list", summary="分页查询超期预警", response_model=ResponseSchema[PageResultSchema[AlertOutSchema]])
async def get_alert__list_controller(
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_bre:alert:query"]))],
page: Annotated[PaginationQueryParam, Depends()],
search: Annotated[AlertQueryParam, Query()],
db: Annotated[AsyncSession, Depends(db_getter)],
) -> JSONResponse:
service = AlertService(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="查询超期预警列表成功")
@AlertRouter.get("/detail/{id}", summary="获取超期预警详情", response_model=ResponseSchema[AlertOutSchema])
async def get_alert__detail_controller(
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_bre:alert:query"]))],
id: Annotated[int, Path(description="预警ID")],
db: Annotated[AsyncSession, Depends(db_getter)],
) -> JSONResponse:
service = AlertService(auth, db)
result_dict = await service.detail(id=id)
return SuccessResponse(data=result_dict, msg="获取超期预警详情成功")
@AlertRouter.post("/resolve/{id}", summary="标记预警已处理", response_model=ResponseSchema[AlertOutSchema])
async def resolve_alert_controller(
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_bre:alert:update"]))],
id: Annotated[int, Path(description="预警ID")],
db: Annotated[AsyncSession, Depends(db_getter)],
) -> JSONResponse:
service = AlertService(auth, db)
result_dict = await service.resolve(id=id)
return SuccessResponse(data=result_dict, msg="标记预警已处理成功")
@AlertRouter.get("/options", summary="超期预警筛选选项")
async def get_alert__options_controller(
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_bre:alert:query"]))],
db: Annotated[AsyncSession, Depends(db_getter)],
) -> JSONResponse:
service = AlertService(auth, db)
options = await service.options()
return SuccessResponse(data=options, msg="获取超期预警选项成功")