UNPKG

skailan-crm

Version:

Servicio de CRM y gestión de ventas para Skailan

180 lines 6.74 kB
import { CreateActivity } from "../../app/use-cases/CreateActivity"; import { GetActivityById } from "../../app/use-cases/GetActivityById"; import { ListActivities } from "../../app/use-cases/ListActivities"; import { UpdateActivity } from "../../app/use-cases/UpdateActivity"; import { DeleteActivity } from "../../app/use-cases/DeleteActivity"; import { ActivityPrismaRepository } from "../../infra/database/prisma/ActivityPrismaRepository"; import { LeadPrismaRepository } from "../../infra/database/prisma/LeadPrismaRepository"; import { OpportunityPrismaRepository } from "../../infra/database/prisma/OpportunityPrismaRepository"; export const createActivity = async (req, res) => { try { const { type, description, date, relatedLeadId, relatedOpportunityId, assignedToUserId, } = 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 activityRepository = new ActivityPrismaRepository(prisma); const leadRepository = new LeadPrismaRepository(prisma); const opportunityRepository = new OpportunityPrismaRepository(prisma); const createActivityUseCase = new CreateActivity(activityRepository, leadRepository, opportunityRepository); const newActivity = await createActivityUseCase.execute({ organizationId, type, description, date: new Date(date), relatedLeadId, relatedOpportunityId, assignedToUserId, }); res.status(201).json(newActivity); } catch (error) { res .status(500) .json({ error: error.message || "Error creating activity." }); } }; export const getActivityById = 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: "Activity ID is required." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const activityRepository = new ActivityPrismaRepository(prisma); const getActivityByIdUseCase = new GetActivityById(activityRepository); const activity = await getActivityByIdUseCase.execute({ id, organizationId, }); if (!activity) { return res.status(404).json({ error: "Activity not found." }); } res.status(200).json(activity); } catch (error) { res .status(500) .json({ error: error.message || "Error retrieving activity." }); } }; export const listActivities = async (req, res) => { try { const organizationId = req.organization?.id; const { relatedLeadId, relatedOpportunityId } = req.query; 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 activityRepository = new ActivityPrismaRepository(prisma); const listActivitiesUseCase = new ListActivities(activityRepository); const activities = await listActivitiesUseCase.execute({ organizationId, relatedLeadId, relatedOpportunityId, }); res.status(200).json(activities); } catch (error) { res .status(500) .json({ error: error.message || "Error listing activities." }); } }; export const updateActivity = async (req, res) => { try { const { id } = req.params; const { type, description, date, assignedToUserId, status } = 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: "Activity ID is required." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const activityRepository = new ActivityPrismaRepository(prisma); const updateActivityUseCase = new UpdateActivity(activityRepository); const updatedActivity = await updateActivityUseCase.execute({ id, organizationId, type, description, date: date ? new Date(date) : undefined, assignedToUserId, status, }); res.status(200).json(updatedActivity); } catch (error) { res .status(500) .json({ error: error.message || "Error updating activity." }); } }; export const deleteActivity = 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: "Activity ID is required." }); } const prisma = req.tenantPrisma; if (!prisma) { return res .status(500) .json({ error: "Prisma client not initialized for tenant." }); } const activityRepository = new ActivityPrismaRepository(prisma); const deleteActivityUseCase = new DeleteActivity(activityRepository); await deleteActivityUseCase.execute({ id, organizationId, }); res.status(204).send(); } catch (error) { res .status(500) .json({ error: error.message || "Error deleting activity." }); } }; //# sourceMappingURL=activityController.js.map