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