146 lines
3.9 KiB
Python
146 lines
3.9 KiB
Python
|
|
"""
|
||
|
|
消息控制器
|
||
|
|
协调消息管理的UI和业务逻辑
|
||
|
|
"""
|
||
|
|
from typing import List, Optional
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
from services.message_service import MessageService
|
||
|
|
from models.message import Message
|
||
|
|
from utils.logger import get_logger
|
||
|
|
|
||
|
|
logger = get_logger(__name__)
|
||
|
|
|
||
|
|
|
||
|
|
class MessageController:
|
||
|
|
"""消息控制器类"""
|
||
|
|
|
||
|
|
def __init__(self):
|
||
|
|
self.service = MessageService()
|
||
|
|
|
||
|
|
def create_message(self, message_data: dict) -> tuple[bool, str, Optional[int]]:
|
||
|
|
"""
|
||
|
|
创建消息
|
||
|
|
|
||
|
|
Args:
|
||
|
|
message_data: 消息数据字典
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
(是否成功, 消息, 消息ID)
|
||
|
|
"""
|
||
|
|
try:
|
||
|
|
message = Message.from_dict(message_data)
|
||
|
|
return self.service.create_message(message)
|
||
|
|
except Exception as e:
|
||
|
|
logger.error(f"Controller: Failed to create message: {e}")
|
||
|
|
return False, f"创建消息失败: {str(e)}", None
|
||
|
|
|
||
|
|
def update_message(self, message_data: dict) -> tuple[bool, str]:
|
||
|
|
"""
|
||
|
|
更新消息
|
||
|
|
|
||
|
|
Args:
|
||
|
|
message_data: 消息数据字典
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
(是否成功, 消息)
|
||
|
|
"""
|
||
|
|
try:
|
||
|
|
message = Message.from_dict(message_data)
|
||
|
|
return self.service.update_message(message)
|
||
|
|
except Exception as e:
|
||
|
|
logger.error(f"Controller: Failed to update message: {e}")
|
||
|
|
return False, f"更新消息失败: {str(e)}"
|
||
|
|
|
||
|
|
def delete_message(self, message_id: int) -> tuple[bool, str]:
|
||
|
|
"""
|
||
|
|
删除消息
|
||
|
|
|
||
|
|
Args:
|
||
|
|
message_id: 消息ID
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
(是否成功, 消息)
|
||
|
|
"""
|
||
|
|
return self.service.delete_message(message_id)
|
||
|
|
|
||
|
|
def get_message(self, message_id: int) -> Optional[Message]:
|
||
|
|
"""
|
||
|
|
获取消息
|
||
|
|
|
||
|
|
Args:
|
||
|
|
message_id: 消息ID
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
消息对象或None
|
||
|
|
"""
|
||
|
|
return self.service.get_message_by_id(message_id)
|
||
|
|
|
||
|
|
def search_messages(self, search_params: dict) -> tuple[List[Message], int]:
|
||
|
|
"""
|
||
|
|
搜索消息
|
||
|
|
|
||
|
|
Args:
|
||
|
|
search_params: 搜索参数字典
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
(消息列表, 总数量)
|
||
|
|
"""
|
||
|
|
system_name = search_params.get('system_name')
|
||
|
|
message_type = search_params.get('message_type')
|
||
|
|
version = search_params.get('version')
|
||
|
|
field_name = search_params.get('field_name')
|
||
|
|
page = search_params.get('page', 1)
|
||
|
|
page_size = search_params.get('page_size', 50)
|
||
|
|
|
||
|
|
return self.service.search_messages(
|
||
|
|
system_name, message_type, version, field_name, page, page_size
|
||
|
|
)
|
||
|
|
|
||
|
|
def get_all_messages(self, page: int = 1, page_size: int = 50) -> tuple[List[Message], int]:
|
||
|
|
"""
|
||
|
|
获取所有消息
|
||
|
|
|
||
|
|
Args:
|
||
|
|
page: 页码
|
||
|
|
page_size: 每页数量
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
(消息列表, 总数量)
|
||
|
|
"""
|
||
|
|
return self.service.get_all_messages(page, page_size)
|
||
|
|
|
||
|
|
def export_messages(self, message_ids: List[int], file_path: str) -> tuple[bool, str]:
|
||
|
|
"""
|
||
|
|
导出消息
|
||
|
|
|
||
|
|
Args:
|
||
|
|
message_ids: 消息ID列表
|
||
|
|
file_path: 文件路径
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
(是否成功, 消息)
|
||
|
|
"""
|
||
|
|
messages = []
|
||
|
|
for message_id in message_ids:
|
||
|
|
message = self.service.get_message_by_id(message_id)
|
||
|
|
if message:
|
||
|
|
messages.append(message)
|
||
|
|
|
||
|
|
if not messages:
|
||
|
|
return False, "没有可导出的消息"
|
||
|
|
|
||
|
|
return self.service.export_messages(messages, Path(file_path))
|
||
|
|
|
||
|
|
def import_messages(self, file_path: str) -> tuple[bool, str, List[Message]]:
|
||
|
|
"""
|
||
|
|
导入消息
|
||
|
|
|
||
|
|
Args:
|
||
|
|
file_path: 文件路径
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
(是否成功, 消息, 消息列表)
|
||
|
|
"""
|
||
|
|
return self.service.import_messages(Path(file_path))
|