149 lines
4.4 KiB
Python
149 lines
4.4 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
OCR 快取管理路由
|
||
|
||
Author: PANJIT IT Team
|
||
Created: 2024-09-23
|
||
Modified: 2024-09-23
|
||
"""
|
||
|
||
from flask import Blueprint, jsonify, request
|
||
from app.services.ocr_cache import OCRCache
|
||
from app.utils.decorators import jwt_login_required
|
||
from app.utils.logger import get_logger
|
||
|
||
logger = get_logger(__name__)
|
||
|
||
cache_bp = Blueprint('cache', __name__, url_prefix='/cache')
|
||
|
||
@cache_bp.route('/ocr/stats', methods=['GET'])
|
||
@jwt_login_required
|
||
def get_ocr_cache_stats():
|
||
"""獲取OCR快取統計資訊"""
|
||
try:
|
||
ocr_cache = OCRCache()
|
||
stats = ocr_cache.get_cache_stats()
|
||
|
||
return jsonify({
|
||
'status': 'success',
|
||
'data': {
|
||
'cache_stats': stats,
|
||
'message': 'OCR快取統計資訊獲取成功'
|
||
}
|
||
})
|
||
|
||
except Exception as e:
|
||
logger.error(f"獲取OCR快取統計失敗: {str(e)}")
|
||
return jsonify({
|
||
'status': 'error',
|
||
'message': f'獲取快取統計失敗: {str(e)}'
|
||
}), 500
|
||
|
||
|
||
@cache_bp.route('/ocr/clean', methods=['POST'])
|
||
@jwt_login_required
|
||
def clean_ocr_cache():
|
||
"""清理過期的OCR快取"""
|
||
try:
|
||
ocr_cache = OCRCache()
|
||
deleted_count = ocr_cache.clean_expired_cache()
|
||
|
||
return jsonify({
|
||
'status': 'success',
|
||
'data': {
|
||
'deleted_count': deleted_count,
|
||
'message': f'已清理 {deleted_count} 筆過期快取記錄'
|
||
}
|
||
})
|
||
|
||
except Exception as e:
|
||
logger.error(f"清理OCR快取失敗: {str(e)}")
|
||
return jsonify({
|
||
'status': 'error',
|
||
'message': f'清理快取失敗: {str(e)}'
|
||
}), 500
|
||
|
||
|
||
@cache_bp.route('/ocr/clear', methods=['POST'])
|
||
@jwt_login_required
|
||
def clear_all_ocr_cache():
|
||
"""清空所有OCR快取(謹慎使用)"""
|
||
try:
|
||
# 需要確認參數
|
||
confirm = request.json.get('confirm', False) if request.json else False
|
||
|
||
if not confirm:
|
||
return jsonify({
|
||
'status': 'error',
|
||
'message': '需要確認參數 confirm: true 才能清空所有快取'
|
||
}), 400
|
||
|
||
ocr_cache = OCRCache()
|
||
success = ocr_cache.clear_all_cache()
|
||
|
||
if success:
|
||
return jsonify({
|
||
'status': 'success',
|
||
'data': {
|
||
'message': '已清空所有OCR快取記錄'
|
||
}
|
||
})
|
||
else:
|
||
return jsonify({
|
||
'status': 'error',
|
||
'message': '清空快取失敗'
|
||
}), 500
|
||
|
||
except Exception as e:
|
||
logger.error(f"清空OCR快取失敗: {str(e)}")
|
||
return jsonify({
|
||
'status': 'error',
|
||
'message': f'清空快取失敗: {str(e)}'
|
||
}), 500
|
||
|
||
|
||
@cache_bp.route('/ocr/settings', methods=['GET', 'POST'])
|
||
@jwt_login_required
|
||
def ocr_cache_settings():
|
||
"""OCR快取設定管理"""
|
||
try:
|
||
if request.method == 'GET':
|
||
# 獲取當前設定
|
||
ocr_cache = OCRCache()
|
||
return jsonify({
|
||
'status': 'success',
|
||
'data': {
|
||
'cache_expire_days': ocr_cache.cache_expire_days,
|
||
'cache_db_path': str(ocr_cache.cache_db_path),
|
||
'message': '快取設定獲取成功'
|
||
}
|
||
})
|
||
|
||
elif request.method == 'POST':
|
||
# 更新設定(重新初始化OCRCache)
|
||
data = request.json or {}
|
||
cache_expire_days = data.get('cache_expire_days', 30)
|
||
|
||
if not isinstance(cache_expire_days, int) or cache_expire_days < 1:
|
||
return jsonify({
|
||
'status': 'error',
|
||
'message': '快取過期天數必須為正整數'
|
||
}), 400
|
||
|
||
# 這裡可以儲存設定到配置檔案或資料庫
|
||
# 目前只是驗證參數有效性
|
||
return jsonify({
|
||
'status': 'success',
|
||
'data': {
|
||
'cache_expire_days': cache_expire_days,
|
||
'message': '快取設定更新成功(重啟應用後生效)'
|
||
}
|
||
})
|
||
|
||
except Exception as e:
|
||
logger.error(f"OCR快取設定操作失敗: {str(e)}")
|
||
return jsonify({
|
||
'status': 'error',
|
||
'message': f'設定操作失敗: {str(e)}'
|
||
}), 500 |