Centralized_Reporting_Backend/src/services/integration/integrationService.js
2025-09-15 20:00:28 +05:30

173 lines
5.2 KiB
JavaScript

const ZohoClient = require('../../integrations/zoho/client');
class IntegrationService {
constructor(userId) {
this.userId = userId;
this.clients = {
zoho: new ZohoClient(userId)
};
}
async getData(provider, service, resource, params = {}) {
const client = this.clients[provider];
if (!client) {
throw new Error(`Provider ${provider} not supported`);
}
const method = this.getMethodName(service, resource);
if (!client[method]) {
throw new Error(`Resource ${resource} not supported for ${provider} ${service}`);
}
// Handle special cases that require additional parameters
if (method === 'getTasks' && service === 'projects' && params.projectId) {
return await client.getProjectTasks(params.projectId, params);
}
// Handle getAllProjectTasks for projects tasks without projectId
if (method === 'getTasks' && service === 'projects' && !params.projectId) {
return await client.getAllProjectTasks(params);
}
// Handle CRM tasks (no special parameters needed)
if (method === 'getTasks' && service === 'crm') {
return await client[method](params);
}
return await client[method](params);
}
getMethodName(service, resource) {
const resourceMap = {
'leads': 'Leads',
'contacts': 'Contacts',
'deals': 'Deals',
'employees': 'Employees',
'projects': 'Projects',
'tasks': 'Tasks',
'timesheets': 'Timesheets'
};
const resourceName = resourceMap[resource] || resource;
return `get${resourceName}`;
}
async getAvailableServices(provider) {
const client = this.clients[provider];
if (!client) {
throw new Error(`Provider ${provider} not supported`);
}
return client.getAvailableServices();
}
async getAvailableResources(provider, service) {
const client = this.clients[provider];
if (!client) {
throw new Error(`Provider ${provider} not supported`);
}
return client.getAvailableResources(service);
}
async getPortals(provider) {
const client = this.clients[provider];
if (!client) {
throw new Error(`Provider ${provider} not supported`);
}
if (provider !== 'zoho') {
throw new Error('Portals are only available for Zoho provider');
}
return await client.getPortals();
}
async getAllProjects(provider, params = {}) {
const client = this.clients[provider];
if (!client) {
throw new Error(`Provider ${provider} not supported`);
}
if (provider !== 'zoho') {
throw new Error('All projects are only available for Zoho provider');
}
return await client.getAllProjects(params);
}
async getAllProjectTasks(provider, portalId, params = {}) {
const client = this.clients[provider];
if (!client) {
throw new Error(`Provider ${provider} not supported`);
}
if (provider !== 'zoho') {
throw new Error('All project tasks are only available for Zoho provider');
}
return await client.getAllProjectTasks(portalId, params);
}
async getAllProjectTaskLists(provider, portalId, params = {}) {
const client = this.clients[provider];
if (!client) {
throw new Error(`Provider ${provider} not supported`);
}
if (provider !== 'zoho') {
throw new Error('All project task lists are only available for Zoho provider');
}
return await client.getAllProjectTaskLists(portalId, params);
}
async getAllProjectIssues(provider, portalId, params = {}) {
const client = this.clients[provider];
if (!client) {
throw new Error(`Provider ${provider} not supported`);
}
if (provider !== 'zoho') {
throw new Error('All project issues are only available for Zoho provider');
}
return await client.getAllProjectIssues(portalId, params);
}
async getAllProjectPhases(provider, portalId, params = {}) {
const client = this.clients[provider];
if (!client) {
throw new Error(`Provider ${provider} not supported`);
}
if (provider !== 'zoho') {
throw new Error('All project phases are only available for Zoho provider');
}
return await client.getAllProjectPhases(portalId, params);
}
async getSalesOrders(provider, params = {}) {
const client = this.clients[provider];
if (!client) {
throw new Error(`Provider ${provider} not supported`);
}
if (provider !== 'zoho') {
throw new Error('Sales Orders are only available for Zoho provider');
}
return await client.getSalesOrders(params);
}
async getPurchaseOrders(provider, params = {}) {
const client = this.clients[provider];
if (!client) {
throw new Error(`Provider ${provider} not supported`);
}
if (provider !== 'zoho') {
throw new Error('Purchase Orders are only available for Zoho provider');
}
return await client.getPurchaseOrders(params);
}
async getInvoices(provider, params = {}) {
const client = this.clients[provider];
if (!client) {
throw new Error(`Provider ${provider} not supported`);
}
if (provider !== 'zoho') {
throw new Error('Invoices are only available for Zoho provider');
}
return await client.getInvoices(params);
}
}
module.exports = IntegrationService;