SIT/controllers/message_controller.py

146 lines
3.9 KiB
Python
Raw Normal View History

2026-01-29 09:22:54 +00:00
"""
消息控制器
协调消息管理的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))