UNPKG

skailan-contacts

Version:

Servicio de gestión de contactos para Skailan

120 lines 5.52 kB
import { Contact } from '../../../domain/entities/Contact'; export class ContactPrismaRepository { prisma; constructor(prisma) { this.prisma = prisma; } async findById(id, organizationId) { try { const contactData = await this.prisma.contact.findFirst({ where: { id, organizationId }, }); return contactData ? new Contact(contactData.id, contactData.organizationId, contactData.externalId, contactData.name, contactData.email, contactData.phone, contactData.profilePictureUrl, contactData.metadata, contactData.createdAt, contactData.updatedAt) : null; } catch (error) { throw new Error(`Error finding contact by ID: ${error instanceof Error ? error.message : 'Unknown error'}`); } } async findByExternalId(externalId, organizationId) { try { const contactData = await this.prisma.contact.findFirst({ where: { externalId, organizationId }, }); return contactData ? new Contact(contactData.id, contactData.organizationId, contactData.externalId, contactData.name, contactData.email, contactData.phone, contactData.profilePictureUrl, contactData.metadata, contactData.createdAt, contactData.updatedAt) : null; } catch (error) { throw new Error(`Error finding contact by external ID: ${error instanceof Error ? error.message : 'Unknown error'}`); } } async findByEmail(email, organizationId) { try { const contactData = await this.prisma.contact.findFirst({ where: { email, organizationId }, }); return contactData ? new Contact(contactData.id, contactData.organizationId, contactData.externalId, contactData.name, contactData.email, contactData.phone, contactData.profilePictureUrl, contactData.metadata, contactData.createdAt, contactData.updatedAt) : null; } catch (error) { throw new Error(`Error finding contact by email: ${error instanceof Error ? error.message : 'Unknown error'}`); } } async findByPhone(phone, organizationId) { try { const contactData = await this.prisma.contact.findFirst({ where: { phone, organizationId }, }); return contactData ? new Contact(contactData.id, contactData.organizationId, contactData.externalId, contactData.name, contactData.email, contactData.phone, contactData.profilePictureUrl, contactData.metadata, contactData.createdAt, contactData.updatedAt) : null; } catch (error) { throw new Error(`Error finding contact by phone: ${error instanceof Error ? error.message : 'Unknown error'}`); } } async save(contact) { try { const savedContact = await this.prisma.contact.upsert({ where: { id: contact.id }, update: { externalId: contact.externalId, name: contact.name, email: contact.email, phone: contact.phone, profilePictureUrl: contact.profilePictureUrl, metadata: contact.metadata, updatedAt: new Date(), }, create: { id: contact.id, organizationId: contact.organizationId, externalId: contact.externalId, name: contact.name, email: contact.email, phone: contact.phone, profilePictureUrl: contact.profilePictureUrl, metadata: contact.metadata, }, }); return new Contact(savedContact.id, savedContact.organizationId, savedContact.externalId, savedContact.name, savedContact.email, savedContact.phone, savedContact.profilePictureUrl, savedContact.metadata, savedContact.createdAt, savedContact.updatedAt); } catch (error) { throw new Error(`Error saving contact: ${error instanceof Error ? error.message : 'Unknown error'}`); } } async findAll(organizationId) { try { const contactsData = await this.prisma.contact.findMany({ where: { organizationId }, orderBy: { createdAt: 'desc' } }); return contactsData.map(contactData => new Contact(contactData.id, contactData.organizationId, contactData.externalId, contactData.name, contactData.email, contactData.phone, contactData.profilePictureUrl, contactData.metadata, contactData.createdAt, contactData.updatedAt)); } catch (error) { throw new Error(`Error finding all contacts: ${error instanceof Error ? error.message : 'Unknown error'}`); } } async delete(id, organizationId) { try { await this.prisma.contact.delete({ where: { id }, }); } catch (error) { throw new Error(`Error deleting contact: ${error instanceof Error ? error.message : 'Unknown error'}`); } } } //# sourceMappingURL=ContactPrismaRepository.js.map