UNPKG

skailan-contacts

Version:

Servicio de gestión de contactos para Skailan

123 lines 5.02 kB
import { AddTagToContact } from "../../app/use-cases/AddTagToContact"; import { RemoveTagFromContact } from "../../app/use-cases/RemoveTagFromContact"; import { ListTagsForContact } from "../../app/use-cases/ListTagsForContact"; import { ContactTagPrismaRepository } from "../../infra/database/prisma/ContactTagPrismaRepository"; import { ContactPrismaRepository } from "../../infra/database/prisma/ContactPrismaRepository"; import { TagPrismaRepository } from "../../infra/database/prisma/TagPrismaRepository"; export const addTagToContact = async (req, res) => { try { const { contactId, tagId } = 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 (!tagId) { return res.status(400).json({ error: "Tag ID is required." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const contactTagRepository = new ContactTagPrismaRepository(prisma); const contactRepository = new ContactPrismaRepository(prisma); const tagRepository = new TagPrismaRepository(prisma); const addTagToContactUseCase = new AddTagToContact(contactTagRepository, contactRepository, tagRepository); const newEntry = await addTagToContactUseCase.execute({ organizationId, contactId, tagId, }); res.status(201).json(newEntry.toJSON()); } catch (error) { const statusCode = error.message.includes("not found") ? 404 : error.message.includes("already has this tag") ? 409 : 500; res .status(statusCode) .json({ error: error.message || "Error adding tag to contact." }); } }; export const removeTagFromContact = async (req, res) => { try { const { contactId, tagId } = 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." }); } if (!tagId) { return res.status(400).json({ error: "Tag ID is required." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const contactTagRepository = new ContactTagPrismaRepository(prisma); const contactRepository = new ContactPrismaRepository(prisma); const removeTagFromContactUseCase = new RemoveTagFromContact(contactTagRepository, contactRepository); await removeTagFromContactUseCase.execute({ organizationId, contactId, tagId, }); res.status(204).send(); } catch (error) { const statusCode = error.message.includes("not found") ? 404 : 500; res .status(statusCode) .json({ error: error.message || "Error removing tag from contact." }); } }; export const listTagsForContact = 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 contactTagRepository = new ContactTagPrismaRepository(prisma); const contactRepository = new ContactPrismaRepository(prisma); const tagRepository = new TagPrismaRepository(prisma); const listTagsForContactUseCase = new ListTagsForContact(contactTagRepository, contactRepository, tagRepository); const tags = await listTagsForContactUseCase.execute({ organizationId, contactId, }); res.status(200).json(tags.map((tag) => tag.toJSON())); } catch (error) { const statusCode = error.message.includes("not found") ? 404 : 500; res .status(statusCode) .json({ error: error.message || "Error listing tags for contact." }); } }; //# sourceMappingURL=contactTagController.js.map