177 lines
5.1 KiB
Python
177 lines
5.1 KiB
Python
"""
|
||
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") |