nac-onboarding/backend/main.py

75 lines
2.2 KiB
Python

"""
NAC 一键上链系统 - 主入口
版本: 3.0 (真实注册/登录 + 多语言 + 17步工作流)
"""
import os
import logging
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse
# 路由模块
from routers import assets, onboarding, node
from routers.users import router as users_router
# 日志配置
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s [%(name)s] %(levelname)s: %(message)s',
handlers=[
logging.StreamHandler(),
logging.FileHandler('/opt/nac/onboarding/logs/app.log', encoding='utf-8')
]
)
logger = logging.getLogger('nac-onboarding')
app = FastAPI(
title='NAC 一键资产上链系统',
description='基于NAC公链的RWA资产上链平台 - 17步完整工作流',
version='3.0.0',
docs_url='/api/docs',
redoc_url='/api/redoc'
)
# CORS
app.add_middleware(
CORSMiddleware,
allow_origins=['*'],
allow_credentials=True,
allow_methods=['*'],
allow_headers=['*'],
)
# API路由注册
app.include_router(users_router, prefix='/api/users', tags=['用户认证'])
app.include_router(assets.router, prefix='/api/assets', tags=['资产管理'])
app.include_router(onboarding.router, prefix='/api/onboarding', tags=['上链流程'])
app.include_router(node.router, prefix='/api/node', tags=['节点状态'])
@app.get('/api/health')
async def health():
from database import db
try:
await db.command('ping')
mongo_status = 'connected'
except Exception:
mongo_status = 'disconnected'
return {
'status': 'ok',
'version': '3.0.0',
'mongo': mongo_status,
'protocol': 'NAC-Lens/4.0',
'auth': 'local-jwt'
}
# 前端静态文件服务
frontend_dir = '/opt/nac/onboarding/frontend'
if os.path.exists(frontend_dir):
app.mount('/assets', StaticFiles(directory=f'{frontend_dir}/assets'), name='assets')
@app.get('/{full_path:path}')
async def serve_frontend(full_path: str):
index = f'{frontend_dir}/index.html'
if os.path.exists(index):
return FileResponse(index)
return {'error': '前端未构建'}