skailan-contacts
Version:
Servicio de gestión de contactos para Skailan
120 lines • 5.52 kB
JavaScript
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