UNPKG

@robotical/appv2-warranty-service-lib

Version:

A tool that gathers data from the Apps and sends it to the Analytics server

227 lines (226 loc) 8.97 kB
import Logger from '../services/Logger'; import Transport from '../transport/server'; import { ServerEndpoints } from '../types/types'; const SHOW_LOGS = true; const TAG = 'ZOHOAPI'; export default class ZohoAPI { static compileHubspotTicketTitle(robotSerialNumber, robotType) { return `${robotType} -- ${robotSerialNumber}`; } static async createTicket(content, dbReportId, userEmail, robotSerialNumber, robotName, robotType) { Logger.info(SHOW_LOGS, TAG, `createTicket: ${content}, ${dbReportId}, ${userEmail}, ${robotSerialNumber}`); const hubspotTicketTitle = this.compileHubspotTicketTitle(robotSerialNumber, robotType || ''); const dataToPost = { subject: hubspotTicketTitle, description: '', email: userEmail, serialNumber: robotSerialNumber, dbReportId: dbReportId, robotName: robotName || '', robotType: robotType || '', }; try { const response = await Transport.post(ServerEndpoints.ZOHO_CREATE_TICKET, dataToPost); const responseJsoned = await response.json(); if (responseJsoned.success) { return responseJsoned.ticketId || null; } else { Logger.error(SHOW_LOGS, TAG, `createTicket error: ${responseJsoned.message}`); return null; } } catch (e) { Logger.error(SHOW_LOGS, TAG, `createTicket error: ${e}`); return null; } } static async getTicketById(ticketId) { Logger.info(SHOW_LOGS, TAG, `getTicketById: ${ticketId}`); try { const dataToPost = { ticketId: ticketId, }; const response = await Transport.post(ServerEndpoints.ZOHO_GET_TICKET, dataToPost); const responseJsoned = await response.json(); if (responseJsoned.success) { return responseJsoned.ticket || null; } else { Logger.error(SHOW_LOGS, TAG, `getTicketById error: ${responseJsoned.message}`); return null; } } catch (e) { Logger.error(SHOW_LOGS, TAG, `getTicketById error: ${e}`); return null; } } static async getTicketBySerialNumber(serialNumber) { Logger.info(SHOW_LOGS, TAG, `getTicketBySerialNumber: ${serialNumber}`); try { const dataToPost = { serialNumber: serialNumber, }; const response = await Transport.post(ServerEndpoints.ZOHO_GET_TICKET_BY_SN, dataToPost); const responseJsoned = await response.json(); if (responseJsoned.success) { return responseJsoned.ticket || null; } else { Logger.warn(SHOW_LOGS, TAG, `getTicketBySerialNumber unsuccess: ${responseJsoned.message}`); return null; } } catch (e) { Logger.error(SHOW_LOGS, TAG, `getTicketBySerialNumber error: ${e}`); return null; } } static async getTicketStatus(ticketId, email) { Logger.info(SHOW_LOGS, TAG, `getTicketStatus: ${ticketId}, ${email}`); const ticket = await this.getTicketById(ticketId); if (!ticket) return null; const lowerCaseEmail = email.toLowerCase(); const ticketEmail = ticket.email.toLowerCase(); if (ticketEmail !== lowerCaseEmail) { Logger.error(SHOW_LOGS, TAG, `getTicketStatus error: ticket email ${ticketEmail} does not match user email ${lowerCaseEmail}`); return null; } const ticketStatus = ticket.status; if (!ticketStatus) { Logger.error(SHOW_LOGS, TAG, `getTicketStatus error: ticket status is null`); return null; } return ticketStatus; } static async updateTicketStatus(ticketId, status) { Logger.info(SHOW_LOGS, TAG, `updateTicketStatus: ${ticketId}, ${status}`); try { const dataToPost = { ticketId: ticketId, status: status, }; const response = await Transport.post(ServerEndpoints.ZOHO_UPDATE_TICKET_STATUS, dataToPost); const responseJsoned = await response.json(); if (responseJsoned.success) { return responseJsoned.success; } else { Logger.error(SHOW_LOGS, TAG, `updateTicketStatus error: ${responseJsoned.message}`); return false; } } catch (e) { Logger.error(SHOW_LOGS, TAG, `updateTicketStatus error: ${e}`); return false; } } static async createComment(title, ticketId, dbCommentId, comment, userEmail, robotSerialNumber) { Logger.info(SHOW_LOGS, TAG, `createComment: ${title}, ${ticketId}, ${dbCommentId}, ${comment}, ${userEmail}, ${robotSerialNumber}`); const content = ZohoAPI.compileContent(title, comment, dbCommentId); const dataToPost = { ticketId: ticketId, content: content, }; try { const response = await Transport.post(ServerEndpoints.ZOHO_ADD_COMMENT_TO_TICKET, dataToPost); const responseJsoned = await response.json(); if (responseJsoned.success) { return responseJsoned.commentId || null; } else { Logger.error(SHOW_LOGS, TAG, `createComment unsuccess: ${responseJsoned.message}`); return null; } } catch (e) { Logger.error(SHOW_LOGS, TAG, `createComment error: ${e}`); return null; } } static async getCommentsForTicket(ticketId) { Logger.info(SHOW_LOGS, TAG, `getCommentsForTicket: ${ticketId}`); try { const dataToPost = { ticketId: ticketId, }; const response = await Transport.post(ServerEndpoints.ZOHO_GET_COMMENTS_FROM_TICKET, dataToPost); const responseJsoned = await response.json(); if (responseJsoned.success) { return responseJsoned.comments || null; } else { Logger.error(SHOW_LOGS, TAG, `getCommentsForTicket error: ${responseJsoned.message}`); return null; } } catch (e) { Logger.error(SHOW_LOGS, TAG, `getCommentsForTicket error: ${e}`); return null; } } static async getComment(ticketId, commentId) { Logger.info(SHOW_LOGS, TAG, `getComment: ${ticketId}, ${commentId}`); try { const dataToPost = { ticketId: ticketId, commentId: commentId, }; const response = await Transport.post(ServerEndpoints.ZOHO_GET_COMMENT_FROM_TICKET, dataToPost); const responseJsoned = await response.json(); if (responseJsoned.success) { return responseJsoned.comment || null; } else { Logger.error(SHOW_LOGS, TAG, `getComment error: ${responseJsoned.message}`); return null; } } catch (e) { Logger.error(SHOW_LOGS, TAG, `getComment error: ${e}`); return null; } } static compileContent(title, content, dbReportId) { return `Title: ${title}<br></br><br></br>${content}<br></br><br></br>dbReportId: [[${dbReportId}]]`; } static getSerialNumberFromContent(content) { const serialNumberRegex = /Robot serial number: ([0-9a-zA-Z]+)/; const serialNumberMatch = content.match(serialNumberRegex); if (serialNumberMatch && serialNumberMatch[1]) { return serialNumberMatch[1]; } return null; } static getUserEmailFromContent(content) { const emailRegex = /User email: ([0-9a-zA-Z@.]+)/; const emailMatch = content.match(emailRegex); if (emailMatch && emailMatch[1]) { return emailMatch[1]; } return null; } static getTitleFromContent(content) { const titleRegex = /Title: ([0-9a-zA-Z@.]+)/; const titleMatch = content.match(titleRegex); if (titleMatch && titleMatch[1]) { return titleMatch[1]; } return null; } static getLegacyTitleFromContent(content) { const lines = content.split("\n"); if (lines && lines.length > 0) { return lines[0]; } return null; } static getDbIdFromContent(content) { const dbIdRegex = /DB (ticket|note) id: \[\[([0-9a-zA-Z]+)\]\]/; const dbIdMatch = content.match(dbIdRegex); if (dbIdMatch && dbIdMatch[2]) { return dbIdMatch[2]; } return null; } }