From 9759797036df6ff05ae739b6b0decac410e78d86 Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Sat, 4 Jul 2020 16:32:44 -0300 Subject: [PATCH] new(core.gbapp): Refactorings. --- packages/core.gbapp/services/GBCoreService.ts | 28 +++++++++++++++++++ packages/core.gbapp/services/GBMinService.ts | 22 +++++++-------- packages/kb.gbapp/services/KBService.ts | 10 +++++-- 3 files changed, 46 insertions(+), 14 deletions(-) diff --git a/packages/core.gbapp/services/GBCoreService.ts b/packages/core.gbapp/services/GBCoreService.ts index e79d1f1d..b2537bd8 100644 --- a/packages/core.gbapp/services/GBCoreService.ts +++ b/packages/core.gbapp/services/GBCoreService.ts @@ -585,4 +585,32 @@ STORAGE_SYNC=true const serverName = GBConfigService.get('STORAGE_SERVER').split('.database.windows.net')[0]; await installationDeployer.openStorageFirewall(group, serverName); } + + /** + * Get a dynamic param from instance. Dynamic params are defined in Config.xlsx + * and loaded into the work folder from /publish command. + * + * @param name Name of param to get from instance. + * @param defaultValue Value returned when no param is defined in Config.xlsx. + */ + public static getParam(instance, name: string, defaultValue?: T): any { + let value = null; + if (instance.params) { + const params = JSON.parse(instance.params); + value = params ? params[name] : defaultValue; + } + if (typeof (defaultValue) === "boolean") { + return new Boolean(value ? value.toLowerCase() === "true" : defaultValue); + } + if (typeof (defaultValue) === "string") { + return value ? value : defaultValue; + } + if (typeof (defaultValue) === "number") { + return new Number(value ? defaultValue : (defaultValue ? defaultValue : 0)); + } + } + + + + } diff --git a/packages/core.gbapp/services/GBMinService.ts b/packages/core.gbapp/services/GBMinService.ts index 451e79df..74adf23f 100644 --- a/packages/core.gbapp/services/GBMinService.ts +++ b/packages/core.gbapp/services/GBMinService.ts @@ -69,6 +69,7 @@ import { AnalyticsService } from '../../analytics.gblib/services/AnalyticsServic import { WhatsappDirectLine } from '../../whatsapp.gblib/services/WhatsappDirectLine'; import fs = require('fs'); import { GBConversationalService } from './GBConversationalService'; +import { GuaribasConversationMessage } from 'packages/analytics.gblib/models'; /** * Minimal service layer for a bot. @@ -642,6 +643,8 @@ export class GBMinService { private async processMessageActivity(context, min: GBMinInstance, step: GBDialogStep) { + let message: GuaribasConversationMessage; + if (process.env.PRIVACY_STORE_MESSAGES === "true") { // Adds message to the analytics layer. @@ -649,7 +652,7 @@ export class GBMinService { const analytics = new AnalyticsService(); const user = await min.userProfile.get(context, {}); if (user) { - analytics.createMessage(min.instance.instanceId, + message = await analytics.createMessage(min.instance.instanceId, user.conversation, user.systemUser.userId, context.activity.text); } @@ -701,16 +704,9 @@ export class GBMinService { let query = context.activity.text; - const translatorEnabled = () => { - if (min.instance.params) { - const params = JSON.parse(min.instance.params); - return params ? params['Enable Worldwide Translator'] === "TRUE" : false; - } - return false; - } // TODO: Encapsulate. let locale = 'pt'; - if (process.env.TRANSLATOR_DISABLED !== "true" || translatorEnabled()) { + if (process.env.TRANSLATOR_DISABLED !== "true" || min.getParam('Enable Worldwide Translator') ) { const minBoot = GBServer.globals.minBoot as any; // TODO: Switch keys automatically to master/per bot. locale = await AzureText.getLocale(minBoot.instance.textAnalyticsKey ? minBoot.instance.textAnalyticsKey : minBoot.instance.textAnalyticsKey, @@ -726,18 +722,22 @@ export class GBMinService { user.locale = locale; await user.save(); const minBoot = GBServer.globals.minBoot as any; + const notTranslatedQuery = query; query = await min.conversationalService.translate(min, min.instance.translatorKey ? min.instance.translatorKey : minBoot.instance.translatorKey, min.instance.translatorEndpoint ? min.instance.translatorEndpoint : minBoot.instance.translatorEndpoint, query, 'pt'); - GBLog.info(`Translated text: ${query}.`) + GBLog.info(`Translated text: ${query}.`); // Checks if any .gbapp will handle this answer, if not goes to kb.gbapp. let handled = false; await CollectionUtil.asyncForEach(min.appPackages, async (e: IGBPackage) => { - if (await e.onExchangeData(min, "handleAnswer", { query: query, step: step })) { + if (await e.onExchangeData(min, "handleAnswer", { query: query, step: step, + notTranslatedQuery: notTranslatedQuery, + message: message, + user })) { handled = true; } }); diff --git a/packages/kb.gbapp/services/KBService.ts b/packages/kb.gbapp/services/KBService.ts index 316d2764..9645d7e2 100644 --- a/packages/kb.gbapp/services/KBService.ts +++ b/packages/kb.gbapp/services/KBService.ts @@ -593,14 +593,18 @@ export class KBService implements IGBKBService { await GuaribasSubject.destroy({ where: { instanceId: instance.instanceId, packageId: packageId } }); - await GuaribasPackage.destroy({ - where: { instanceId: instance.instanceId, packageId: packageId } - }); + await this.undeployPackageFromStorage(instance, packageId); GBLog.info("Remember to call rebuild index manually after package removal."); } + private async undeployPackageFromStorage(instance: any, packageId: number) { + await GuaribasPackage.destroy({ + where: { instanceId: instance.instanceId, packageId: packageId } + }); + } + /** * Deploys a knowledge base to the storage using the .gbkb format. *