Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ export const prepareActivityPayload = (activity: any): any => {
* @param activityId activity unique ID
* @param activityData activity data
*/
export default async (tenantId: string, activityId?: string, activityData?: any): Promise<void> => {
export default async (tenantId: string, activityId: string): Promise<void> => {
const userContext = await getUserContext(tenantId)

try {
Expand All @@ -138,11 +138,8 @@ export default async (tenantId: string, activityId?: string, activityData?: any)

if (automations.length > 0) {
log.info(`Found ${automations.length} automations to process!`)
let activity: any | undefined = activityData
let activity = await ActivityRepository.findById(activityId, userContext)

if (activity === undefined) {
activity = await ActivityRepository.findById(activityId, userContext)
}
if (activity.member?.id) {
const member = await MemberRepository.findById(activity.member.id, userContext)
activity = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
import { getServiceChildLogger } from '@crowd/logging'
import getUserContext from '../../../../../database/utils/getUserContext'
import AutomationExecutionRepository from '../../../../../database/repositories/automationExecutionRepository'
import AutomationRepository from '../../../../../database/repositories/automationRepository'
import MemberRepository from '../../../../../database/repositories/memberRepository'
import SequelizeRepository from '../../../../../database/repositories/sequelizeRepository'
import getUserContext from '../../../../../database/utils/getUserContext'
import {
AutomationData,
AutomationState,
AutomationTrigger,
AutomationType,
NewMemberSettings,
} from '../../../../../types/automationTypes'
import MemberRepository from '../../../../../database/repositories/memberRepository'
import { sendWebhookProcessRequest } from './util'
import { MemberAutomationData } from '../../messageTypes'
import AutomationExecutionRepository from '../../../../../database/repositories/automationExecutionRepository'
import SequelizeRepository from '../../../../../database/repositories/sequelizeRepository'

const log = getServiceChildLogger('newMemberWorker')

Expand Down Expand Up @@ -85,11 +84,7 @@ export const prepareMemberPayload = (member: any): any => {
* @param memberId tenant member ID
* @param memberData community member data
*/
export default async (
tenantId: string,
memberId?: string,
memberData?: MemberAutomationData,
): Promise<void> => {
export default async (tenantId: string, memberId?: string): Promise<void> => {
const userContext = await getUserContext(tenantId)

try {
Expand All @@ -102,10 +97,7 @@ export default async (
if (automations.length > 0) {
log.info(`Found ${automations.length} automations to process!`)

let member: any | undefined = memberData
if (member === undefined) {
member = await MemberRepository.findById(memberId, userContext)
}
const member = await MemberRepository.findById(memberId, userContext)

for (const automation of automations) {
if (await shouldProcessMember(member, automation)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import { API_CONFIG } from '../../../../../../conf'

export const newMemberBlocks = (member) => {
const platforms = member.activeOn
const reach = member.reach?.[platforms[0]] || member.reach?.total
const reach =
platforms && platforms.length > 0 ? member.reach?.[platforms[0]] : member.reach?.total
return {
blocks: [
{
Expand All @@ -21,7 +22,7 @@ export const newMemberBlocks = (member) => {
emoji: true,
},
},
...(platforms.length > 0
...(platforms && platforms.length > 0
? [
{
type: 'context',
Expand Down Expand Up @@ -133,7 +134,7 @@ export const newMemberBlocks = (member) => {
},
url: `${API_CONFIG.frontendUrl}/members/${member.id}`,
},
...platforms
...(platforms || [])
.map((platform) => ({
type: 'button',
text: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,23 +41,23 @@ export default async (
log.info(`Firing slack automation ${automation.id} for event ${eventId}!`)

let slackMessage = null
if (automation.trigger === 'new_member') {
slackMessage = {
text: `${payload.displayName} has joined your community!`,
...newMemberBlocks(payload),
}
} else if (automation.trigger === 'new_activity') {
slackMessage = {
text: ':satellite_antenna: New activity',
...newActivityBlocks(payload),
}
} else {
log.warn(`Error no slack handler for automation trigger ${automation.trigger}!`)
return
}

let success = false
try {
if (automation.trigger === 'new_member') {
slackMessage = {
text: `${payload.displayName} has joined your community!`,
...newMemberBlocks(payload),
}
} else if (automation.trigger === 'new_activity') {
slackMessage = {
text: ':satellite_antenna: New activity',
...newActivityBlocks(payload),
}
} else {
log.warn(`Error no slack handler for automation trigger ${automation.trigger}!`)
return
}

const result = await request.post(tenantSettings.dataValues.slackWebHook).send(slackMessage)

success = true
Expand Down
6 changes: 2 additions & 4 deletions backend/src/serverless/microservices/nodejs/messageTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,13 @@ export type IntegrationDataCheckerMessage = BaseNodeMicroserviceMessage & {
}

export type ActivityAutomationData = {
activityId?: string
activity?: any
activityId: string
}

export type NewActivityAutomationMessage = BaseNodeMicroserviceMessage & ActivityAutomationData

export type MemberAutomationData = {
memberId?: string
member?: any
memberId: string
}

export type NewMemberAutomationMessage = BaseNodeMicroserviceMessage & MemberAutomationData
Expand Down
12 changes: 2 additions & 10 deletions backend/src/serverless/microservices/nodejs/workerFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,18 +110,10 @@ async function workerFactory(event: NodeMicroserviceMessage): Promise<any> {
switch (automationRequest.trigger) {
case AutomationTrigger.NEW_ACTIVITY:
const newActivityAutomationRequest = event as NewActivityAutomationMessage
return newActivityWorker(
tenant,
newActivityAutomationRequest.activityId,
newActivityAutomationRequest.activity,
)
return newActivityWorker(tenant, newActivityAutomationRequest.activityId)
case AutomationTrigger.NEW_MEMBER:
const newMemberAutomationRequest = event as NewMemberAutomationMessage
return newMemberWorker(
tenant,
newMemberAutomationRequest.memberId,
newMemberAutomationRequest.member,
)
return newMemberWorker(tenant, newMemberAutomationRequest.memberId)
default:
throw new Error(`Invalid automation trigger ${automationRequest.trigger}!`)
}
Expand Down
11 changes: 7 additions & 4 deletions backend/src/serverless/utils/nodeWorkerSQS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,23 +73,26 @@ export const sendNodeWorkerMessage = async (

export const sendNewActivityNodeSQSMessage = async (
tenant: string,
activity: any,
activityId: string,
): Promise<void> => {
const payload = {
type: NodeWorkerMessageType.NODE_MICROSERVICE,
tenant,
activity,
activityId,
trigger: AutomationTrigger.NEW_ACTIVITY,
service: 'automation',
}
await sendNodeWorkerMessage(tenant, payload as NodeWorkerMessageBase)
}

export const sendNewMemberNodeSQSMessage = async (tenant: string, member: any): Promise<void> => {
export const sendNewMemberNodeSQSMessage = async (
tenant: string,
memberId: string,
): Promise<void> => {
const payload = {
type: NodeWorkerMessageType.NODE_MICROSERVICE,
tenant,
member,
memberId,
trigger: AutomationTrigger.NEW_MEMBER,
service: 'automation',
}
Expand Down
2 changes: 1 addition & 1 deletion backend/src/services/activityService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ export default class ActivityService extends LoggerBase {

if (!existing && fireCrowdWebhooks) {
try {
await sendNewActivityNodeSQSMessage(this.options.currentTenant.id, record)
await sendNewActivityNodeSQSMessage(this.options.currentTenant.id, record.id)
} catch (err) {
this.log.error(
err,
Expand Down
2 changes: 1 addition & 1 deletion backend/src/services/memberService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ export default class MemberService extends LoggerBase {

if (!existing && fireCrowdWebhooks) {
try {
await sendNewMemberNodeSQSMessage(this.options.currentTenant.id, record)
await sendNewMemberNodeSQSMessage(this.options.currentTenant.id, record.id)
} catch (err) {
logger.error(err, `Error triggering new member automation - ${record.id}!`)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { DB_CONFIG, SQS_CONFIG } from '@/conf'
import { DataSinkWorkerEmitter } from '@crowd/sqs'
import DataSinkRepository from '@/repo/dataSink.repo'
import { processPaginated } from '@crowd/common'
import { DbStore, getDbConnection } from '@crowd/database'
import { getServiceLogger } from '@crowd/logging'
import { getSqsClient } from '@crowd/sqs'
Expand Down