fix: 修复chatlog会话元数据回写与覆盖问题
- 为消息追加命令补充用户、助手与会话标题元信息 - 持久化后按会话聚合触发createOrTouch并优化空值覆盖策略 - 增加ChatPersistMySqlApplyService单测覆盖会话回写链路
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
package tech.easyflow.chatlog.service;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import tech.easyflow.chatlog.domain.command.ChatAppendMessageCommand;
|
||||
import tech.easyflow.chatlog.domain.command.ChatSessionUpsertCommand;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class ChatPersistMySqlApplyServiceTest {
|
||||
|
||||
private final ChatPersistMySqlApplyService service =
|
||||
new ChatPersistMySqlApplyService(null, null, null, null);
|
||||
|
||||
@Test
|
||||
public void shouldBuildMissingSessionUpsertFromMessageMetadata() {
|
||||
ChatAppendMessageCommand first = new ChatAppendMessageCommand();
|
||||
first.setSessionId(BigInteger.valueOf(101));
|
||||
first.setTenantId(BigInteger.ONE);
|
||||
first.setDeptId(BigInteger.TEN);
|
||||
first.setUserId(BigInteger.valueOf(12));
|
||||
first.setUserAccount("admin");
|
||||
first.setAssistantId(BigInteger.valueOf(99));
|
||||
first.setAssistantCode("test-bot");
|
||||
first.setAssistantName("测试助手");
|
||||
first.setSessionTitle("你是谁");
|
||||
first.setCreatedBy(BigInteger.valueOf(12));
|
||||
first.setCreated(new Date(1_000L));
|
||||
|
||||
ChatAppendMessageCommand second = new ChatAppendMessageCommand();
|
||||
second.setSessionId(BigInteger.valueOf(101));
|
||||
second.setTenantId(BigInteger.ONE);
|
||||
second.setDeptId(BigInteger.TEN);
|
||||
second.setUserId(BigInteger.valueOf(12));
|
||||
second.setAssistantId(BigInteger.valueOf(99));
|
||||
second.setCreatedBy(BigInteger.valueOf(12));
|
||||
second.setCreated(new Date(2_000L));
|
||||
|
||||
List<ChatSessionUpsertCommand> upserts = service.buildSessionUpserts(List.of(first, second));
|
||||
|
||||
Assert.assertEquals(1, upserts.size());
|
||||
ChatSessionUpsertCommand upsert = upserts.get(0);
|
||||
Assert.assertEquals(BigInteger.valueOf(101), upsert.getSessionId());
|
||||
Assert.assertEquals("admin", upsert.getUserAccount());
|
||||
Assert.assertEquals("test-bot", upsert.getAssistantCode());
|
||||
Assert.assertEquals("测试助手", upsert.getAssistantName());
|
||||
Assert.assertEquals("你是谁", upsert.getTitle());
|
||||
Assert.assertEquals(new Date(2_000L), upsert.getOperateAt());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFallbackTitleWhenMessageMetadataMissing() {
|
||||
ChatAppendMessageCommand command = new ChatAppendMessageCommand();
|
||||
command.setSessionId(BigInteger.valueOf(202));
|
||||
command.setTenantId(BigInteger.ONE);
|
||||
command.setDeptId(BigInteger.ONE);
|
||||
command.setUserId(BigInteger.valueOf(7));
|
||||
command.setAssistantId(BigInteger.valueOf(8));
|
||||
command.setCreatedBy(BigInteger.valueOf(7));
|
||||
command.setCreated(new Date(3_000L));
|
||||
|
||||
List<ChatSessionUpsertCommand> upserts = service.buildSessionUpserts(List.of(command));
|
||||
|
||||
Assert.assertEquals(1, upserts.size());
|
||||
ChatSessionUpsertCommand upsert = upserts.get(0);
|
||||
Assert.assertEquals("", upsert.getUserAccount());
|
||||
Assert.assertEquals("会话-202", upsert.getTitle());
|
||||
Assert.assertEquals(BigInteger.valueOf(7), upsert.getOperatorId());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user