skailan-crm
Version:
Servicio de CRM y gestión de ventas para Skailan
166 lines • 6.01 kB
JavaScript
import { CreateCompetitor } from "../../app/use-cases/CreateCompetitor";
import { GetCompetitorById } from "../../app/use-cases/GetCompetitorById";
import { ListCompetitors } from "../../app/use-cases/ListCompetitors";
import { UpdateCompetitor } from "../../app/use-cases/UpdateCompetitor";
import { DeleteCompetitor } from "../../app/use-cases/DeleteCompetitor";
import { CompetitorPrismaRepository } from "../../infra/database/prisma/CompetitorPrismaRepository";
export const createCompetitor = async (req, res) => {
try {
const { name, notes } = 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 competitorRepository = new CompetitorPrismaRepository(prisma);
const createCompetitorUseCase = new CreateCompetitor(competitorRepository);
const newCompetitor = await createCompetitorUseCase.execute({
organizationId,
name,
notes,
});
res.status(201).json(newCompetitor);
}
catch (error) {
res
.status(500)
.json({ error: error.message || "Error creating competitor." });
}
};
export const getCompetitorById = async (req, res) => {
try {
const { id } = req.params;
const organizationId = req.organization?.id;
if (!organizationId) {
return res
.status(400)
.json({ error: "Organization ID not found in request." });
}
if (!id) {
return res.status(400).json({ error: "Competitor ID is required." });
}
const prisma = req.tenantPrisma;
if (!prisma) {
return res
.status(500)
.json({ error: "Prisma client not initialized for tenant." });
}
const competitorRepository = new CompetitorPrismaRepository(prisma);
const getCompetitorByIdUseCase = new GetCompetitorById(competitorRepository);
const competitor = await getCompetitorByIdUseCase.execute({
id,
organizationId,
});
if (!competitor) {
return res.status(404).json({ error: "Competitor not found." });
}
res.status(200).json(competitor);
}
catch (error) {
res
.status(500)
.json({ error: error.message || "Error retrieving competitor." });
}
};
export const listCompetitors = async (req, res) => {
try {
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 competitorRepository = new CompetitorPrismaRepository(prisma);
const listCompetitorsUseCase = new ListCompetitors(competitorRepository);
const competitors = await listCompetitorsUseCase.execute({
organizationId,
});
res.status(200).json(competitors);
}
catch (error) {
res
.status(500)
.json({ error: error.message || "Error listing competitors." });
}
};
export const updateCompetitor = async (req, res) => {
try {
const { id } = req.params;
const { name, notes } = req.body;
const organizationId = req.organization?.id;
if (!organizationId) {
return res
.status(400)
.json({ error: "Organization ID not found in request." });
}
if (!id) {
return res.status(400).json({ error: "Competitor ID is required." });
}
const prisma = req.tenantPrisma;
if (!prisma) {
return res
.status(500)
.json({ error: "Prisma client not initialized for tenant." });
}
const competitorRepository = new CompetitorPrismaRepository(prisma);
const updateCompetitorUseCase = new UpdateCompetitor(competitorRepository);
const updatedCompetitor = await updateCompetitorUseCase.execute({
id,
organizationId,
name,
notes,
});
res.status(200).json(updatedCompetitor);
}
catch (error) {
res
.status(500)
.json({ error: error.message || "Error updating competitor." });
}
};
export const deleteCompetitor = async (req, res) => {
try {
const { id } = req.params;
const organizationId = req.organization?.id;
if (!organizationId) {
return res
.status(400)
.json({ error: "Organization ID not found in request." });
}
if (!id) {
return res.status(400).json({ error: "Competitor ID is required." });
}
const prisma = req.tenantPrisma;
if (!prisma) {
return res
.status(500)
.json({ error: "Prisma client not initialized for tenant." });
}
const competitorRepository = new CompetitorPrismaRepository(prisma);
const deleteCompetitorUseCase = new DeleteCompetitor(competitorRepository);
await deleteCompetitorUseCase.execute({
id,
organizationId,
});
res.status(204).send();
}
catch (error) {
res
.status(500)
.json({ error: error.message || "Error deleting competitor." });
}
};
//# sourceMappingURL=competitorController.js.map