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.

117 lines
4.1 KiB
Python

from typing import Annotated
from fastapi import APIRouter, 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
from app.core.dependencies import AuthPermission, get_current_user
from app.core.router_class import OperationLogRoute
from .schema import (
PackageAvailableOut,
PackagePreviewOut,
PluginPurchaseCreate,
SelfOrderCreate,
SelfOrderDetailOut,
SelfOrderListOut,
SelfOrderOut,
WorkspaceOut,
)
from .service import SelfService
TenantSelfServiceRouter = APIRouter(
route_class=OperationLogRoute,
prefix="/tenant",
tags=["自助服务"],
)
@TenantSelfServiceRouter.get(
"/package/available",
summary="可选套餐列表",
response_model=ResponseSchema[PackageAvailableOut],
)
async def package_available_controller(
auth: Annotated[AuthSchema, Depends(AuthPermission(["tenant:package:query"]))],
) -> JSONResponse:
result = await SelfService.get_available_packages(auth=auth, tenant_id=auth.tenant_id)
return SuccessResponse(data=result, msg="查询成功")
@TenantSelfServiceRouter.get(
"/package/preview",
summary="套餐变更影响预览",
response_model=ResponseSchema[PackagePreviewOut],
)
async def package_preview_controller(
target_package_id: Annotated[int, Query(ge=1, description="目标套餐ID")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["tenant:package:query"]))],
) -> JSONResponse:
result = await SelfService.preview_package_change(auth=auth, tenant_id=auth.tenant_id, target_package_id=target_package_id)
return SuccessResponse(data=result, msg="查询成功")
@TenantSelfServiceRouter.post(
"/order/create",
summary="创建自助订单",
response_model=ResponseSchema[SelfOrderOut],
)
async def order_create_controller(
data: SelfOrderCreate,
auth: Annotated[AuthSchema, Depends(AuthPermission(["tenant:order:create"]))],
) -> JSONResponse:
result = await SelfService.create_self_order(auth=auth, tenant_id=auth.tenant_id, data=data)
return SuccessResponse(data=result, msg="订单创建成功")
@TenantSelfServiceRouter.post(
"/plugin/purchase",
summary="购买付费插件",
response_model=ResponseSchema[SelfOrderOut],
)
async def plugin_purchase_controller(
data: PluginPurchaseCreate,
auth: Annotated[AuthSchema, Depends(AuthPermission(["tenant:order:create"]))],
) -> JSONResponse:
result = await SelfService.create_plugin_purchase_order(auth=auth, tenant_id=auth.tenant_id, data=data)
return SuccessResponse(data=result, msg="插件订单创建成功")
@TenantSelfServiceRouter.get(
"/order/list",
summary="我的订单列表",
response_model=ResponseSchema[SelfOrderListOut],
)
async def order_list_controller(
page: Annotated[PaginationQueryParam, Depends()],
auth: Annotated[AuthSchema, Depends(AuthPermission(["tenant:order:query"]))],
) -> JSONResponse:
result = await SelfService.get_self_order_list(
auth=auth,
tenant_id=auth.tenant_id,
page_no=page.page_no,
page_size=page.page_size,
order_by=page.order_by,
)
return SuccessResponse(data=result, msg="查询成功")
@TenantSelfServiceRouter.get(
"/order/detail/{order_id}",
summary="订单详情",
response_model=ResponseSchema[SelfOrderDetailOut],
)
async def order_detail_controller(
order_id: Annotated[int, Path(ge=1, description="订单ID")],
auth: Annotated[AuthSchema, Depends(AuthPermission(["tenant:order:query"]))],
) -> JSONResponse:
result = await SelfService.get_self_order_detail(auth=auth, order_id=order_id)
return SuccessResponse(data=result, msg="查询成功")
@TenantSelfServiceRouter.get(
"/workspace",
summary="租户工作台概览",
response_model=ResponseSchema[WorkspaceOut],
)
async def tenant_workspace_controller(
auth: Annotated[AuthSchema, Depends(get_current_user)],
) -> JSONResponse:
result = await SelfService.get_workspace_data(auth=auth, tenant_id=auth.tenant_id)
return SuccessResponse(data=result, msg="查询成功")