Edit typing... indicator, loading older message.

This commit is contained in:
2026-09-30 12:20:49 +03:30
parent e1d456ad11
commit a3ed6187e9
3 changed files with 206 additions and 27 deletions
@@ -562,7 +562,7 @@ export class ConversationsService {
let preview = lastMsg
? String(lastMsg.content ?? lastMsg.text ?? lastMsg.body ?? '').trim()
: '';
if (/^__MENTO_HIDE__:/i.test(preview) || /MENTO_DEL/i.test(preview) || /^__MENTO_PIN__:/i.test(preview) || /^__MENTO_UNPIN__$/i.test(preview)) {
if (/^__MENTO_HIDE__:/i.test(preview) || /MENTO_DEL/i.test(preview) || /^__MENTO_PIN__:/i.test(preview) || /^__MENTO_UNPIN__$/i.test(preview) || /^__MENTO_TYPING__:/i.test(preview)) {
preview = '';
}
if (lastType === 'image' || lastType === 'photo' || lastType === 'img') {
@@ -697,16 +697,54 @@ export class ConversationsService {
});
if (!room) throw new NotFoundException('گفتگو پیدا نشد');
let rows = await this.prisma.conversationRoomMember.findMany({
where: { organizationId, externalRoomId: roomId },
});
// همیشه سازنده + کاربر فعلی را در لیست عضو داشته باش (اتاق‌های قدیمی بدون ردیف)
const seedIds: Array<{ userId: string; role: string }> = [];
if (room.createdByUserId) {
seedIds.push({ userId: room.createdByUserId, role: 'admin' });
}
if (!seedIds.some((s) => s.userId === userId)) {
const orgAdmin = role === 'owner' || role === 'admin';
seedIds.push({
userId,
role: orgAdmin || room.createdByUserId === userId ? 'admin' : 'member',
});
}
if (seedIds.length) {
try {
await this.prisma.conversationRoomMember.createMany({
data: seedIds.map((s) => ({
organizationId,
externalRoomId: roomId,
userId: s.userId,
role: s.role,
})),
skipDuplicates: true,
});
} catch (e) {
const code = (e as { code?: string })?.code;
if (code === 'P2021' || code === 'P2022') {
throw new BadRequestException(
'جدول اعضای گفتگو هنوز migrate نشده است. از apps/api دستور prisma migrate deploy را اجرا کنید.',
);
}
throw e;
}
}
// اتاق‌های قدیمی بدون ردیف عضو — حداقل سازنده را ادمین نشان بده
if (!rows.length && room.createdByUserId) {
await this.seedRoomMembers(organizationId, roomId, room.createdByUserId, []);
let rows: Array<{ userId: string; role: string }> = [];
try {
rows = await this.prisma.conversationRoomMember.findMany({
where: { organizationId, externalRoomId: roomId },
select: { userId: true, role: true },
});
} catch (e) {
const code = (e as { code?: string })?.code;
if (code === 'P2021' || code === 'P2022') {
throw new BadRequestException(
'جدول اعضای گفتگو هنوز migrate نشده است. از apps/api دستور prisma migrate deploy را اجرا کنید.',
);
}
throw e;
}
const userIds = rows.map((r) => r.userId);