@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
JavaScript
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;
}
}