""" 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': '前端未构建'}