skailan-contacts
Version:
Servicio de gestión de contactos para Skailan
119 lines • 4.99 kB
JavaScript
import { AddCommunicationPlatform } from "../../app/use-cases/AddCommunicationPlatform";
import { ContactPrismaRepository } from "../../infra/database/prisma/ContactPrismaRepository";
import { ContactCommunicationPlatformPrismaRepository } from "../../infra/database/prisma/ContactCommunicationPlatformPrismaRepository";
export const addCommunicationPlatform = async (req, res) => {
try {
const { contactId } = req.params;
const { platform, platformUserId, platformUsername, isPrimary, config } = req.body;
const organizationId = req.organization?.id;
if (!organizationId) {
return res
.status(400)
.json({ error: "Organization ID not found in request." });
}
if (!contactId) {
return res.status(400).json({ error: "Contact ID is required." });
}
const prisma = req.tenantPrisma;
if (!prisma) {
return res
.status(500)
.json({ error: "Prisma client not initialized for tenant." });
}
const contactRepository = new ContactPrismaRepository(prisma);
const platformRepository = new ContactCommunicationPlatformPrismaRepository(prisma);
const addCommunicationPlatformUseCase = new AddCommunicationPlatform(contactRepository, platformRepository);
const updatedContact = await addCommunicationPlatformUseCase.execute({
contactId,
organizationId,
platform,
platformUserId,
platformUsername,
isPrimary,
config,
});
res.status(200).json(updatedContact.toJSON());
}
catch (error) {
const statusCode = error.message.includes("not found")
? 404
: error.message.includes("already exists")
? 409
: 500;
res
.status(statusCode)
.json({ error: error.message || "Error adding communication platform." });
}
};
export const getContactPlatforms = async (req, res) => {
try {
const { contactId } = req.params;
const organizationId = req.organization?.id;
if (!organizationId) {
return res
.status(400)
.json({ error: "Organization ID not found in request." });
}
if (!contactId) {
return res.status(400).json({ error: "Contact ID is required." });
}
const prisma = req.tenantPrisma;
if (!prisma) {
return res
.status(500)
.json({ error: "Prisma client not initialized for tenant." });
}
const platformRepository = new ContactCommunicationPlatformPrismaRepository(prisma);
const platforms = await platformRepository.findActiveByContactId(contactId, organizationId);
res.status(200).json(platforms.map((platform) => platform.toJSON()));
}
catch (error) {
res
.status(500)
.json({ error: error.message || "Error getting contact platforms." });
}
};
export const sendMessageToContact = async (req, res) => {
try {
const { contactId } = req.params;
const { platform, message } = req.body;
const organizationId = req.organization?.id;
if (!organizationId) {
return res
.status(400)
.json({ error: "Organization ID not found in request." });
}
if (!contactId) {
return res.status(400).json({ error: "Contact ID is required." });
}
if (!platform || !message) {
return res
.status(400)
.json({ error: "Platform and message are required." });
}
const prisma = req.tenantPrisma;
if (!prisma) {
return res
.status(500)
.json({ error: "Prisma client not initialized for tenant." });
}
const contactRepository = new ContactPrismaRepository(prisma);
const platformRepository = new ContactCommunicationPlatformPrismaRepository(prisma);
// Importar el servicio de integración
const { ConversationIntegrationServiceImpl } = await import("../../domain/services/ConversationIntegrationService");
const conversationIntegrationService = new ConversationIntegrationServiceImpl(contactRepository, platformRepository);
const result = await conversationIntegrationService.sendMessageToContact(contactId, platform, message, organizationId);
res.status(200).json(result);
}
catch (error) {
const statusCode = error.message.includes("not found")
? 404
: error.message.includes("not active")
? 400
: 500;
res
.status(statusCode)
.json({ error: error.message || "Error sending message to contact." });
}
};
//# sourceMappingURL=contactPlatformController.js.map