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