uploader-bot/app/api/fastapi_v3_routes.py

177 lines
5.1 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.

"""
FastAPI маршруты для совместимости с v3 API
"""
from typing import Dict, Any
from datetime import datetime
from fastapi import APIRouter, HTTPException
from fastapi.responses import JSONResponse
from app.core.crypto import get_ed25519_manager
from app.core.logging import get_logger
logger = get_logger(__name__)
# Router для v3 API совместимости
router = APIRouter(prefix="/api/v3", tags=["v3-compatibility"])
@router.get("/node/status")
async def get_node_status_v3():
"""
Получение статуса ноды (v3 API совместимость)
"""
try:
crypto_manager = get_ed25519_manager()
return {
"success": True,
"data": {
"node_id": crypto_manager.node_id,
"public_key": crypto_manager.public_key_hex,
"version": "3.0.0",
"status": "active",
"capabilities": [
"content_upload",
"content_sync",
"decentralized_filtering",
"ed25519_signatures"
],
"network": {
"protocol_version": "3.0",
"connections": 0, # TODO: добавить реальную статистику
"peers": []
},
"timestamp": datetime.utcnow().isoformat()
}
}
except Exception as e:
logger.error(f"Node status error: {e}")
raise HTTPException(status_code=500, detail="Internal server error")
@router.get("/network/stats")
async def get_network_stats_v3():
"""
Получение статистики сети (v3 API)
"""
try:
# TODO: добавить реальные метрики
return {
"success": True,
"data": {
"network": {
"total_nodes": 1,
"active_nodes": 1,
"total_content": 0,
"network_hash_rate": 0,
"avg_latency_ms": 0
},
"node": {
"uptime_seconds": 0,
"content_served": 0,
"bytes_transferred": 0,
"requests_handled": 0
},
"timestamp": datetime.utcnow().isoformat()
}
}
except Exception as e:
logger.error(f"Network stats error: {e}")
raise HTTPException(status_code=500, detail="Internal server error")
@router.get("/content/list")
async def get_content_list_v3():
"""
Получение списка контента (v3 API)
"""
try:
# TODO: добавить реальный список контента
return {
"success": True,
"data": {
"content": [],
"total": 0,
"page": 1,
"per_page": 50
}
}
except Exception as e:
logger.error(f"Content list error: {e}")
raise HTTPException(status_code=500, detail="Internal server error")
# Router для v1 API совместимости
router_v1 = APIRouter(prefix="/api/v1", tags=["v1-compatibility"])
@router_v1.get("/node")
async def get_node_info_v1():
"""
Получение информации о ноде (v1 API совместимость)
"""
try:
crypto_manager = get_ed25519_manager()
return {
"node_id": crypto_manager.node_id,
"version": "3.0.0",
"status": "online",
"api_version": "v1-compat"
}
except Exception as e:
logger.error(f"Node info error: {e}")
raise HTTPException(status_code=500, detail="Internal server error")
# Router для MY Network совместимости
router_my = APIRouter(prefix="/api/my", tags=["my-network-compatibility"])
@router_my.get("/monitor")
async def get_my_network_monitor():
"""
Мониторинг MY Network (совместимость)
"""
try:
crypto_manager = get_ed25519_manager()
return {
"status": "active",
"node_id": crypto_manager.node_id,
"version": "3.0.0",
"network": {
"peers": 0,
"content_items": 0
},
"timestamp": datetime.utcnow().isoformat()
}
except Exception as e:
logger.error(f"MY Network monitor error: {e}")
raise HTTPException(status_code=500, detail="Internal server error")
@router_my.post("/handshake")
async def my_network_handshake():
"""
MY Network handshake (совместимость)
"""
try:
crypto_manager = get_ed25519_manager()
return {
"success": True,
"node_id": crypto_manager.node_id,
"version": "3.0.0",
"protocol": "my-network-v3"
}
except Exception as e:
logger.error(f"MY Network handshake error: {e}")
raise HTTPException(status_code=500, detail="Internal server error")