feat: Cloudflare多账号子资产管理(zone/worker/r2/tunnel/mail子资产模型+模态框)
This commit is contained in:
@@ -15,6 +15,7 @@ from app.models.asset import (
|
||||
Asset,
|
||||
AssetStatus,
|
||||
AssetType,
|
||||
CloudflareDetail,
|
||||
DomainDetail,
|
||||
VPSDetail,
|
||||
)
|
||||
@@ -24,6 +25,7 @@ from app.schemas.asset import (
|
||||
AssetCreate,
|
||||
AssetRead,
|
||||
AssetUpdate,
|
||||
CloudflareDetailRead,
|
||||
DomainDetailRead,
|
||||
VPSDetailRead,
|
||||
)
|
||||
@@ -33,6 +35,7 @@ DETAIL_MAP = {
|
||||
AssetType.VPS: ("vps_detail", VPSDetail),
|
||||
AssetType.DOMAIN: ("domain_detail", DomainDetail),
|
||||
AssetType.AI_AGENT: ("ai_detail", AIAccount),
|
||||
AssetType.CLOUDFLARE: ("cloudflare_detail", CloudflareDetail),
|
||||
}
|
||||
|
||||
# 允许排序的字段白名单
|
||||
@@ -71,6 +74,8 @@ def _detail_to_read(detail):
|
||||
read = AIAccountRead.model_validate(detail)
|
||||
read.has_api_key = bool(detail.api_key_encrypted or detail.api_key)
|
||||
return read
|
||||
if isinstance(detail, CloudflareDetail):
|
||||
return CloudflareDetailRead.model_validate(detail)
|
||||
return None
|
||||
|
||||
|
||||
@@ -94,6 +99,8 @@ def _to_read(session: Session, asset: Asset, detail) -> AssetRead:
|
||||
read.domain_detail = _detail_to_read(detail)
|
||||
elif isinstance(detail, AIAccount):
|
||||
read.ai_detail = _detail_to_read(detail)
|
||||
elif isinstance(detail, CloudflareDetail):
|
||||
read.cloudflare_detail = _detail_to_read(detail)
|
||||
return read
|
||||
|
||||
|
||||
@@ -151,7 +158,7 @@ def create_asset(session: Session, data: AssetCreate) -> AssetRead:
|
||||
)
|
||||
|
||||
asset_data = data.model_dump(
|
||||
exclude={"vps_detail", "domain_detail", "ai_detail"}
|
||||
exclude={"vps_detail", "domain_detail", "ai_detail", "cloudflare_detail"}
|
||||
)
|
||||
asset = Asset(**asset_data)
|
||||
session.add(asset)
|
||||
@@ -183,7 +190,7 @@ def update_asset(session: Session, asset_id: int, data: AssetUpdate) -> AssetRea
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="资产不存在")
|
||||
|
||||
main_fields = data.model_dump(
|
||||
exclude_unset=True, exclude={"vps_detail", "domain_detail", "ai_detail"}
|
||||
exclude_unset=True, exclude={"vps_detail", "domain_detail", "ai_detail", "cloudflare_detail"}
|
||||
)
|
||||
for key, value in main_fields.items():
|
||||
setattr(asset, key, value)
|
||||
|
||||
Reference in New Issue
Block a user