用户生成资源容量管控
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
from fastapi import APIRouter
|
||||
|
||||
from app.api.admin.video_prompt_schema_config import router as video_prompt_schema_config_router
|
||||
from app.api.admin.resource_capacity import router as resource_capacity_router
|
||||
|
||||
router = APIRouter()
|
||||
router.include_router(video_prompt_schema_config_router)
|
||||
router.include_router(resource_capacity_router)
|
||||
|
||||
@@ -0,0 +1,175 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, Depends, Path
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.dependencies import get_admin_user, get_db
|
||||
from app.enums.resource_capacity import ResourceCapacityOperationEnum
|
||||
from app.models.user import User
|
||||
from app.schemas.resource_capacity import (
|
||||
AdminUserResourceCapacityOut,
|
||||
ResourceCapacityConfigOut,
|
||||
ResourceCapacityConfigUpdate,
|
||||
)
|
||||
from app.services.operation_log import log_operation
|
||||
from app.services.resource_capacity_service import (
|
||||
build_global_resource_capacity_operation_detail,
|
||||
build_user_resource_capacity_operation_detail,
|
||||
delete_user_resource_capacity_config,
|
||||
get_admin_user_resource_capacity,
|
||||
get_global_resource_capacity_config,
|
||||
save_global_resource_capacity_config,
|
||||
save_user_resource_capacity_config,
|
||||
)
|
||||
|
||||
router = APIRouter(prefix="/admin", tags=["admin-resource-capacity"])
|
||||
|
||||
|
||||
@router.get(
|
||||
"/resource-capacity/global",
|
||||
response_model=ResourceCapacityConfigOut,
|
||||
summary="获取全局资源空间容量配置",
|
||||
description=(
|
||||
"获取管理后台全局生成资源空间容量管控配置。"
|
||||
"配置最终存储在 system_configs 表,key=resource_capacity_limit_config。"
|
||||
"enabled=false 表示全局容量管控关闭;enabled=true 表示按 limit_value + limit_unit 换算出的 limit_bytes 进行限制。"
|
||||
"单位枚举:MB=1048576字节,GB=1073741824字节,TB=1099511627776字节。"
|
||||
),
|
||||
)
|
||||
async def get_global_resource_capacity(
|
||||
admin: User = Depends(get_admin_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
_ = admin
|
||||
return await get_global_resource_capacity_config(db)
|
||||
|
||||
|
||||
@router.put(
|
||||
"/resource-capacity/global",
|
||||
response_model=ResourceCapacityConfigOut,
|
||||
summary="保存全局资源空间容量配置",
|
||||
description=(
|
||||
"保存管理后台全局生成资源空间容量管控配置。"
|
||||
"enabled=true 时,limit_value 和 limit_unit 必填。"
|
||||
"limit_value 最小为1,不能为负数,最多支持3位小数。"
|
||||
"limit_unit 枚举明细:MB=1048576字节,GB=1073741824字节,TB=1099511627776字节。"
|
||||
"limit_bytes 不允许前端传入,由后端统一换算后保存。"
|
||||
"本接口会写入后台操作日志,action=更新全局资源容量配置,detail记录修改前后配置快照。"
|
||||
),
|
||||
)
|
||||
async def update_global_resource_capacity(
|
||||
req: ResourceCapacityConfigUpdate,
|
||||
admin: User = Depends(get_admin_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
before = await get_global_resource_capacity_config(db)
|
||||
result = await save_global_resource_capacity_config(db, req)
|
||||
await log_operation(
|
||||
db,
|
||||
admin.id,
|
||||
admin.username,
|
||||
ResourceCapacityOperationEnum.UPDATE_GLOBAL_CONFIG.value,
|
||||
"PUT",
|
||||
"/admin/resource-capacity/global",
|
||||
detail=build_global_resource_capacity_operation_detail(before, result),
|
||||
)
|
||||
await db.commit()
|
||||
return result
|
||||
|
||||
|
||||
@router.get(
|
||||
"/users/{user_id}/resource-capacity",
|
||||
response_model=AdminUserResourceCapacityOut,
|
||||
summary="获取指定用户资源空间容量配置",
|
||||
description=(
|
||||
"获取指定用户的个人容量配置、全局容量配置以及最终生效容量数据。"
|
||||
"优先级:用户个人配置存在时优先使用;用户个人配置不存在时使用全局配置。"
|
||||
"注意:用户个人配置存在且 enabled=false,表示该用户个人明确关闭容量限制,不再回落到全局配置。"
|
||||
),
|
||||
)
|
||||
async def get_user_resource_capacity(
|
||||
user_id: str = Path(..., description="用户ID,用于查询该用户个人容量配置和最终生效容量数据"),
|
||||
admin: User = Depends(get_admin_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
_ = admin
|
||||
return await get_admin_user_resource_capacity(db, user_id)
|
||||
|
||||
|
||||
@router.put(
|
||||
"/users/{user_id}/resource-capacity",
|
||||
response_model=AdminUserResourceCapacityOut,
|
||||
summary="保存指定用户个人资源空间容量配置",
|
||||
description=(
|
||||
"新增或更新指定用户个人资源空间容量配置。"
|
||||
"保存后该用户配置优先级高于全局配置。"
|
||||
"enabled=true 表示启用该用户个人容量限制;enabled=false 表示该用户个人明确关闭限制,不再回落到全局。"
|
||||
"limit_value 最小为1,不能为负数,最多3位小数。"
|
||||
"limit_unit 枚举明细:MB=1048576字节,GB=1073741824字节,TB=1099511627776字节。"
|
||||
"本接口会写入后台操作日志:首次创建 action=新增用户资源容量配置;已有配置更新 action=更新用户资源容量配置;detail记录修改前后配置快照。"
|
||||
),
|
||||
)
|
||||
async def update_user_resource_capacity(
|
||||
req: ResourceCapacityConfigUpdate,
|
||||
user_id: str = Path(..., description="用户ID,用于新增或更新该用户个人容量配置"),
|
||||
admin: User = Depends(get_admin_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
before = await get_admin_user_resource_capacity(db, user_id)
|
||||
result = await save_user_resource_capacity_config(db, user_id, req)
|
||||
is_create = not before.has_user_config
|
||||
await log_operation(
|
||||
db,
|
||||
admin.id,
|
||||
admin.username,
|
||||
(
|
||||
ResourceCapacityOperationEnum.CREATE_USER_CONFIG.value
|
||||
if is_create
|
||||
else ResourceCapacityOperationEnum.UPDATE_USER_CONFIG.value
|
||||
),
|
||||
"PUT",
|
||||
f"/admin/users/{user_id}/resource-capacity",
|
||||
detail=build_user_resource_capacity_operation_detail(
|
||||
target_user_id=user_id,
|
||||
operation="create" if is_create else "update",
|
||||
before=before,
|
||||
after=result,
|
||||
),
|
||||
)
|
||||
await db.commit()
|
||||
return result
|
||||
|
||||
|
||||
@router.delete(
|
||||
"/users/{user_id}/resource-capacity",
|
||||
response_model=AdminUserResourceCapacityOut,
|
||||
summary="删除指定用户个人资源空间容量配置",
|
||||
description=(
|
||||
"删除指定用户个人容量配置。删除后该用户不再有个人覆盖配置,后续容量限制重新回落到全局配置。"
|
||||
"本接口会写入后台操作日志,action=删除用户资源容量配置,detail记录删除前个人配置、删除后最终生效配置。"
|
||||
),
|
||||
)
|
||||
async def remove_user_resource_capacity(
|
||||
user_id: str = Path(..., description="用户ID,用于删除该用户个人容量配置并恢复走全局配置"),
|
||||
admin: User = Depends(get_admin_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
before = await get_admin_user_resource_capacity(db, user_id)
|
||||
result = await delete_user_resource_capacity_config(db, user_id)
|
||||
await log_operation(
|
||||
db,
|
||||
admin.id,
|
||||
admin.username,
|
||||
ResourceCapacityOperationEnum.DELETE_USER_CONFIG.value,
|
||||
"DELETE",
|
||||
f"/admin/users/{user_id}/resource-capacity",
|
||||
detail=build_user_resource_capacity_operation_detail(
|
||||
target_user_id=user_id,
|
||||
operation="delete",
|
||||
before=before,
|
||||
after=result,
|
||||
remark="删除用户个人容量配置,用户恢复使用全局资源容量配置。",
|
||||
),
|
||||
)
|
||||
await db.commit()
|
||||
return result
|
||||
Reference in New Issue
Block a user