chat-app/backend/dist/services/messageService.js
Gal Podlipnik 365aea2997
Some checks failed
Build and Deploy / build-and-deploy (push) Failing after 58s
cicd 3
2025-06-12 16:22:33 +02:00

192 lines
6.0 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MessageService = void 0;
const database_js_1 = require("../config/database.js");
class MessageService {
static async sendMessage(userId, data) {
try {
const message = await database_js_1.prisma.message.create({
data: {
content: data.content,
image: data.image,
userId,
roomId: data.roomId,
},
include: {
user: {
select: {
id: true,
username: true,
avatar: true,
},
},
reactions: {
include: {
user: {
select: {
id: true,
username: true,
},
},
},
},
},
});
return {
success: true,
data: message,
};
}
catch (error) {
console.error("Send message error:", error);
return {
success: false,
error: "Failed to send message",
};
}
}
static async reactToMessage(userId, data) {
try {
const existingReaction = await database_js_1.prisma.messageReaction.findUnique({
where: {
userId_messageId_type: {
userId,
messageId: data.messageId,
type: data.type,
},
},
});
if (existingReaction) {
await database_js_1.prisma.messageReaction.delete({
where: {
id: existingReaction.id,
},
});
}
else {
await database_js_1.prisma.messageReaction.create({
data: {
userId,
messageId: data.messageId,
type: data.type,
},
});
}
const message = await database_js_1.prisma.message.findUnique({
where: {
id: data.messageId,
},
include: {
reactions: {
include: {
user: {
select: {
id: true,
username: true,
},
},
},
},
},
});
return {
success: true,
data: {
messageId: data.messageId,
reactions: message?.reactions ?? [],
},
};
}
catch (error) {
console.error("React to message error:", error);
return {
success: false,
error: "Failed to react to message",
};
}
}
static async markMessagesAsSeen(userId, messageIds) {
try {
const seenEntries = messageIds.map((messageId) => ({
userId,
messageId,
}));
await database_js_1.prisma.messageSeen.createMany({
data: seenEntries,
skipDuplicates: true,
});
const messages = await database_js_1.prisma.message.findMany({
where: {
id: { in: messageIds },
},
include: {
seenBy: {
include: {
user: {
select: {
id: true,
username: true,
},
},
},
},
},
});
const seenData = messages.map((message) => ({
messageId: message.id,
seenBy: message.seenBy.map((seen) => seen.userId),
}));
return {
success: true,
data: seenData,
};
}
catch (error) {
console.error("Mark messages as seen error:", error);
return {
success: false,
error: "Failed to mark messages as seen",
};
}
}
static async deleteMessage(userId, messageId, roomId) {
try {
const message = await database_js_1.prisma.message.findFirst({
where: {
id: messageId,
userId: userId,
roomId: roomId,
},
});
if (!message) {
return {
success: false,
error: "Message not found or you don't have permission to delete it",
status: 403,
};
}
await database_js_1.prisma.message.delete({
where: {
id: messageId,
},
});
return {
success: true,
data: {
messageId,
roomId,
},
};
}
catch (error) {
console.error("Delete message error:", error);
return {
success: false,
error: "Failed to delete message",
status: 500,
};
}
}
}
exports.MessageService = MessageService;