skailan-contacts
Version:
Servicio de gestión de contactos para Skailan
142 lines • 7.15 kB
JavaScript
import { ContactCommunicationPlatform } from '../../../domain/entities/ContactCommunicationPlatform';
export class ContactCommunicationPlatformPrismaRepository {
prisma;
constructor(prisma) {
this.prisma = prisma;
}
async findById(id, organizationId) {
try {
const platformData = await this.prisma.contactCommunicationPlatform.findFirst({
where: {
id,
organizationId
},
});
return platformData ? new ContactCommunicationPlatform(platformData.id, platformData.contactId, platformData.organizationId, platformData.platform, platformData.platformUserId, platformData.platformUsername, platformData.isActive, platformData.isPrimary, platformData.config, platformData.createdAt, platformData.updatedAt) : null;
}
catch (error) {
throw new Error(`Error finding platform by ID: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
}
async findByContactId(contactId, organizationId) {
try {
const platformsData = await this.prisma.contactCommunicationPlatform.findMany({
where: {
contactId,
organizationId
},
orderBy: { isPrimary: 'desc' }
});
return platformsData.map(platformData => new ContactCommunicationPlatform(platformData.id, platformData.contactId, platformData.organizationId, platformData.platform, platformData.platformUserId, platformData.platformUsername, platformData.isActive, platformData.isPrimary, platformData.config, platformData.createdAt, platformData.updatedAt));
}
catch (error) {
throw new Error(`Error finding platforms by contact ID: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
}
async findByPlatform(platform, organizationId) {
try {
const platformsData = await this.prisma.contactCommunicationPlatform.findMany({
where: {
platform,
organizationId
},
});
return platformsData.map(platformData => new ContactCommunicationPlatform(platformData.id, platformData.contactId, platformData.organizationId, platformData.platform, platformData.platformUserId, platformData.platformUsername, platformData.isActive, platformData.isPrimary, platformData.config, platformData.createdAt, platformData.updatedAt));
}
catch (error) {
throw new Error(`Error finding platforms by platform type: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
}
async findActiveByContactId(contactId, organizationId) {
try {
const platformsData = await this.prisma.contactCommunicationPlatform.findMany({
where: {
contactId,
organizationId,
isActive: true
},
orderBy: { isPrimary: 'desc' }
});
return platformsData.map(platformData => new ContactCommunicationPlatform(platformData.id, platformData.contactId, platformData.organizationId, platformData.platform, platformData.platformUserId, platformData.platformUsername, platformData.isActive, platformData.isPrimary, platformData.config, platformData.createdAt, platformData.updatedAt));
}
catch (error) {
throw new Error(`Error finding active platforms by contact ID: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
}
async findPrimaryByContactId(contactId, organizationId) {
try {
const platformData = await this.prisma.contactCommunicationPlatform.findFirst({
where: {
contactId,
organizationId,
isPrimary: true
},
});
return platformData ? new ContactCommunicationPlatform(platformData.id, platformData.contactId, platformData.organizationId, platformData.platform, platformData.platformUserId, platformData.platformUsername, platformData.isActive, platformData.isPrimary, platformData.config, platformData.createdAt, platformData.updatedAt) : null;
}
catch (error) {
throw new Error(`Error finding primary platform by contact ID: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
}
async save(platform) {
try {
const savedPlatform = await this.prisma.contactCommunicationPlatform.upsert({
where: {
id: platform.id
},
update: {
contactId: platform.contactId,
organizationId: platform.organizationId,
platform: platform.platform,
platformUserId: platform.platformUserId,
platformUsername: platform.platformUsername,
isActive: platform.isActive,
isPrimary: platform.isPrimary,
config: platform.config,
updatedAt: new Date(),
},
create: {
id: platform.id,
contactId: platform.contactId,
organizationId: platform.organizationId,
platform: platform.platform,
platformUserId: platform.platformUserId,
platformUsername: platform.platformUsername,
isActive: platform.isActive,
isPrimary: platform.isPrimary,
config: platform.config,
},
});
return new ContactCommunicationPlatform(savedPlatform.id, savedPlatform.contactId, savedPlatform.organizationId, savedPlatform.platform, savedPlatform.platformUserId, savedPlatform.platformUsername, savedPlatform.isActive, savedPlatform.isPrimary, savedPlatform.config, savedPlatform.createdAt, savedPlatform.updatedAt);
}
catch (error) {
throw new Error(`Error saving platform: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
}
async delete(id, organizationId) {
try {
await this.prisma.contactCommunicationPlatform.delete({
where: {
id
},
});
}
catch (error) {
throw new Error(`Error deleting platform: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
}
async deleteByContactId(contactId, organizationId) {
try {
await this.prisma.contactCommunicationPlatform.deleteMany({
where: {
contactId,
organizationId
},
});
}
catch (error) {
throw new Error(`Error deleting platforms by contact ID: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
}
}
//# sourceMappingURL=ContactCommunicationPlatformPrismaRepository.js.map