skailan-crm
Version:
Servicio de CRM y gestión de ventas para Skailan
115 lines • 5.01 kB
JavaScript
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