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