diff --git a/packages/plugin-posclient-api/src/graphql/utils/loyalties.ts b/packages/plugin-posclient-api/src/graphql/utils/loyalties.ts index b93c4c827c7..a7593c84e6a 100644 --- a/packages/plugin-posclient-api/src/graphql/utils/loyalties.ts +++ b/packages/plugin-posclient-api/src/graphql/utils/loyalties.ts @@ -2,6 +2,10 @@ import { sendLoyaltiesMessage } from '../../messageBroker'; import { IOrderInput } from '../types'; export const checkLoyalties = async (subdomain: string, doc: IOrderInput) => { + if (!doc.customerId) { + return doc; + } + let loyalties: any = {}; try { loyalties = await sendLoyaltiesMessage({ diff --git a/packages/plugin-posclient-api/src/messageBroker.ts b/packages/plugin-posclient-api/src/messageBroker.ts index d06cdee77f7..4bc644ca078 100644 --- a/packages/plugin-posclient-api/src/messageBroker.ts +++ b/packages/plugin-posclient-api/src/messageBroker.ts @@ -10,6 +10,7 @@ import { receiveProductCategory, receiveUser } from './graphql/utils/syncUtils'; +import { sendRPCMessage } from '@erxes/api-utils/src/messageBroker'; let client; @@ -164,7 +165,28 @@ const sendMessageWrapper = async ( ): Promise => { const { SKIP_REDIS } = process.env; if (SKIP_REDIS) { - const { action } = args; + const { action, isRPC } = args; + + // check connected gateway on server and check some plugins isAvailable + if (isRPC) { + const longTask = async () => + await sendRPCMessage('gateway:isServiceAvailable', serviceName); + + const timeout = (cb, interval) => () => + new Promise(resolve => setTimeout(() => cb(resolve), interval)); + + const onTimeout = timeout(resolve => resolve(false), 1500); + + let response = false; + await Promise.race([longTask, onTimeout].map(f => f())).then( + result => (response = result as boolean) + ); + + if (!response) { + return args.defaultValue; + } + } + return sendMessage({ client, serviceDiscovery,