#!/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