Files
Document_translator_1panel/app/root.py
beabigegg 6599716481 1panel
2025-10-03 08:19:40 +08:00

93 lines
2.6 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Root routes and static file serving for SPA in production.
These were originally defined in the top-level app.py. Moving them into the
package allows a clean WSGI entry (wsgi:app) without importing app.py.
"""
import os
from pathlib import Path
from datetime import datetime
from flask import Blueprint, current_app, send_from_directory
root_bp = Blueprint('root', __name__)
def get_static_dir():
"""取得靜態文件目錄(相對路徑)"""
# 取得專案根目錄
project_root = Path(__file__).parent.parent
static_dir = project_root / 'frontend' / 'dist'
return str(static_dir)
@root_bp.route('/')
def index():
try:
static_dir = get_static_dir()
if Path(static_dir).exists():
return send_from_directory(static_dir, 'index.html')
else:
# Fallback API info when frontend is not present
return {
'application': 'PANJIT Document Translator',
'version': '1.0.0',
'status': 'running',
'api_base_url': '/api/v1',
'note': 'Frontend files not found, serving API info'
}
except Exception:
# Fallback API info when frontend is not present
return {
'application': 'PANJIT Document Translator',
'version': '1.0.0',
'status': 'running',
'api_base_url': '/api/v1',
'note': 'Frontend files not found, serving API info'
}
@root_bp.route('/<path:path>')
def serve_static(path):
try:
static_dir = get_static_dir()
if Path(static_dir).exists():
return send_from_directory(static_dir, path)
else:
# SPA fallback
return send_from_directory(static_dir, 'index.html')
except Exception:
# SPA fallback
return {
'error': 'File not found',
'path': path
}, 404
@root_bp.route('/api')
def api_info():
return {
'api_version': 'v1',
'base_url': '/api/v1',
'endpoints': {
'auth': '/api/v1/auth',
'files': '/api/v1/files',
'jobs': '/api/v1/jobs',
'admin': '/api/v1/admin',
'health': '/api/v1/health'
},
'documentation': 'Available endpoints provide RESTful API for document translation'
}
@root_bp.route('/api/health')
def health_check():
# Keep a simple health endpoint here for compatibility
return {
'status': 'healthy',
'timestamp': datetime.utcnow().isoformat(),
'service': 'PANJIT Document Translator API',
'version': '1.0.0'
}, 200