UNPKG

skailan-contacts

Version:

Servicio de gestión de contactos para Skailan

175 lines 7.13 kB
import { CreateContact } from '../../app/use-cases/CreateContact'; import { GetContactById } from '../../app/use-cases/GetContactById'; import { ListContacts } from '../../app/use-cases/ListContacts'; import { UpdateContact } from '../../app/use-cases/UpdateContact'; import { DeleteContact } from '../../app/use-cases/DeleteContact'; import { ContactPrismaRepository } from '../../infra/database/prisma/ContactPrismaRepository'; export const createContact = async (req, res) => { try { const { externalId, name, email, phone, profilePictureUrl, metadata } = req.body; const organizationId = req.organization?.id; if (!organizationId) { return res.status(400).json({ error: 'Organization ID not found in request.' }); } if (!externalId) { return res.status(400).json({ error: 'External 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 createContactUseCase = new CreateContact(contactRepository); const newContact = await createContactUseCase.execute({ organizationId, externalId, name, email, phone, profilePictureUrl, metadata, }); res.status(201).json(newContact.toJSON()); } catch (error) { const statusCode = error.message.includes('already exists') ? 409 : 500; res.status(statusCode).json({ error: error.message || 'Error creating contact.' }); } }; export const getContactById = async (req, res) => { try { const { id } = req.params; const organizationId = req.organization?.id; if (!organizationId) { return res.status(400).json({ error: 'Organization ID not found in request.' }); } if (!id) { 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 getContactByIdUseCase = new GetContactById(contactRepository); const contact = await getContactByIdUseCase.execute({ id, organizationId, }); if (!contact) { return res.status(404).json({ error: 'Contact not found.' }); } res.status(200).json(contact.toJSON()); } catch (error) { res.status(500).json({ error: error.message || 'Error retrieving contact.' }); } }; export const listContacts = async (req, res) => { try { 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 contactRepository = new ContactPrismaRepository(prisma); const listContactsUseCase = new ListContacts(contactRepository); const contacts = await listContactsUseCase.execute({ organizationId, }); res.status(200).json(contacts.map(contact => contact.toJSON())); } catch (error) { res.status(500).json({ error: error.message || 'Error listing contacts.' }); } }; export const updateContact = async (req, res) => { try { const { id } = req.params; const { name, email, phone, profilePictureUrl, metadata } = req.body; const organizationId = req.organization?.id; if (!organizationId) { return res.status(400).json({ error: 'Organization ID not found in request.' }); } if (!id) { 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 updateContactUseCase = new UpdateContact(contactRepository); const updatedContact = await updateContactUseCase.execute({ id, organizationId, name, email, phone, profilePictureUrl, metadata, }); 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 updating contact.' }); } }; export const deleteContact = async (req, res) => { try { const { id } = req.params; const organizationId = req.organization?.id; if (!organizationId) { return res.status(400).json({ error: 'Organization ID not found in request.' }); } if (!id) { 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 deleteContactUseCase = new DeleteContact(contactRepository); await deleteContactUseCase.execute({ id, organizationId, }); res.status(204).send(); } catch (error) { const statusCode = error.message.includes('not found') ? 404 : 500; res.status(statusCode).json({ error: error.message || 'Error deleting contact.' }); } }; export const searchContactByEmail = async (req, res) => { try { const { email } = req.query; const organizationId = req.organization?.id; if (!organizationId) { return res.status(400).json({ error: 'Organization ID not found in request.' }); } if (!email || typeof email !== 'string') { return res.status(400).json({ error: 'Email parameter 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 contact = await contactRepository.findByEmail(email, organizationId); if (!contact) { return res.status(404).json({ error: 'Contact not found.' }); } res.status(200).json(contact.toJSON()); } catch (error) { res.status(500).json({ error: error.message || 'Error searching contact.' }); } }; //# sourceMappingURL=contactController.js.map