skailan-contacts
Version:
Servicio de gestión de contactos para Skailan
123 lines • 5.02 kB
JavaScript
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