UNPKG

skailan-crm

Version:

Servicio de CRM y gestión de ventas para Skailan

72 lines 3.23 kB
import { Lead } from "../../../domain/entities/Lead"; export class LeadPrismaRepository { prisma; constructor(prisma) { this.prisma = prisma; } async findById(id, organizationId) { const leadData = await this.prisma.lead.findUnique({ where: { id, organizationId }, }); return leadData ? new Lead(leadData.id, leadData.organizationId, leadData.name, leadData.email, leadData.phone, leadData.status, leadData.source, leadData.notes, leadData.score, leadData.company, leadData.title, leadData.industry, leadData.createdAt, leadData.updatedAt) : null; } async findByEmail(email, organizationId) { const leadData = await this.prisma.lead.findFirst({ where: { email, organizationId }, }); return leadData ? new Lead(leadData.id, leadData.organizationId, leadData.name, leadData.email, leadData.phone, leadData.status, leadData.source, leadData.notes, leadData.score, leadData.company, leadData.title, leadData.industry, leadData.createdAt, leadData.updatedAt) : null; } async save(lead) { const savedLead = await this.prisma.lead.upsert({ where: { id: lead.id }, update: { name: lead.name, email: lead.email, phone: lead.phone, status: lead.status, source: lead.source, notes: lead.notes, score: lead.score, company: lead.company, title: lead.title, industry: lead.industry, updatedAt: new Date(), }, create: { id: lead.id, organizationId: lead.organizationId, name: lead.name, email: lead.email, phone: lead.phone, status: lead.status, source: lead.source, notes: lead.notes, score: lead.score, company: lead.company, title: lead.title, industry: lead.industry, }, }); return new Lead(savedLead.id, savedLead.organizationId, savedLead.name, savedLead.email, savedLead.phone, savedLead.status, savedLead.source, savedLead.notes, savedLead.score, savedLead.company, savedLead.title, savedLead.industry, savedLead.createdAt, savedLead.updatedAt); } async findAll(organizationId, status, source) { const leadsData = await this.prisma.lead.findMany({ where: { organizationId, ...(status && { status }), ...(source && { source }), }, }); return leadsData.map((leadData) => new Lead(leadData.id, leadData.organizationId, leadData.name, leadData.email, leadData.phone, leadData.status, leadData.source, leadData.notes, leadData.score, leadData.company, leadData.title, leadData.industry, leadData.createdAt, leadData.updatedAt)); } async delete(id, organizationId) { await this.prisma.lead.delete({ where: { id, organizationId }, }); } } //# sourceMappingURL=LeadPrismaRepository.js.map