Forráskód Böngészése

file-service add ChatMessageController

reghao 5 napja
szülő
commit
4a2b3a23c4

+ 30 - 0
file/file-service/src/main/java/cn/reghao/tnb/file/app/zchat/controller/ChatMessageController.java

@@ -0,0 +1,30 @@
+package cn.reghao.tnb.file.app.zchat.controller;
+
+import cn.reghao.tnb.common.web.WebResult;
+import cn.reghao.tnb.file.app.zchat.model.dto.ChatFileMsg;
+import cn.reghao.tnb.file.app.zchat.service.ChatMessageService;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author reghao
+ * @date 2026-06-14 21:43:30
+ */
+@RestController
+@RequestMapping("/api/chat/message")
+public class ChatMessageController {
+    private final ChatMessageService chatMessageService;
+
+    public ChatMessageController(ChatMessageService chatMessageService) {
+        this.chatMessageService = chatMessageService;
+    }
+
+    @PostMapping(value = "/update", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String updateChatDialogue(@RequestBody ChatFileMsg chatFileMsg) {
+        chatMessageService.addFileMessage(chatFileMsg);
+        return WebResult.success();
+    }
+}

+ 29 - 0
file/file-service/src/main/java/cn/reghao/tnb/file/app/zchat/db/repository/MessageRepository.java

@@ -0,0 +1,29 @@
+package cn.reghao.tnb.file.app.zchat.db.repository;
+
+import cn.reghao.tnb.file.app.zchat.db.mapper.ChatFileMapper;
+import cn.reghao.tnb.file.app.zchat.db.mapper.ChatMessageMapper;
+import cn.reghao.tnb.file.app.zchat.model.po.ChatFile;
+import cn.reghao.tnb.file.app.zchat.model.po.ChatMessage;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author reghao
+ * @date 2026-06-14 22:43:30
+ */
+@Repository
+public class MessageRepository {
+    private final ChatMessageMapper chatMessageMapper;
+    private final ChatFileMapper chatFileMapper;
+
+    public MessageRepository(ChatMessageMapper chatMessageMapper, ChatFileMapper chatFileMapper) {
+        this.chatMessageMapper = chatMessageMapper;
+        this.chatFileMapper = chatFileMapper;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void saveFileMessage(ChatMessage chatMessage, ChatFile chatFile) {
+        chatMessageMapper.save(chatMessage);
+        chatFileMapper.save(chatFile);
+    }
+}

+ 19 - 0
file/file-service/src/main/java/cn/reghao/tnb/file/app/zchat/model/dto/ChatFileMsg.java

@@ -0,0 +1,19 @@
+package cn.reghao.tnb.file.app.zchat.model.dto;
+
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+/**
+ * @author reghao
+ * @date 2026-06-14 21:43:30
+ */
+@Data
+public class ChatFileMsg {
+    @NotNull
+    private Long chatId;
+    @NotEmpty
+    @Size(max = 64)
+    private String objectId;
+}

+ 54 - 0
file/file-service/src/main/java/cn/reghao/tnb/file/app/zchat/service/ChatMessageService.java

@@ -0,0 +1,54 @@
+package cn.reghao.tnb.file.app.zchat.service;
+
+import cn.reghao.jutil.jdk.string.SnowFlake;
+import cn.reghao.tnb.auth.api.iface.AccountQuery;
+import cn.reghao.tnb.common.auth.UserContext;
+import cn.reghao.tnb.file.api.dto.ObjectMeta;
+import cn.reghao.tnb.file.api.iface.OssService;
+import cn.reghao.tnb.file.app.zchat.db.mapper.ChatDialogueMapper;
+import cn.reghao.tnb.file.app.zchat.db.repository.MessageRepository;
+import cn.reghao.tnb.file.app.zchat.model.dto.ChatFileMsg;
+import cn.reghao.tnb.file.app.zchat.model.po.ChatDialogue;
+import cn.reghao.tnb.file.app.zchat.model.po.ChatFile;
+import cn.reghao.tnb.file.app.zchat.model.po.ChatMessage;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author reghao
+ * @date 2026-06-14 22:43:30
+ */
+@Slf4j
+@Service
+public class ChatMessageService {
+    @DubboReference(check = false, retries = 0, timeout = 60_000)
+    private AccountQuery accountQuery;
+    @DubboReference(check = false, retries = 0, timeout = 60_000)
+    private OssService ossService;
+
+    private final SnowFlake idGenerator;
+    private final ChatDialogueMapper chatDialogueMapper;
+    private final MessageRepository messageRepository;
+
+    public ChatMessageService(ChatDialogueMapper chatDialogueMapper, MessageRepository  messageRepository) {
+        this.idGenerator = new SnowFlake(1L, 1L);
+        this.chatDialogueMapper = chatDialogueMapper;
+        this.messageRepository = messageRepository;
+    }
+
+    public void addFileMessage(ChatFileMsg chatFileMsg) {
+        long loginUser = UserContext.getUserId();
+        long chatId = chatFileMsg.getChatId();
+        ChatDialogue chatDialogue = chatDialogueMapper.findChatDialogue1(chatId, loginUser);
+        if (chatDialogue == null) {
+            return;
+        }
+        String objectId = chatFileMsg.getObjectId();
+        ObjectMeta objectMeta = ossService.getObjectMeta(objectId);
+        long messageId = idGenerator.nextId();
+        ChatFile chatFile = new ChatFile();
+        ChatMessage chatMessage = new ChatMessage();
+        messageRepository.saveFileMessage(chatMessage, chatFile);
+    }
+}