Fix missing feature flag on messaging listeners (#3952)
* Fix missing feature flag on messaging listeners * Update workspace-query-runner.service.ts
This commit is contained in:
@ -1,6 +1,13 @@
|
|||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import { OnEvent } from '@nestjs/event-emitter';
|
import { OnEvent } from '@nestjs/event-emitter';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
|
||||||
|
import { Repository } from 'typeorm';
|
||||||
|
|
||||||
|
import {
|
||||||
|
FeatureFlagEntity,
|
||||||
|
FeatureFlagKeys,
|
||||||
|
} from 'src/core/feature-flag/feature-flag.entity';
|
||||||
import { ObjectRecordCreateEvent } from 'src/integrations/event-emitter/types/object-record-create.event';
|
import { ObjectRecordCreateEvent } from 'src/integrations/event-emitter/types/object-record-create.event';
|
||||||
import { ObjectRecordUpdateEvent } from 'src/integrations/event-emitter/types/object-record-update.event';
|
import { ObjectRecordUpdateEvent } from 'src/integrations/event-emitter/types/object-record-update.event';
|
||||||
import { objectRecordChangedProperties as objectRecordUpdateEventChangedProperties } from 'src/integrations/event-emitter/utils/object-record-changed-properties.util';
|
import { objectRecordChangedProperties as objectRecordUpdateEventChangedProperties } from 'src/integrations/event-emitter/utils/object-record-changed-properties.util';
|
||||||
@ -17,14 +24,28 @@ export class MessagingPersonListener {
|
|||||||
constructor(
|
constructor(
|
||||||
@Inject(MessageQueue.messagingQueue)
|
@Inject(MessageQueue.messagingQueue)
|
||||||
private readonly messageQueueService: MessageQueueService,
|
private readonly messageQueueService: MessageQueueService,
|
||||||
|
@InjectRepository(FeatureFlagEntity, 'core')
|
||||||
|
private readonly featureFlagRepository: Repository<FeatureFlagEntity>,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
@OnEvent('person.created')
|
@OnEvent('person.created')
|
||||||
handleCreatedEvent(payload: ObjectRecordCreateEvent<PersonObjectMetadata>) {
|
async handleCreatedEvent(
|
||||||
|
payload: ObjectRecordCreateEvent<PersonObjectMetadata>,
|
||||||
|
) {
|
||||||
if (payload.createdRecord.email === null) {
|
if (payload.createdRecord.email === null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const messagingFeatureFlag = await this.featureFlagRepository.findOneBy({
|
||||||
|
key: FeatureFlagKeys.IsMessagingEnabled,
|
||||||
|
value: true,
|
||||||
|
workspaceId: payload.workspaceId,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!messagingFeatureFlag || !messagingFeatureFlag.value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.messageQueueService.add<MatchMessageParticipantsJobData>(
|
this.messageQueueService.add<MatchMessageParticipantsJobData>(
|
||||||
MatchMessageParticipantJob.name,
|
MatchMessageParticipantJob.name,
|
||||||
{
|
{
|
||||||
@ -36,12 +57,24 @@ export class MessagingPersonListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OnEvent('person.updated')
|
@OnEvent('person.updated')
|
||||||
handleUpdatedEvent(payload: ObjectRecordUpdateEvent<PersonObjectMetadata>) {
|
async handleUpdatedEvent(
|
||||||
|
payload: ObjectRecordUpdateEvent<PersonObjectMetadata>,
|
||||||
|
) {
|
||||||
|
const messagingFeatureFlag = await this.featureFlagRepository.findOneBy({
|
||||||
|
key: FeatureFlagKeys.IsMessagingEnabled,
|
||||||
|
value: true,
|
||||||
|
workspaceId: payload.workspaceId,
|
||||||
|
});
|
||||||
|
|
||||||
|
const isMessagingEnabled =
|
||||||
|
messagingFeatureFlag && messagingFeatureFlag.value;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
objectRecordUpdateEventChangedProperties(
|
objectRecordUpdateEventChangedProperties(
|
||||||
payload.previousRecord,
|
payload.previousRecord,
|
||||||
payload.updatedRecord,
|
payload.updatedRecord,
|
||||||
).includes('email')
|
).includes('email') &&
|
||||||
|
isMessagingEnabled
|
||||||
) {
|
) {
|
||||||
this.messageQueueService.add<MatchMessageParticipantsJobData>(
|
this.messageQueueService.add<MatchMessageParticipantsJobData>(
|
||||||
MatchMessageParticipantJob.name,
|
MatchMessageParticipantJob.name,
|
||||||
|
|||||||
@ -1,6 +1,13 @@
|
|||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import { OnEvent } from '@nestjs/event-emitter';
|
import { OnEvent } from '@nestjs/event-emitter';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
|
||||||
|
import { Repository } from 'typeorm';
|
||||||
|
|
||||||
|
import {
|
||||||
|
FeatureFlagEntity,
|
||||||
|
FeatureFlagKeys,
|
||||||
|
} from 'src/core/feature-flag/feature-flag.entity';
|
||||||
import { ObjectRecordCreateEvent } from 'src/integrations/event-emitter/types/object-record-create.event';
|
import { ObjectRecordCreateEvent } from 'src/integrations/event-emitter/types/object-record-create.event';
|
||||||
import { ObjectRecordUpdateEvent } from 'src/integrations/event-emitter/types/object-record-update.event';
|
import { ObjectRecordUpdateEvent } from 'src/integrations/event-emitter/types/object-record-update.event';
|
||||||
import { objectRecordChangedProperties as objectRecordUpdateEventChangedProperties } from 'src/integrations/event-emitter/utils/object-record-changed-properties.util';
|
import { objectRecordChangedProperties as objectRecordUpdateEventChangedProperties } from 'src/integrations/event-emitter/utils/object-record-changed-properties.util';
|
||||||
@ -17,16 +24,28 @@ export class MessagingWorkspaceMemberListener {
|
|||||||
constructor(
|
constructor(
|
||||||
@Inject(MessageQueue.messagingQueue)
|
@Inject(MessageQueue.messagingQueue)
|
||||||
private readonly messageQueueService: MessageQueueService,
|
private readonly messageQueueService: MessageQueueService,
|
||||||
|
@InjectRepository(FeatureFlagEntity, 'core')
|
||||||
|
private readonly featureFlagRepository: Repository<FeatureFlagEntity>,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
@OnEvent('workspaceMember.created')
|
@OnEvent('workspaceMember.created')
|
||||||
handleCreatedEvent(
|
async handleCreatedEvent(
|
||||||
payload: ObjectRecordCreateEvent<WorkspaceMemberObjectMetadata>,
|
payload: ObjectRecordCreateEvent<WorkspaceMemberObjectMetadata>,
|
||||||
) {
|
) {
|
||||||
if (payload.createdRecord.userEmail === null) {
|
if (payload.createdRecord.userEmail === null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const messagingFeatureFlag = await this.featureFlagRepository.findOneBy({
|
||||||
|
key: FeatureFlagKeys.IsMessagingEnabled,
|
||||||
|
value: true,
|
||||||
|
workspaceId: payload.workspaceId,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!messagingFeatureFlag || !messagingFeatureFlag.value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.messageQueueService.add<MatchMessageParticipantsJobData>(
|
this.messageQueueService.add<MatchMessageParticipantsJobData>(
|
||||||
MatchMessageParticipantJob.name,
|
MatchMessageParticipantJob.name,
|
||||||
{
|
{
|
||||||
@ -38,14 +57,24 @@ export class MessagingWorkspaceMemberListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OnEvent('workspaceMember.updated')
|
@OnEvent('workspaceMember.updated')
|
||||||
handleUpdatedEvent(
|
async handleUpdatedEvent(
|
||||||
payload: ObjectRecordUpdateEvent<WorkspaceMemberObjectMetadata>,
|
payload: ObjectRecordUpdateEvent<WorkspaceMemberObjectMetadata>,
|
||||||
) {
|
) {
|
||||||
|
const messagingFeatureFlag = await this.featureFlagRepository.findOneBy({
|
||||||
|
key: FeatureFlagKeys.IsMessagingEnabled,
|
||||||
|
value: true,
|
||||||
|
workspaceId: payload.workspaceId,
|
||||||
|
});
|
||||||
|
|
||||||
|
const isMessagingEnabled =
|
||||||
|
messagingFeatureFlag && messagingFeatureFlag.value;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
objectRecordUpdateEventChangedProperties(
|
objectRecordUpdateEventChangedProperties(
|
||||||
payload.previousRecord,
|
payload.previousRecord,
|
||||||
payload.updatedRecord,
|
payload.updatedRecord,
|
||||||
).includes('userEmail')
|
).includes('userEmail') &&
|
||||||
|
isMessagingEnabled
|
||||||
) {
|
) {
|
||||||
this.messageQueueService.add<MatchMessageParticipantsJobData>(
|
this.messageQueueService.add<MatchMessageParticipantsJobData>(
|
||||||
MatchMessageParticipantJob.name,
|
MatchMessageParticipantJob.name,
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import { Module } from '@nestjs/common';
|
import { Module } from '@nestjs/common';
|
||||||
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
|
||||||
import { ConnectedAccountModule } from 'src/workspace/messaging/repositories/connected-account/connected-account.module';
|
import { ConnectedAccountModule } from 'src/workspace/messaging/repositories/connected-account/connected-account.module';
|
||||||
import { MessageChannelMessageAssociationModule } from 'src/workspace/messaging/repositories/message-channel-message-association/message-channel-message-assocation.module';
|
import { MessageChannelMessageAssociationModule } from 'src/workspace/messaging/repositories/message-channel-message-association/message-channel-message-assocation.module';
|
||||||
@ -20,6 +21,7 @@ import { MessagingWorkspaceMemberListener } from 'src/workspace/messaging/listen
|
|||||||
import { MessagingMessageChannelListener } from 'src/workspace/messaging/listeners/messaging-message-channel.listener';
|
import { MessagingMessageChannelListener } from 'src/workspace/messaging/listeners/messaging-message-channel.listener';
|
||||||
import { MessageService } from 'src/workspace/messaging/repositories/message/message.service';
|
import { MessageService } from 'src/workspace/messaging/repositories/message/message.service';
|
||||||
import { WorkspaceMemberModule } from 'src/workspace/messaging/repositories/workspace-member/workspace-member.module';
|
import { WorkspaceMemberModule } from 'src/workspace/messaging/repositories/workspace-member/workspace-member.module';
|
||||||
|
import { FeatureFlagEntity } from 'src/core/feature-flag/feature-flag.entity';
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
EnvironmentModule,
|
EnvironmentModule,
|
||||||
@ -31,6 +33,7 @@ import { WorkspaceMemberModule } from 'src/workspace/messaging/repositories/work
|
|||||||
MessageThreadModule,
|
MessageThreadModule,
|
||||||
MessageParticipantModule,
|
MessageParticipantModule,
|
||||||
WorkspaceMemberModule,
|
WorkspaceMemberModule,
|
||||||
|
TypeOrmModule.forFeature([FeatureFlagEntity], 'core'),
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
GmailFullSyncService,
|
GmailFullSyncService,
|
||||||
|
|||||||
@ -311,6 +311,9 @@ export class WorkspaceQueryRunnerService {
|
|||||||
private removeNestedProperties<Record extends IRecord = IRecord>(
|
private removeNestedProperties<Record extends IRecord = IRecord>(
|
||||||
record: Record,
|
record: Record,
|
||||||
) {
|
) {
|
||||||
|
if (!record) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const sanitizedRecord = {};
|
const sanitizedRecord = {};
|
||||||
|
|
||||||
for (const [key, value] of Object.entries(record)) {
|
for (const [key, value] of Object.entries(record)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user