Fixed message deletion error and layout changes for the message input box.

This commit is contained in:
2026-09-30 09:19:36 +03:30
parent 58e89246d9
commit 298b3316b4
7 changed files with 176 additions and 76 deletions
@@ -74,6 +74,7 @@ export class ConversationsController {
user.role,
dto.externalRoomId,
dto.messageIds,
dto.forEveryone !== false,
);
}
@@ -500,7 +500,8 @@ export class ConversationsService {
role: string,
externalRoomId: string,
messageIds: string[],
): Promise<{ messageIds: string[] }> {
forEveryone = true,
): Promise<{ messageIds: string[]; scope: 'all' | 'self' }> {
await this.loadAccess(userId, organizationId, role);
const roomId = externalRoomId.trim();
if (!roomId) throw new BadRequestException('شناسه اتاق خالی است');
@@ -513,17 +514,19 @@ export class ConversationsService {
].slice(0, 100);
if (!ids.length) throw new BadRequestException('شناسه پیام خالی است');
const scope = forEveryone ? 'all' : 'self';
await this.prisma.conversationHiddenMessage.createMany({
data: ids.map((messageId) => ({
organizationId,
externalRoomId: roomId,
messageId,
hiddenByUserId: userId,
scope,
})),
skipDuplicates: true,
});
return { messageIds: ids };
return { messageIds: ids, scope };
}
async listHiddenMessageIds(
@@ -537,10 +540,14 @@ export class ConversationsService {
if (!roomId) throw new BadRequestException('شناسه اتاق خالی است');
const rows = await this.prisma.conversationHiddenMessage.findMany({
where: { organizationId, externalRoomId: roomId },
where: {
organizationId,
externalRoomId: roomId,
OR: [{ scope: 'all' }, { scope: 'self', hiddenByUserId: userId }],
},
select: { messageId: true },
take: 5000,
});
return { messageIds: rows.map((r) => r.messageId) };
return { messageIds: [...new Set(rows.map((r) => r.messageId))] };
}
}
+6
View File
@@ -1,5 +1,6 @@
import {
IsArray,
IsBoolean,
IsOptional,
IsString,
MaxLength,
@@ -61,4 +62,9 @@ export class HideConversationMessagesDto {
@ArrayMaxSize(100)
@IsString({ each: true })
messageIds!: string[];
/** true = حذف برای همه؛ false = فقط برای کاربر جاری */
@IsOptional()
@IsBoolean()
forEveryone?: boolean;
}