NAC_Blockchain/gnacs-service/routers/classify.py

62 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""GNACS 资产分类路由"""
from fastapi import APIRouter, HTTPException, Query
import database
from bson import ObjectId
router = APIRouter()
def serialize(doc):
if doc is None:
return None
result = {}
for k, v in doc.items():
if k == "_id":
result["_id"] = str(v)
elif isinstance(v, list):
result[k] = [serialize(i) if isinstance(i, dict) else i for i in v]
elif isinstance(v, dict):
result[k] = serialize(v)
else:
result[k] = v
return result
@router.get("/tree")
async def get_classification_tree():
"""获取完整的20大类资产分类树含子类"""
col = database.asset_classes_col
cursor = col.find({}, sort=[("class_code", 1)])
classes = []
async for doc in cursor:
classes.append(serialize(doc))
return {"success": True, "data": classes, "total": len(classes)}
@router.get("/list")
async def list_classes(
acc_standard: str = Query(None, description="按ACC代币标准筛选如ACC-20/ACC-721/ACC-1155/ACC-1400"),
min_kyc: int = Query(None, description="按最低KYC等级筛选")
):
"""列出所有资产大类"""
col = database.asset_classes_col
query = {}
if acc_standard:
query["token_standard"] = acc_standard
if min_kyc is not None:
query["min_kyc_level"] = {"$lte": min_kyc}
cursor = col.find(query, sort=[("class_code", 1)])
classes = []
async for doc in cursor:
classes.append(serialize(doc))
return {"success": True, "classes": classes, "total": len(classes)}
@router.get("/{class_id}")
async def get_class_detail(class_id: str):
"""获取指定资产大类的详细信息"""
col = database.asset_classes_col
doc = await col.find_one({"class_id": class_id.upper()})
if not doc:
doc = await col.find_one({"class_code": class_id})
if not doc:
raise HTTPException(status_code=404, detail=f"资产类别 {class_id} 不存在")
return {"success": True, "data": serialize(doc)}