UNPKG

skailan-conversations

Version:

Servicio de conversaciones y mensajería para Skailan

184 lines 6.92 kB
import { StartConversation } from "../../app/use-cases/StartConversation"; import { GetConversationById } from "../../app/use-cases/GetConversationById"; import { ListConversations } from "../../app/use-cases/ListConversations"; import { UpdateConversation } from "../../app/use-cases/UpdateConversation"; import { DeleteConversation } from "../../app/use-cases/DeleteConversation"; import { ConversationPrismaRepository } from "../../infra/database/prisma/ConversationPrismaRepository"; import { ChannelPrismaRepository } from "../../infra/database/prisma/ChannelPrismaRepository"; export const startConversation = async (req, res) => { try { const { channelId, contactExternalId, contactName, contactEmail, contactPhone, } = req.body; const organizationId = req.organization?.id; if (!organizationId) { return res .status(400) .json({ error: "Organization ID not found in request." }); } if (!channelId) { return res.status(400).json({ error: "Channel ID is required." }); } if (!contactExternalId) { return res .status(400) .json({ error: "Contact external ID is required." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const conversationRepository = new ConversationPrismaRepository(prisma); const channelRepository = new ChannelPrismaRepository(prisma); const startConversationUseCase = new StartConversation(conversationRepository, channelRepository); const conversation = await startConversationUseCase.execute({ organizationId, channelId, contactExternalId, contactName, contactEmail, contactPhone, }); res.status(201).json(conversation); } catch (error) { res .status(500) .json({ error: error.message || "Error starting conversation." }); } }; export const getConversationById = async (req, res) => { try { const { id } = req.params; if (!id) { return res.status(400).json({ error: "ID is required." }); } const organizationId = req.organization?.id; if (!organizationId) { return res .status(400) .json({ error: "Organization ID not found in request." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const conversationRepository = new ConversationPrismaRepository(prisma); const getConversationByIdUseCase = new GetConversationById(conversationRepository); const conversation = await getConversationByIdUseCase.execute({ id: id, organizationId, }); if (!conversation) { return res.status(404).json({ error: "Conversation not found." }); } res.status(200).json(conversation); } catch (error) { res .status(500) .json({ error: error.message || "Error retrieving conversation." }); } }; export const listConversations = async (req, res) => { try { const organizationId = req.organization?.id; const { channelId, contactId, status, assignedToUserId } = req.query; if (!organizationId) { return res .status(400) .json({ error: "Organization ID not found in request." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const conversationRepository = new ConversationPrismaRepository(prisma); const listConversationsUseCase = new ListConversations(conversationRepository); const conversations = await listConversationsUseCase.execute({ organizationId, channelId, contactId, status, assignedToUserId, }); res.status(200).json(conversations); } catch (error) { res .status(500) .json({ error: error.message || "Error listing conversations." }); } }; export const updateConversation = async (req, res) => { try { const { id } = req.params; if (!id) { return res.status(400).json({ error: "ID is required." }); } const { status, assignedToUserId } = req.body; const organizationId = req.organization?.id; if (!organizationId) { return res .status(400) .json({ error: "Organization ID not found in request." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const conversationRepository = new ConversationPrismaRepository(prisma); const updateConversationUseCase = new UpdateConversation(conversationRepository); const updatedConversation = await updateConversationUseCase.execute({ id: id, organizationId, status, assignedToUserId, }); res.status(200).json(updatedConversation); } catch (error) { res .status(500) .json({ error: error.message || "Error updating conversation." }); } }; export const deleteConversation = async (req, res) => { try { const { id } = req.params; if (!id) { return res.status(400).json({ error: "ID is required." }); } const organizationId = req.organization?.id; if (!organizationId) { return res .status(400) .json({ error: "Organization ID not found in request." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const conversationRepository = new ConversationPrismaRepository(prisma); const deleteConversationUseCase = new DeleteConversation(conversationRepository); await deleteConversationUseCase.execute({ id: id, organizationId, }); res.status(204).send(); } catch (error) { res .status(500) .json({ error: error.message || "Error deleting conversation." }); } }; //# sourceMappingURL=conversationController.js.map