UNPKG

skailan-crm

Version:

Servicio de CRM y gestión de ventas para Skailan

58 lines 2.9 kB
import { Opportunity } from "../../../domain/entities/Opportunity"; export class OpportunityPrismaRepository { prisma; constructor(prisma) { this.prisma = prisma; } async findById(id, organizationId) { const opportunityData = await this.prisma.opportunity.findUnique({ where: { id, organizationId }, }); return opportunityData ? new Opportunity(opportunityData.id, opportunityData.organizationId, opportunityData.leadId, opportunityData.name, opportunityData.stage, opportunityData.amount, opportunityData.probability, opportunityData.closeDate, opportunityData.notes, opportunityData.createdAt, opportunityData.updatedAt) : null; } async findAll(organizationId, stage, leadId) { const opportunitiesData = await this.prisma.opportunity.findMany({ where: { organizationId, ...(stage && { stage }), ...(leadId && { leadId }), }, }); return opportunitiesData.map((opportunityData) => new Opportunity(opportunityData.id, opportunityData.organizationId, opportunityData.leadId, opportunityData.name, opportunityData.stage, opportunityData.amount, opportunityData.probability, opportunityData.closeDate, opportunityData.notes, opportunityData.createdAt, opportunityData.updatedAt)); } async save(opportunity) { const savedOpportunity = await this.prisma.opportunity.upsert({ where: { id: opportunity.id }, update: { leadId: opportunity.leadId, name: opportunity.name, stage: opportunity.stage, amount: opportunity.amount, probability: opportunity.probability, closeDate: opportunity.closeDate, notes: opportunity.notes, updatedAt: new Date(), }, create: { id: opportunity.id, organizationId: opportunity.organizationId, leadId: opportunity.leadId, name: opportunity.name, stage: opportunity.stage, amount: opportunity.amount, probability: opportunity.probability, closeDate: opportunity.closeDate, notes: opportunity.notes, }, }); return new Opportunity(savedOpportunity.id, savedOpportunity.organizationId, savedOpportunity.leadId, savedOpportunity.name, savedOpportunity.stage, savedOpportunity.amount, savedOpportunity.probability, savedOpportunity.closeDate, savedOpportunity.notes, savedOpportunity.createdAt, savedOpportunity.updatedAt); } async delete(id, organizationId) { await this.prisma.opportunity.delete({ where: { id, organizationId }, }); } } //# sourceMappingURL=OpportunityPrismaRepository.js.map