skailan-conversations
Version:
Servicio de conversaciones y mensajería para Skailan
116 lines • 4.91 kB
JavaScript
import { AddTagToConversation } from "../../app/use-cases/AddTagToConversation";
import { RemoveTagFromConversation } from "../../app/use-cases/RemoveTagFromConversation";
import { ListTagsForConversation } from "../../app/use-cases/ListTagsForConversation";
import { ConversationTagPrismaRepository } from "../../infra/database/prisma/ConversationTagPrismaRepository";
import { ConversationPrismaRepository } from "../../infra/database/prisma/ConversationPrismaRepository";
import { TagPrismaRepository } from "../../infra/database/prisma/TagPrismaRepository";
export const addTagToConversation = async (req, res) => {
try {
const { conversationId } = req.params;
if (!conversationId) {
return res.status(400).json({ error: "Conversation ID is required." });
}
const { tagId } = 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 conversationTagRepository = new ConversationTagPrismaRepository(prisma);
const conversationRepository = new ConversationPrismaRepository(prisma);
const tagRepository = new TagPrismaRepository(prisma);
const addTagToConversationUseCase = new AddTagToConversation(conversationTagRepository, conversationRepository, tagRepository);
const newEntry = await addTagToConversationUseCase.execute({
organizationId,
conversationId: conversationId,
tagId: tagId,
});
res.status(201).json(newEntry);
}
catch (error) {
res
.status(500)
.json({ error: error.message || "Error adding tag to conversation." });
}
};
export const removeTagFromConversation = async (req, res) => {
try {
const { conversationId, tagId } = req.params;
if (!conversationId) {
return res.status(400).json({ error: "Conversation ID is required." });
}
if (!tagId) {
return res.status(400).json({ error: "Tag 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 conversationTagRepository = new ConversationTagPrismaRepository(prisma);
const conversationRepository = new ConversationPrismaRepository(prisma);
const removeTagFromConversationUseCase = new RemoveTagFromConversation(conversationTagRepository, conversationRepository);
await removeTagFromConversationUseCase.execute({
organizationId,
conversationId: conversationId,
tagId: tagId,
});
res.status(204).send();
}
catch (error) {
res
.status(500)
.json({
error: error.message || "Error removing tag from conversation.",
});
}
};
export const listTagsForConversation = async (req, res) => {
try {
const { conversationId } = req.params;
if (!conversationId) {
return res.status(400).json({ error: "Conversation 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 conversationTagRepository = new ConversationTagPrismaRepository(prisma);
const conversationRepository = new ConversationPrismaRepository(prisma);
const tagRepository = new TagPrismaRepository(prisma);
const listTagsForConversationUseCase = new ListTagsForConversation(conversationTagRepository, conversationRepository, tagRepository);
const tags = await listTagsForConversationUseCase.execute({
organizationId,
conversationId: conversationId,
});
res.status(200).json(tags);
}
catch (error) {
res
.status(500)
.json({ error: error.message || "Error listing tags for conversation." });
}
};
//# sourceMappingURL=conversationTagController.js.map