You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
5.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
优化的待办事项数据管理模块
该模块是旧todo_data.py的优化版本使用新的存储系统和缓存机制提高性能。
接口与旧版本完全兼容,可以直接替换使用。
"""
import os
import json
import uuid
from datetime import datetime
from new_structure.data.storage.todo_data_adapter import TodoDataAdapter
# 创建全局适配器实例
_todo_adapter = None
def get_todo_adapter(auth=None, logger=None):
"""获取全局适配器实例
Args:
auth: 用户认证对象
logger: 日志对象
Returns:
TodoDataAdapter实例
"""
global _todo_adapter
if _todo_adapter is None:
_todo_adapter = TodoDataAdapter(auth=auth, logger=logger, use_optimized=True)
return _todo_adapter
class TodoManager:
"""待办事项数据管理类(兼容旧接口)
与旧todo_data.py的TodoManager类接口完全兼容但使用优化的存储和缓存机制。
"""
def __init__(self, auth=None, logger=None):
"""初始化待办事项管理类
Args:
auth: 用户认证对象
logger: 日志对象
"""
self.adapter = get_todo_adapter(auth=auth, logger=logger)
self.auth = auth
self.logger = logger
def _get_todo_file(self, user_identifier):
"""兼容旧接口的文件路径方法
Args:
user_identifier: 用户标识符
Returns:
str: 虚拟文件路径
"""
# 从session_id中提取用户名
username = user_identifier
if isinstance(user_identifier, str) and "_" in user_identifier and self.auth:
valid, username = self.auth.validate_session(user_identifier)
if not valid:
username = user_identifier.split("_")[0] if "_" in user_identifier else user_identifier
# 确保data目录存在
os.makedirs("data", exist_ok=True)
return f"data/todo_{username}.json"
def load_todos(self, user_identifier):
"""加载用户待办事项数据
Args:
user_identifier: 用户标识符
Returns:
list: 待办事项列表
"""
return self.adapter.load_todos(user_identifier)
def save_todos(self, user_identifier, todos):
"""保存用户待办事项
Args:
user_identifier: 用户标识符
todos: 待办事项列表
Returns:
bool: 保存成功返回True
"""
return self.adapter.save_todos(user_identifier, todos)
def create_todo(self, user_identifier, todo_data):
"""创建新待办事项
Args:
user_identifier: 用户标识符
todo_data: 待办事项数据
Returns:
tuple: (bool, dict)
"""
return self.adapter.create_todo(user_identifier, todo_data)
def update_todo(self, user_identifier, todo_id, todo_data):
"""更新待办事项
Args:
user_identifier: 用户标识符
todo_id: 待办事项ID
todo_data: 要更新的数据
Returns:
tuple: (bool, dict)
"""
return self.adapter.update_todo(user_identifier, todo_id, todo_data)
def complete_todo(self, user_identifier, todo_id):
"""标记待办事项为已完成
Args:
user_identifier: 用户标识符
todo_id: 待办事项ID
Returns:
bool: 操作成功返回True
"""
return self.adapter.complete_todo(user_identifier, todo_id)
def delete_todo(self, user_identifier, todo_id):
"""删除待办事项
Args:
user_identifier: 用户标识符
todo_id: 待办事项ID
Returns:
bool: 删除成功返回True
"""
return self.adapter.delete_todo(user_identifier, todo_id)
def get_todos_by_status(self, user_identifier, status):
"""根据状态获取待办事项
Args:
user_identifier: 用户标识符
status: 待办事项状态
Returns:
list: 待办事项列表
"""
return self.adapter.get_todos_by_status(user_identifier, status)
def get_todos_by_priority(self, user_identifier, priority):
"""根据优先级获取待办事项
Args:
user_identifier: 用户标识符
priority: 待办事项优先级
Returns:
list: 待办事项列表
"""
return self.adapter.get_todos_by_priority(user_identifier, priority)
def search_todos(self, user_identifier, keyword):
"""根据关键字搜索待办事项
Args:
user_identifier: 用户标识符
keyword: 搜索关键字
Returns:
list: 搜索结果列表
"""
return self.adapter.search_todos(user_identifier, keyword)
# 兼容性处理如果旧代码直接导入TodoManager提供相同的接口
# 这样可以确保旧代码不需要修改即可使用优化版本
__all__ = ['TodoManager']