UNPKG

skailan-crm

Version:

Servicio de CRM y gestión de ventas para Skailan

66 lines 3.13 kB
import { Quote } from "../../../domain/entities/Quote"; export class QuotePrismaRepository { prisma; constructor(prisma) { this.prisma = prisma; } async findById(id, organizationId) { const quoteData = await this.prisma.quote.findUnique({ where: { id, organizationId }, }); return quoteData ? new Quote(quoteData.id, quoteData.organizationId, quoteData.opportunityId, quoteData.quoteNumber, quoteData.status, quoteData.totalAmount, quoteData.version, quoteData.signedAt, quoteData.signedBy, quoteData.createdAt, quoteData.updatedAt) : null; } async findByQuoteNumber(quoteNumber, organizationId) { const quoteData = await this.prisma.quote.findFirst({ where: { quoteNumber, organizationId }, }); return quoteData ? new Quote(quoteData.id, quoteData.organizationId, quoteData.opportunityId, quoteData.quoteNumber, quoteData.status, quoteData.totalAmount, quoteData.version, quoteData.signedAt, quoteData.signedBy, quoteData.createdAt, quoteData.updatedAt) : null; } async findAll(organizationId, opportunityId, status) { const quotesData = await this.prisma.quote.findMany({ where: { organizationId, ...(opportunityId && { opportunityId }), ...(status && { status }), }, }); return quotesData.map((quoteData) => new Quote(quoteData.id, quoteData.organizationId, quoteData.opportunityId, quoteData.quoteNumber, quoteData.status, quoteData.totalAmount, quoteData.version, quoteData.signedAt, quoteData.signedBy, quoteData.createdAt, quoteData.updatedAt)); } async save(quote) { const savedQuote = await this.prisma.quote.upsert({ where: { id: quote.id }, update: { opportunityId: quote.opportunityId, quoteNumber: quote.quoteNumber, status: quote.status, totalAmount: quote.totalAmount, version: quote.version, signedAt: quote.signedAt, signedBy: quote.signedBy, updatedAt: new Date(), }, create: { id: quote.id, organizationId: quote.organizationId, opportunityId: quote.opportunityId, quoteNumber: quote.quoteNumber, status: quote.status, totalAmount: quote.totalAmount, version: quote.version, signedAt: quote.signedAt, signedBy: quote.signedBy, }, }); return new Quote(savedQuote.id, savedQuote.organizationId, savedQuote.opportunityId, savedQuote.quoteNumber, savedQuote.status, savedQuote.totalAmount, savedQuote.version, savedQuote.signedAt, savedQuote.signedBy, savedQuote.createdAt, savedQuote.updatedAt); } async delete(id, organizationId) { await this.prisma.quote.delete({ where: { id, organizationId }, }); } } //# sourceMappingURL=QuotePrismaRepository.js.map