UNPKG

skailan-conversations

Version:

Servicio de conversaciones y mensajería para Skailan

152 lines 7.69 kB
import { Message } from "../../../domain/entities/Message"; export class MessagePrismaRepository { prisma; constructor(prisma) { this.prisma = prisma; } async findById(id, organizationId) { const messageData = await this.prisma.message.findUnique({ where: { id }, }); if (!messageData) { return null; } return new Message(messageData.id, messageData.organizationId, messageData.conversationId, messageData.senderType, messageData.senderId, messageData.type, messageData.content, messageData.mediaUrl, messageData.externalMessageId, messageData.status, messageData.timestamp, messageData.createdAt); } async findAll(organizationId, conversationId) { const where = { organizationId }; if (conversationId) { where.conversationId = conversationId; } const messagesData = await this.prisma.message.findMany({ where, orderBy: { timestamp: "desc" }, }); return messagesData.map((messageData) => new Message(messageData.id, messageData.organizationId, messageData.conversationId, messageData.senderType, messageData.senderId, messageData.type, messageData.content, messageData.mediaUrl, messageData.externalMessageId, messageData.status, messageData.timestamp, messageData.createdAt)); } async findByConversationId(conversationId, organizationId, limit, offset) { const messagesData = await this.prisma.message.findMany({ where: { conversationId, organizationId }, orderBy: { timestamp: "desc" }, take: limit, skip: offset, }); return messagesData.map((messageData) => new Message(messageData.id, messageData.organizationId, messageData.conversationId, messageData.senderType, messageData.senderId, messageData.type, messageData.content, messageData.mediaUrl, messageData.externalMessageId, messageData.status, messageData.timestamp, messageData.createdAt)); } async findByExternalMessageId(externalMessageId, organizationId) { const messagesData = await this.prisma.message.findMany({ where: { externalMessageId, organizationId }, }); return messagesData.map((messageData) => new Message(messageData.id, messageData.organizationId, messageData.conversationId, messageData.senderType, messageData.senderId, messageData.type, messageData.content, messageData.mediaUrl, messageData.externalMessageId, messageData.status, messageData.timestamp, messageData.createdAt)); } async countByConversationId(conversationId, organizationId) { return await this.prisma.message.count({ where: { conversationId, organizationId }, }); } async countByConversationIdAndStatus(conversationId, organizationId, status) { return await this.prisma.message.count({ where: { conversationId, organizationId, status }, }); } async countByConversationIdAndDate(conversationId, organizationId, date) { const startOfDay = new Date(date); startOfDay.setHours(0, 0, 0, 0); const endOfDay = new Date(date); endOfDay.setHours(23, 59, 59, 999); return await this.prisma.message.count({ where: { conversationId, organizationId, timestamp: { gte: startOfDay, lte: endOfDay, }, }, }); } async countUnreadByConversationId(conversationId, organizationId) { return await this.prisma.message.count({ where: { conversationId, organizationId, status: { not: "read" }, }, }); } async countBySenderId(senderId, organizationId) { return await this.prisma.message.count({ where: { senderId, organizationId }, }); } async create(messageData) { const savedMessage = await this.prisma.message.create({ data: messageData, }); return new Message(savedMessage.id, savedMessage.organizationId, savedMessage.conversationId, savedMessage.senderType, savedMessage.senderId, savedMessage.type, savedMessage.content, savedMessage.mediaUrl, savedMessage.externalMessageId, savedMessage.status, savedMessage.timestamp, savedMessage.createdAt); } async update(id, updateData) { const updatedMessage = await this.prisma.message.update({ where: { id }, data: updateData, }); return new Message(updatedMessage.id, updatedMessage.organizationId, updatedMessage.conversationId, updatedMessage.senderType, updatedMessage.senderId, updatedMessage.type, updatedMessage.content, updatedMessage.mediaUrl, updatedMessage.externalMessageId, updatedMessage.status, updatedMessage.timestamp, updatedMessage.createdAt); } async save(message) { const savedMessage = await this.prisma.message.create({ data: { id: message.id, organizationId: message.organizationId, conversationId: message.conversationId, senderType: message.senderType, senderId: message.senderId, type: message.type, content: message.content, mediaUrl: message.mediaUrl, externalMessageId: message.externalMessageId, status: message.status, timestamp: message.timestamp, createdAt: message.createdAt, }, }); return new Message(savedMessage.id, savedMessage.organizationId, savedMessage.conversationId, savedMessage.senderType, savedMessage.senderId, savedMessage.type, savedMessage.content, savedMessage.mediaUrl, savedMessage.externalMessageId, savedMessage.status, savedMessage.timestamp, savedMessage.createdAt); } async saveOrUpdate(message) { const savedMessage = await this.prisma.message.upsert({ where: { id: message.id }, update: { organizationId: message.organizationId, conversationId: message.conversationId, senderType: message.senderType, senderId: message.senderId, type: message.type, content: message.content, mediaUrl: message.mediaUrl, externalMessageId: message.externalMessageId, status: message.status, timestamp: message.timestamp, }, create: { id: message.id, organizationId: message.organizationId, conversationId: message.conversationId, senderType: message.senderType, senderId: message.senderId, type: message.type, content: message.content, mediaUrl: message.mediaUrl, externalMessageId: message.externalMessageId, status: message.status, timestamp: message.timestamp, createdAt: message.createdAt, }, }); return new Message(savedMessage.id, savedMessage.organizationId, savedMessage.conversationId, savedMessage.senderType, savedMessage.senderId, savedMessage.type, savedMessage.content, savedMessage.mediaUrl, savedMessage.externalMessageId, savedMessage.status, savedMessage.timestamp, savedMessage.createdAt); } async delete(id, organizationId) { await this.prisma.message.delete({ where: { id }, }); } } //# sourceMappingURL=MessagePrismaRepository.js.map