You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
3.2 KiB
Python

from typing import Annotated
from fastapi import APIRouter, Body, Depends, Path
from fastapi.responses import JSONResponse
from app.common.response import ResponseSchema, SuccessResponse
from app.core import cache_util
from app.core.base_params import PaginationQueryParam
from app.core.base_schema import AuthSchema, PageResultSchema
from app.core.cache_util import cache
from app.core.dependencies import AuthPermission
from app.core.router_class import OperationLogRoute
from .schema import RuleCreateSchema, RuleOutSchema, RuleQueryParam, RuleUpdateSchema
from .service import RuleService
RuleRouter = APIRouter(route_class=OperationLogRoute, prefix="", tags=["规则列表"])
_RULE_NS = "rule"
@RuleRouter.get(
"/list",
summary="查询规则列表",
response_model=ResponseSchema[PageResultSchema[RuleOutSchema]],
)
@cache(expire=300, namespace=_RULE_NS)
async def get_rule_list_controller(
page: Annotated[PaginationQueryParam, Depends()],
search: Annotated[RuleQueryParam, Depends()],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_rule:rule:query"]))],
) -> JSONResponse:
result = await RuleService(auth).page(
page_no=page.page_no,
page_size=page.page_size,
search=search,
order_by=page.order_by or [{"id": "desc"}],
)
return SuccessResponse(data=result, msg="查询规则列表成功")
@RuleRouter.get(
"/detail/{id}",
summary="查询规则详情",
response_model=ResponseSchema[RuleOutSchema],
)
async def get_rule_detail_controller(
id: Annotated[int, Path(description="规则ID")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_rule:rule:detail"]))],
) -> JSONResponse:
result = await RuleService(auth).detail(id=id)
return SuccessResponse(data=result, msg="查询规则详情成功")
@RuleRouter.post(
"/create",
summary="创建规则",
response_model=ResponseSchema[RuleOutSchema],
)
async def create_rule_controller(
data: RuleCreateSchema,
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_rule:rule:create"]))],
) -> JSONResponse:
result = await RuleService(auth).create(data=data)
await cache_util.clear(namespace=_RULE_NS)
return SuccessResponse(data=result, msg="创建规则成功")
@RuleRouter.put(
"/update/{id}",
summary="修改规则",
response_model=ResponseSchema[RuleOutSchema],
)
async def update_rule_controller(
data: RuleUpdateSchema,
id: Annotated[int, Path(description="规则ID")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_rule:rule:update"]))],
) -> JSONResponse:
result = await RuleService(auth).update(id=id, data=data)
await cache_util.clear(namespace=_RULE_NS)
return SuccessResponse(data=result, msg="修改规则成功")
@RuleRouter.delete(
"/delete",
summary="删除规则",
response_model=ResponseSchema[None],
)
async def delete_rule_controller(
ids: Annotated[list[int], Body(description="ID列表")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_rule:rule:delete"]))],
) -> JSONResponse:
await RuleService(auth).delete(ids=ids)
await cache_util.clear(namespace=_RULE_NS)
return SuccessResponse(msg="删除规则成功")