package com.emotion.controller; import com.emotion.common.PageResult; import com.emotion.common.Result; import com.emotion.dto.request.MessageCreateRequest; import com.emotion.dto.request.MessagePageRequest; import com.emotion.dto.request.MessageSearchRequest; import com.emotion.dto.request.MessageRecentRequest; import com.emotion.dto.response.MessageResponse; import com.emotion.service.MessageService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; /** * 消息控制器 * * @author emotion-museum * @date 2025-07-23 */ @RestController @RequestMapping("/message") @Slf4j public class MessageController { @Autowired private MessageService messageService; /** * 创建消息 */ @PostMapping public Result create(@Valid @RequestBody MessageCreateRequest request) { log.info("创建消息: conversationId={}", request.getConversationId()); try { MessageResponse response = messageService.createMessageFromRequest(request); log.info("创建消息成功: messageId={}", response.getId()); return Result.success(response); } catch (IllegalStateException e) { log.error("用户未认证: {}", e.getMessage()); return Result.error(401, "用户未登录或认证失败"); } catch (Exception e) { log.error("创建消息失败", e); return Result.error(500, "创建消息失败,请稍后重试"); } } /** * 根据ID获取消息 */ @GetMapping("/{id}") public Result getById(@PathVariable String id) { log.info("获取消息详情: id={}", id); try { MessageResponse response = messageService.getMessageById(id); if (response == null) { return Result.error(404, "消息不存在"); } return Result.success(response); } catch (Exception e) { log.error("获取消息详情失败", e); return Result.error(500, "获取消息详情失败,请稍后重试"); } } /** * 根据用户ID分页查询消息 */ @GetMapping("/user/page") public Result> getPageByUserId( @RequestParam(defaultValue = "1") Long current, @RequestParam(defaultValue = "20") Long size) { log.info("获取用户消息分页: current={}, size={}", current, size); // 构建请求对象 MessagePageRequest request = new MessagePageRequest(); request.setCurrent(current); request.setSize(size); PageResult pageResult = messageService.getUserMessagesWithPage(request); log.info("获取用户消息分页成功: total={}", pageResult.getTotal()); return Result.success(pageResult); } /** * 根据用户ID和关键词搜索消息 */ @PostMapping("/user/search") public Result> searchByUserId(@Valid @RequestBody MessageSearchRequest request) { log.info("搜索用户消息: keyword={}, limit={}", request.getKeyword(), request.getLimit()); try { List responses = messageService.searchUserMessages(request); log.info("搜索用户消息成功: {} 条消息", responses.size()); return Result.success(responses); } catch (IllegalStateException e) { log.error("用户未认证: {}", e.getMessage()); return Result.error(401, "用户未登录或认证失败"); } catch (Exception e) { log.error("搜索用户消息失败", e); return Result.error(500, "搜索失败,请稍后重试"); } } /** * 获取用户最近的聊天记录 */ @PostMapping("/user/recent") public Result> getRecentMessages(@Valid @RequestBody MessageRecentRequest request) { log.info("获取用户最近消息: limit={}", request.getLimit()); try { List responses = messageService.getUserRecentMessages(request); log.info("获取用户最近消息成功: {} 条消息", responses.size()); return Result.success(responses); } catch (IllegalStateException e) { log.error("用户未认证: {}", e.getMessage()); return Result.error(401, "用户未登录或认证失败"); } catch (Exception e) { log.error("获取最近消息失败", e); return Result.error(500, "获取最近消息失败,请稍后重试"); } } }