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
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="查询成功")
|