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