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.

102 lines
3.6 KiB
Python

from typing import Annotated
from fastapi import APIRouter, Body, Depends, Path, Query
from fastapi.responses import JSONResponse
from app.common.response import ResponseSchema, SuccessResponse
from app.core.base_params import PaginationQueryParam
from app.core.base_schema import AuthSchema, PageResultSchema
from app.core.dependencies import AuthPermission
from app.core.router_class import OperationLogRoute
from .schema import ChapterCreateSchema, ChapterOutSchema, ChapterQueryParam, ChapterUpdateSchema
from .service import ChapterService
ChapterRouter = APIRouter(route_class=OperationLogRoute, prefix="/chapter", tags=["能源报告章节"])
@ChapterRouter.get(
"/list",
summary="查询章节列表",
response_model=ResponseSchema[PageResultSchema[ChapterOutSchema]],
)
async def get_chapter_list_controller(
page: Annotated[PaginationQueryParam, Depends()],
search: Annotated[ChapterQueryParam, Depends()],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_energy:chapter:query"]))],
) -> JSONResponse:
result = await ChapterService(auth).page(
page_no=page.page_no,
page_size=page.page_size,
search=search,
order_by=page.order_by or [{"chapter_order": "asc"}, {"id": "asc"}],
)
return SuccessResponse(data=result, msg="查询章节列表成功")
@ChapterRouter.get(
"/list_by_template",
summary="查询模板下全部章节(不分页)",
response_model=ResponseSchema[list[ChapterOutSchema]],
)
async def get_chapter_list_by_template_controller(
template_id: Annotated[int, Query(ge=1, description="模板ID")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_energy:chapter:query"]))],
) -> JSONResponse:
result = await ChapterService(auth).list_by_template(template_id=template_id)
return SuccessResponse(data=result, msg="查询模板章节成功")
@ChapterRouter.get(
"/detail/{id}",
summary="查询章节详情",
response_model=ResponseSchema[ChapterOutSchema],
)
async def get_chapter_detail_controller(
id: Annotated[int, Path(description="章节ID")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_energy:chapter:detail"]))],
) -> JSONResponse:
result = await ChapterService(auth).detail(id=id)
return SuccessResponse(data=result, msg="查询章节详情成功")
@ChapterRouter.post(
"/create",
summary="创建章节",
response_model=ResponseSchema[ChapterOutSchema],
)
async def create_chapter_controller(
data: ChapterCreateSchema,
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_energy:chapter:create"]))],
) -> JSONResponse:
result = await ChapterService(auth).create(data=data)
return SuccessResponse(data=result, msg="创建章节成功")
@ChapterRouter.put(
"/update/{id}",
summary="修改章节",
response_model=ResponseSchema[ChapterOutSchema],
)
async def update_chapter_controller(
data: ChapterUpdateSchema,
id: Annotated[int, Path(description="章节ID")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_energy:chapter:update"]))],
) -> JSONResponse:
result = await ChapterService(auth).update(id=id, data=data)
return SuccessResponse(data=result, msg="修改章节成功")
@ChapterRouter.delete(
"/delete",
summary="删除章节",
response_model=ResponseSchema[None],
)
async def delete_chapter_controller(
ids: Annotated[list[int], Body(description="ID列表")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["module_energy:chapter:delete"]))],
) -> JSONResponse:
await ChapterService(auth).delete(ids=ids)
return SuccessResponse(msg="删除章节成功")