controller.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. from typing import Annotated
  2. from fastapi import APIRouter, Body, Depends, Path
  3. from fastapi.responses import JSONResponse
  4. from app.api.v1.module_system.auth.schema import AuthSchema
  5. from app.common.response import ResponseSchema, SuccessResponse
  6. from app.core.base_params import PaginationQueryParam
  7. from app.core.base_schema import BatchSetAvailable
  8. from app.core.dependencies import AuthPermission
  9. from app.core.logger import log
  10. from app.core.router_class import OperationLogRoute
  11. from .schema import TenantCreateSchema, TenantOutSchema, TenantQueryParam, TenantUpdateSchema
  12. from .service import TenantService
  13. TenantRouter = APIRouter(route_class=OperationLogRoute, prefix="/tenant", tags=["租户管理"])
  14. @TenantRouter.get(
  15. "/detail/{id}",
  16. summary="获取租户详情",
  17. description="获取租户详情",
  18. response_model=ResponseSchema[TenantOutSchema],
  19. )
  20. async def get_obj_detail_controller(
  21. id: Annotated[int, Path(description="租户ID")],
  22. auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:tenant:query"]))],
  23. ) -> JSONResponse:
  24. result_dict = await TenantService.detail_service(id=id, auth=auth)
  25. log.info(f"获取租户详情成功 {id}")
  26. return SuccessResponse(data=result_dict, msg="获取租户详情成功")
  27. @TenantRouter.get(
  28. "/list",
  29. summary="查询租户列表",
  30. description="查询租户列表(分页)",
  31. response_model=ResponseSchema[dict],
  32. )
  33. async def get_obj_list_controller(
  34. page: Annotated[PaginationQueryParam, Depends()],
  35. search: Annotated[TenantQueryParam, Depends()],
  36. auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:tenant:query"]))],
  37. ) -> JSONResponse:
  38. order_by = [{"id": "asc"}]
  39. if page.order_by:
  40. order_by = page.order_by
  41. result_dict = await TenantService.page_service(
  42. auth=auth,
  43. page_no=page.page_no if page.page_no is not None else 1,
  44. page_size=page.page_size if page.page_size is not None else 10,
  45. search=search,
  46. order_by=order_by,
  47. )
  48. log.info("查询租户列表成功")
  49. return SuccessResponse(data=result_dict, msg="查询租户列表成功")
  50. @TenantRouter.post(
  51. "/create",
  52. summary="创建租户",
  53. description="创建租户",
  54. response_model=ResponseSchema[TenantOutSchema],
  55. )
  56. async def create_obj_controller(
  57. data: TenantCreateSchema,
  58. auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:tenant:create"]))],
  59. ) -> JSONResponse:
  60. result_dict = await TenantService.create_service(auth=auth, data=data)
  61. log.info(f"创建租户成功: {result_dict.get('name')}")
  62. return SuccessResponse(data=result_dict, msg="创建租户成功")
  63. @TenantRouter.put(
  64. "/update/{id}",
  65. summary="修改租户",
  66. description="修改租户",
  67. response_model=ResponseSchema[TenantOutSchema],
  68. )
  69. async def update_obj_controller(
  70. data: TenantUpdateSchema,
  71. id: Annotated[int, Path(description="租户ID")],
  72. auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:tenant:update"]))],
  73. ) -> JSONResponse:
  74. result_dict = await TenantService.update_service(auth=auth, id=id, data=data)
  75. log.info(f"修改租户成功: {result_dict.get('name')}")
  76. return SuccessResponse(data=result_dict, msg="修改租户成功")
  77. @TenantRouter.delete(
  78. "/delete",
  79. summary="删除租户",
  80. description="删除租户",
  81. )
  82. async def delete_obj_controller(
  83. ids: Annotated[list[int], Body(..., description="ID列表")],
  84. auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:tenant:delete"]))],
  85. ) -> JSONResponse:
  86. await TenantService.delete_service(auth=auth, ids=ids)
  87. log.info(f"删除租户成功: {ids}")
  88. return SuccessResponse(msg="删除租户成功")
  89. @TenantRouter.patch(
  90. "/available/setting",
  91. summary="批量修改租户状态",
  92. description="批量修改租户状态",
  93. )
  94. async def batch_set_available_obj_controller(
  95. data: BatchSetAvailable,
  96. auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:tenant:patch"]))],
  97. ) -> JSONResponse:
  98. await TenantService.set_available_service(auth=auth, data=data)
  99. log.info(f"批量修改租户状态成功: {data.ids}")
  100. return SuccessResponse(msg="批量修改租户状态成功")