from datetime import datetime import json import os import pytz import traceback class UserHistoryManager: def __init__(self): """初始化歷史紀錄管理器""" self.history_file = "user_history.json" print(f"Initializing UserHistoryManager with file: {os.path.abspath(self.history_file)}") self._init_file() def _init_file(self): """初始化JSON檔案""" try: if not os.path.exists(self.history_file): print(f"Creating new history file: {self.history_file}") with open(self.history_file, 'w', encoding='utf-8') as f: json.dump([], f) else: print(f"History file exists: {self.history_file}") # 驗證檔案內容 with open(self.history_file, 'r', encoding='utf-8') as f: data = json.load(f) print(f"Current history entries: {len(data)}") except Exception as e: print(f"Error in _init_file: {str(e)}") print(traceback.format_exc()) def save_history(self, user_preferences: dict = None, results: list = None, search_type: str = "criteria", description: str = None) -> bool: """ 儲存搜尋歷史,支援兩種類型的搜尋 Args: user_preferences: dict, 使用者偏好設定 (用於 criteria 搜尋) results: list, 推薦結果 search_type: str, 搜尋類型 ("criteria" 或 "description") description: str, 使用者輸入的描述 (用於 description 搜尋) """ try: taipei_tz = pytz.timezone('Asia/Taipei') taipei_time = datetime.now(taipei_tz) history_entry = { "timestamp": taipei_time.strftime("%Y-%m-%d %H:%M:%S"), "search_type": search_type, "results": results } # 根據搜尋類型添加不同的資訊 if search_type == "criteria": history_entry["preferences"] = user_preferences else: # description history_entry["description"] = description with open(self.history_file, 'r', encoding='utf-8') as f: history = json.load(f) history.append(history_entry) if len(history) > 20: history = history[-20:] with open(self.history_file, 'w', encoding='utf-8') as f: json.dump(history, f, ensure_ascii=False, indent=2) return True except Exception as e: print(f"Error saving history: {str(e)}") return False def get_history(self) -> list: """獲取搜尋歷史""" try: print("Attempting to read history") # Debug with open(self.history_file, 'r', encoding='utf-8') as f: data = json.load(f) print(f"Read {len(data)} history entries") # Debug return data if isinstance(data, list) else [] except Exception as e: print(f"Error reading history: {str(e)}") print(traceback.format_exc()) return [] def clear_all_history(self) -> bool: """清除所有歷史紀錄""" try: print("Attempting to clear all history") # Debug with open(self.history_file, 'w', encoding='utf-8') as f: json.dump([], f) print("History cleared successfully") # Debug return True except Exception as e: print(f"Error clearing history: {str(e)}") print(traceback.format_exc()) return False