Skip to content

Commit edc076f

Browse files
committed
feat: add the multi converse strategy, create a multi converse without reusing past converse
1 parent f6c2f6f commit edc076f

File tree

4 files changed

+28
-8
lines changed

4 files changed

+28
-8
lines changed

server/locales/en-US/translation.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
"kbb1ef795": "Verification failed, OTP has expired",
4949
"kbb96754b": "Group OP not allowed to be kicked out",
5050
"kbe05914c": "{{user}} invited {{others}} to join the session",
51+
"kbf66da60": "The number of members is abnormal, and the converse cannot be created",
5152
"kc1e668f5": "Not allowed to kick yourself out",
5253
"kc4b77045": "{{nickname}} join this group with invite code from {{creator}}",
5354
"kcb07c88f": "Personal message subscription created, subscribeId: {{subscribeId}}",

server/locales/zh-CN/translation.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
"kbb1ef795": "校验失败, OTP已过期",
4949
"kbb96754b": "不允许踢出群组OP",
5050
"kbe05914c": "{{user}} 邀请 {{others}} 加入会话",
51+
"kbf66da60": "成员数异常,无法创建会话",
5152
"kc1e668f5": "不允许踢出自己",
5253
"kc4b77045": "{{nickname}} 通过 {{creator}} 的邀请码加入群组",
5354
"kcb07c88f": "个人消息订阅已创建, subscribeId: {{subscribeId}}",

server/models/chat/converse.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { User } from '../user/user';
1616

1717
const converseType = [
1818
'DM', // 私信
19+
'Multi', // 多人会话
1920
'Group', // 群组
2021
] as const;
2122

@@ -39,7 +40,7 @@ export class Converse extends TimeStamps implements Base {
3940
enum: converseType,
4041
type: () => String,
4142
})
42-
type!: typeof converseType[number];
43+
type!: (typeof converseType)[number];
4344

4445
/**
4546
* 会话参与者
@@ -58,6 +59,7 @@ export class Converse extends TimeStamps implements Base {
5859
const converse = await this.findOne({
5960
members: {
6061
$all: [...members],
62+
$size: members.length,
6163
},
6264
});
6365

server/services/core/chat/converse.service.ts

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,29 @@ class ConverseService extends TcService {
5757

5858
const participantList = _.uniq([userId, ...memberIds]);
5959

60-
let converse = await this.adapter.model.findConverseWithMembers(
61-
participantList
62-
);
63-
if (converse === null) {
64-
// 创建新的会话
65-
converse = await this.adapter.insert({
66-
type: 'DM',
60+
if (participantList.length < 2) {
61+
throw new Error(t('成员数异常,无法创建会话'));
62+
}
63+
64+
let converse: ConverseDocument;
65+
if (participantList.length === 2) {
66+
// 私信会话
67+
converse = await this.adapter.model.findConverseWithMembers(
68+
participantList
69+
);
70+
if (converse === null) {
71+
// 创建新的会话
72+
converse = await this.adapter.model.create({
73+
type: 'DM',
74+
members: participantList.map((id) => new Types.ObjectId(id)),
75+
});
76+
}
77+
}
78+
79+
if (participantList.length > 2) {
80+
// 多人会话
81+
converse = await this.adapter.model.create({
82+
type: 'Multi',
6783
members: participantList.map((id) => new Types.ObjectId(id)),
6884
});
6985
}

0 commit comments

Comments
 (0)