UNPKG

skailan-crm

Version:

Servicio de CRM y gestión de ventas para Skailan

115 lines 5.01 kB
import { AddCompetitorToOpportunity } from "../../app/use-cases/AddCompetitorToOpportunity"; import { RemoveCompetitorFromOpportunity } from "../../app/use-cases/RemoveCompetitorFromOpportunity"; import { ListCompetitorsForOpportunity } from "../../app/use-cases/ListCompetitorsForOpportunity"; import { OpportunityCompetitorPrismaRepository } from "../../infra/database/prisma/OpportunityCompetitorPrismaRepository"; import { OpportunityPrismaRepository } from "../../infra/database/prisma/OpportunityPrismaRepository"; import { CompetitorPrismaRepository } from "../../infra/database/prisma/CompetitorPrismaRepository"; export const addCompetitorToOpportunity = async (req, res) => { try { const { opportunityId, competitorId } = 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 opportunityCompetitorRepository = new OpportunityCompetitorPrismaRepository(prisma); const opportunityRepository = new OpportunityPrismaRepository(prisma); const competitorRepository = new CompetitorPrismaRepository(prisma); const addCompetitorToOpportunityUseCase = new AddCompetitorToOpportunity(opportunityCompetitorRepository, opportunityRepository, competitorRepository); const newOpportunityCompetitor = await addCompetitorToOpportunityUseCase.execute({ opportunityId, competitorId, organizationId, }); res.status(201).json(newOpportunityCompetitor); } catch (error) { res .status(500) .json({ error: error.message || "Error adding competitor to opportunity.", }); } }; export const removeCompetitorFromOpportunity = async (req, res) => { try { const { opportunityId, competitorId } = req.params; const organizationId = req.organization?.id; if (!organizationId) { return res .status(400) .json({ error: "Organization ID not found in request." }); } if (!opportunityId || !competitorId) { return res .status(400) .json({ error: "Opportunity ID and Competitor ID are required." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const opportunityCompetitorRepository = new OpportunityCompetitorPrismaRepository(prisma); const opportunityRepository = new OpportunityPrismaRepository(prisma); const removeCompetitorFromOpportunityUseCase = new RemoveCompetitorFromOpportunity(opportunityCompetitorRepository, opportunityRepository); await removeCompetitorFromOpportunityUseCase.execute({ organizationId, opportunityId, competitorId, }); res.status(204).send(); } catch (error) { res .status(500) .json({ error: error.message || "Error removing competitor from opportunity.", }); } }; export const listCompetitorsForOpportunity = async (req, res) => { try { const { opportunityId } = req.params; const organizationId = req.organization?.id; if (!organizationId) { return res .status(400) .json({ error: "Organization ID not found in request." }); } if (!opportunityId) { return res.status(400).json({ error: "Opportunity ID is required." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const opportunityCompetitorRepository = new OpportunityCompetitorPrismaRepository(prisma); const opportunityRepository = new OpportunityPrismaRepository(prisma); const competitorRepository = new CompetitorPrismaRepository(prisma); const listCompetitorsForOpportunityUseCase = new ListCompetitorsForOpportunity(opportunityCompetitorRepository, opportunityRepository, competitorRepository); const competitors = await listCompetitorsForOpportunityUseCase.execute({ organizationId, opportunityId, }); res.status(200).json(competitors); } catch (error) { res .status(500) .json({ error: error.message || "Error listing competitors for opportunity.", }); } }; //# sourceMappingURL=opportunityCompetitorController.js.map