@ -41,6 +41,7 @@ import { WorkspaceInvitationModule } from 'src/engine/core-modules/workspace-inv
|
|||||||
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
|
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||||
import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module';
|
import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module';
|
||||||
import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module';
|
import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module';
|
||||||
|
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||||
import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module';
|
import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module';
|
||||||
import { WorkspaceManagerModule } from 'src/engine/workspace-manager/workspace-manager.module';
|
import { WorkspaceManagerModule } from 'src/engine/workspace-manager/workspace-manager.module';
|
||||||
import { ConnectedAccountModule } from 'src/modules/connected-account/connected-account.module';
|
import { ConnectedAccountModule } from 'src/modules/connected-account/connected-account.module';
|
||||||
@ -72,6 +73,7 @@ import { JwtAuthStrategy } from './strategies/jwt.auth.strategy';
|
|||||||
],
|
],
|
||||||
'core',
|
'core',
|
||||||
),
|
),
|
||||||
|
TypeOrmModule.forFeature([ObjectMetadataEntity], 'metadata'),
|
||||||
HttpModule,
|
HttpModule,
|
||||||
UserWorkspaceModule,
|
UserWorkspaceModule,
|
||||||
WorkspaceModule,
|
WorkspaceModule,
|
||||||
|
|||||||
@ -1,14 +1,18 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
|
||||||
import { EntityManager } from 'typeorm';
|
import { EntityManager, Repository } from 'typeorm';
|
||||||
import { v4 } from 'uuid';
|
import { v4 } from 'uuid';
|
||||||
|
|
||||||
|
import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action';
|
||||||
import { getGoogleApisOauthScopes } from 'src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes';
|
import { getGoogleApisOauthScopes } from 'src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes';
|
||||||
import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service';
|
import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service';
|
||||||
import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decorators/message-queue.decorator';
|
import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decorators/message-queue.decorator';
|
||||||
import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants';
|
import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants';
|
||||||
import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service';
|
import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service';
|
||||||
|
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||||
import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager';
|
import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager';
|
||||||
|
import { WorkspaceEventEmitter } from 'src/engine/workspace-event-emitter/workspace-event-emitter';
|
||||||
import {
|
import {
|
||||||
CalendarEventListFetchJob,
|
CalendarEventListFetchJob,
|
||||||
CalendarEventListFetchJobData,
|
CalendarEventListFetchJobData,
|
||||||
@ -45,6 +49,9 @@ export class GoogleAPIsService {
|
|||||||
private readonly calendarQueueService: MessageQueueService,
|
private readonly calendarQueueService: MessageQueueService,
|
||||||
private readonly environmentService: EnvironmentService,
|
private readonly environmentService: EnvironmentService,
|
||||||
private readonly accountsToReconnectService: AccountsToReconnectService,
|
private readonly accountsToReconnectService: AccountsToReconnectService,
|
||||||
|
private readonly workspaceEventEmitter: WorkspaceEventEmitter,
|
||||||
|
@InjectRepository(ObjectMetadataEntity, 'metadata')
|
||||||
|
private readonly objectMetadataRepository: Repository<ObjectMetadataEntity>,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
async refreshGoogleRefreshToken(input: {
|
async refreshGoogleRefreshToken(input: {
|
||||||
@ -100,7 +107,7 @@ export class GoogleAPIsService {
|
|||||||
|
|
||||||
await workspaceDataSource.transaction(async (manager: EntityManager) => {
|
await workspaceDataSource.transaction(async (manager: EntityManager) => {
|
||||||
if (!existingAccountId) {
|
if (!existingAccountId) {
|
||||||
await connectedAccountRepository.save(
|
const newConnectedAccount = await connectedAccountRepository.save(
|
||||||
{
|
{
|
||||||
id: newOrExistingConnectedAccountId,
|
id: newOrExistingConnectedAccountId,
|
||||||
handle,
|
handle,
|
||||||
@ -114,7 +121,27 @@ export class GoogleAPIsService {
|
|||||||
manager,
|
manager,
|
||||||
);
|
);
|
||||||
|
|
||||||
await messageChannelRepository.save(
|
const connectedAccountMetadata =
|
||||||
|
await this.objectMetadataRepository.findOneOrFail({
|
||||||
|
where: { nameSingular: 'connectedAccount', workspaceId },
|
||||||
|
});
|
||||||
|
|
||||||
|
this.workspaceEventEmitter.emitDatabaseBatchEvent({
|
||||||
|
objectMetadataNameSingular: 'connectedAccount',
|
||||||
|
action: DatabaseEventAction.CREATED,
|
||||||
|
events: [
|
||||||
|
{
|
||||||
|
recordId: newConnectedAccount.id,
|
||||||
|
objectMetadata: connectedAccountMetadata,
|
||||||
|
properties: {
|
||||||
|
after: newConnectedAccount,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
workspaceId,
|
||||||
|
});
|
||||||
|
|
||||||
|
const newMessageChannel = await messageChannelRepository.save(
|
||||||
{
|
{
|
||||||
id: v4(),
|
id: v4(),
|
||||||
connectedAccountId: newOrExistingConnectedAccountId,
|
connectedAccountId: newOrExistingConnectedAccountId,
|
||||||
@ -128,8 +155,28 @@ export class GoogleAPIsService {
|
|||||||
manager,
|
manager,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const messageChannelMetadata =
|
||||||
|
await this.objectMetadataRepository.findOneOrFail({
|
||||||
|
where: { nameSingular: 'messageChannel', workspaceId },
|
||||||
|
});
|
||||||
|
|
||||||
|
this.workspaceEventEmitter.emitDatabaseBatchEvent({
|
||||||
|
objectMetadataNameSingular: 'messageChannel',
|
||||||
|
action: DatabaseEventAction.CREATED,
|
||||||
|
events: [
|
||||||
|
{
|
||||||
|
recordId: newMessageChannel.id,
|
||||||
|
objectMetadata: messageChannelMetadata,
|
||||||
|
properties: {
|
||||||
|
after: newMessageChannel,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
workspaceId,
|
||||||
|
});
|
||||||
|
|
||||||
if (isCalendarEnabled) {
|
if (isCalendarEnabled) {
|
||||||
await calendarChannelRepository.save(
|
const newCalendarChannel = await calendarChannelRepository.save(
|
||||||
{
|
{
|
||||||
id: v4(),
|
id: v4(),
|
||||||
connectedAccountId: newOrExistingConnectedAccountId,
|
connectedAccountId: newOrExistingConnectedAccountId,
|
||||||
@ -141,9 +188,29 @@ export class GoogleAPIsService {
|
|||||||
{},
|
{},
|
||||||
manager,
|
manager,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const calendarChannelMetadata =
|
||||||
|
await this.objectMetadataRepository.findOneOrFail({
|
||||||
|
where: { nameSingular: 'calendarChannel', workspaceId },
|
||||||
|
});
|
||||||
|
|
||||||
|
this.workspaceEventEmitter.emitDatabaseBatchEvent({
|
||||||
|
objectMetadataNameSingular: 'calendarChannel',
|
||||||
|
action: DatabaseEventAction.CREATED,
|
||||||
|
events: [
|
||||||
|
{
|
||||||
|
recordId: newCalendarChannel.id,
|
||||||
|
objectMetadata: calendarChannelMetadata,
|
||||||
|
properties: {
|
||||||
|
after: newCalendarChannel,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
workspaceId,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
await connectedAccountRepository.update(
|
const updatedConnectedAccount = await connectedAccountRepository.update(
|
||||||
{
|
{
|
||||||
id: newOrExistingConnectedAccountId,
|
id: newOrExistingConnectedAccountId,
|
||||||
},
|
},
|
||||||
@ -155,6 +222,30 @@ export class GoogleAPIsService {
|
|||||||
manager,
|
manager,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const connectedAccountMetadata =
|
||||||
|
await this.objectMetadataRepository.findOneOrFail({
|
||||||
|
where: { nameSingular: 'connectedAccount', workspaceId },
|
||||||
|
});
|
||||||
|
|
||||||
|
this.workspaceEventEmitter.emitDatabaseBatchEvent({
|
||||||
|
objectMetadataNameSingular: 'connectedAccount',
|
||||||
|
action: DatabaseEventAction.UPDATED,
|
||||||
|
events: [
|
||||||
|
{
|
||||||
|
recordId: newOrExistingConnectedAccountId,
|
||||||
|
objectMetadata: connectedAccountMetadata,
|
||||||
|
properties: {
|
||||||
|
before: connectedAccount,
|
||||||
|
after: {
|
||||||
|
...connectedAccount,
|
||||||
|
...updatedConnectedAccount.raw[0],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
workspaceId,
|
||||||
|
});
|
||||||
|
|
||||||
const workspaceMemberRepository =
|
const workspaceMemberRepository =
|
||||||
await this.twentyORMGlobalManager.getRepositoryForWorkspace<WorkspaceMemberWorkspaceEntity>(
|
await this.twentyORMGlobalManager.getRepositoryForWorkspace<WorkspaceMemberWorkspaceEntity>(
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@ -173,7 +264,11 @@ export class GoogleAPIsService {
|
|||||||
newOrExistingConnectedAccountId,
|
newOrExistingConnectedAccountId,
|
||||||
);
|
);
|
||||||
|
|
||||||
await messageChannelRepository.update(
|
const messageChannels = await messageChannelRepository.find({
|
||||||
|
where: { connectedAccountId: newOrExistingConnectedAccountId },
|
||||||
|
});
|
||||||
|
|
||||||
|
const messageChannelUpdates = await messageChannelRepository.update(
|
||||||
{
|
{
|
||||||
connectedAccountId: newOrExistingConnectedAccountId,
|
connectedAccountId: newOrExistingConnectedAccountId,
|
||||||
},
|
},
|
||||||
@ -185,6 +280,25 @@ export class GoogleAPIsService {
|
|||||||
},
|
},
|
||||||
manager,
|
manager,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const messageChannelMetadata =
|
||||||
|
await this.objectMetadataRepository.findOneOrFail({
|
||||||
|
where: { nameSingular: 'messageChannel', workspaceId },
|
||||||
|
});
|
||||||
|
|
||||||
|
this.workspaceEventEmitter.emitDatabaseBatchEvent({
|
||||||
|
objectMetadataNameSingular: 'messageChannel',
|
||||||
|
action: DatabaseEventAction.UPDATED,
|
||||||
|
events: messageChannels.map((messageChannel) => ({
|
||||||
|
recordId: messageChannel.id,
|
||||||
|
objectMetadata: messageChannelMetadata,
|
||||||
|
properties: {
|
||||||
|
before: messageChannel,
|
||||||
|
after: { ...messageChannel, ...messageChannelUpdates.raw[0] },
|
||||||
|
},
|
||||||
|
})),
|
||||||
|
workspaceId,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -1,13 +1,17 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
|
||||||
import { EntityManager } from 'typeorm';
|
import { EntityManager, Repository } from 'typeorm';
|
||||||
import { v4 } from 'uuid';
|
import { v4 } from 'uuid';
|
||||||
|
|
||||||
|
import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action';
|
||||||
import { getMicrosoftApisOauthScopes } from 'src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes';
|
import { getMicrosoftApisOauthScopes } from 'src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes';
|
||||||
import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decorators/message-queue.decorator';
|
import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decorators/message-queue.decorator';
|
||||||
import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants';
|
import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants';
|
||||||
import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service';
|
import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service';
|
||||||
|
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||||
import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager';
|
import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager';
|
||||||
|
import { WorkspaceEventEmitter } from 'src/engine/workspace-event-emitter/workspace-event-emitter';
|
||||||
import {
|
import {
|
||||||
CalendarEventListFetchJob,
|
CalendarEventListFetchJob,
|
||||||
CalendarEventListFetchJobData,
|
CalendarEventListFetchJobData,
|
||||||
@ -43,6 +47,9 @@ export class MicrosoftAPIsService {
|
|||||||
@InjectMessageQueue(MessageQueue.calendarQueue)
|
@InjectMessageQueue(MessageQueue.calendarQueue)
|
||||||
private readonly calendarQueueService: MessageQueueService,
|
private readonly calendarQueueService: MessageQueueService,
|
||||||
private readonly accountsToReconnectService: AccountsToReconnectService,
|
private readonly accountsToReconnectService: AccountsToReconnectService,
|
||||||
|
private readonly workspaceEventEmitter: WorkspaceEventEmitter,
|
||||||
|
@InjectRepository(ObjectMetadataEntity, 'metadata')
|
||||||
|
private readonly objectMetadataRepository: Repository<ObjectMetadataEntity>,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
async refreshMicrosoftRefreshToken(input: {
|
async refreshMicrosoftRefreshToken(input: {
|
||||||
@ -94,7 +101,7 @@ export class MicrosoftAPIsService {
|
|||||||
|
|
||||||
await workspaceDataSource.transaction(async (manager: EntityManager) => {
|
await workspaceDataSource.transaction(async (manager: EntityManager) => {
|
||||||
if (!existingAccountId) {
|
if (!existingAccountId) {
|
||||||
await connectedAccountRepository.save(
|
const newConnectedAccount = await connectedAccountRepository.save(
|
||||||
{
|
{
|
||||||
id: newOrExistingConnectedAccountId,
|
id: newOrExistingConnectedAccountId,
|
||||||
handle,
|
handle,
|
||||||
@ -108,7 +115,27 @@ export class MicrosoftAPIsService {
|
|||||||
manager,
|
manager,
|
||||||
);
|
);
|
||||||
|
|
||||||
await messageChannelRepository.save(
|
const connectedAccountMetadata =
|
||||||
|
await this.objectMetadataRepository.findOneOrFail({
|
||||||
|
where: { nameSingular: 'connectedAccount', workspaceId },
|
||||||
|
});
|
||||||
|
|
||||||
|
this.workspaceEventEmitter.emitDatabaseBatchEvent({
|
||||||
|
objectMetadataNameSingular: 'connectedAccount',
|
||||||
|
action: DatabaseEventAction.CREATED,
|
||||||
|
events: [
|
||||||
|
{
|
||||||
|
recordId: newConnectedAccount.id,
|
||||||
|
objectMetadata: connectedAccountMetadata,
|
||||||
|
properties: {
|
||||||
|
after: newConnectedAccount,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
workspaceId,
|
||||||
|
});
|
||||||
|
|
||||||
|
const newMessageChannel = await messageChannelRepository.save(
|
||||||
{
|
{
|
||||||
id: v4(),
|
id: v4(),
|
||||||
connectedAccountId: newOrExistingConnectedAccountId,
|
connectedAccountId: newOrExistingConnectedAccountId,
|
||||||
@ -122,7 +149,27 @@ export class MicrosoftAPIsService {
|
|||||||
manager,
|
manager,
|
||||||
);
|
);
|
||||||
|
|
||||||
await calendarChannelRepository.save(
|
const messageChannelMetadata =
|
||||||
|
await this.objectMetadataRepository.findOneOrFail({
|
||||||
|
where: { nameSingular: 'messageChannel', workspaceId },
|
||||||
|
});
|
||||||
|
|
||||||
|
this.workspaceEventEmitter.emitDatabaseBatchEvent({
|
||||||
|
objectMetadataNameSingular: 'messageChannel',
|
||||||
|
action: DatabaseEventAction.CREATED,
|
||||||
|
events: [
|
||||||
|
{
|
||||||
|
recordId: newMessageChannel.id,
|
||||||
|
objectMetadata: messageChannelMetadata,
|
||||||
|
properties: {
|
||||||
|
after: newMessageChannel,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
workspaceId,
|
||||||
|
});
|
||||||
|
|
||||||
|
const newCalendarChannel = await calendarChannelRepository.save(
|
||||||
{
|
{
|
||||||
id: v4(),
|
id: v4(),
|
||||||
connectedAccountId: newOrExistingConnectedAccountId,
|
connectedAccountId: newOrExistingConnectedAccountId,
|
||||||
@ -133,8 +180,28 @@ export class MicrosoftAPIsService {
|
|||||||
{},
|
{},
|
||||||
manager,
|
manager,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const calendarChannelMetadata =
|
||||||
|
await this.objectMetadataRepository.findOneOrFail({
|
||||||
|
where: { nameSingular: 'calendarChannel', workspaceId },
|
||||||
|
});
|
||||||
|
|
||||||
|
this.workspaceEventEmitter.emitDatabaseBatchEvent({
|
||||||
|
objectMetadataNameSingular: 'calendarChannel',
|
||||||
|
action: DatabaseEventAction.CREATED,
|
||||||
|
events: [
|
||||||
|
{
|
||||||
|
recordId: newCalendarChannel.id,
|
||||||
|
objectMetadata: calendarChannelMetadata,
|
||||||
|
properties: {
|
||||||
|
after: newCalendarChannel,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
workspaceId,
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
await connectedAccountRepository.update(
|
const updatedConnectedAccount = await connectedAccountRepository.update(
|
||||||
{
|
{
|
||||||
id: newOrExistingConnectedAccountId,
|
id: newOrExistingConnectedAccountId,
|
||||||
},
|
},
|
||||||
@ -146,6 +213,30 @@ export class MicrosoftAPIsService {
|
|||||||
manager,
|
manager,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const connectedAccountMetadata =
|
||||||
|
await this.objectMetadataRepository.findOneOrFail({
|
||||||
|
where: { nameSingular: 'connectedAccount', workspaceId },
|
||||||
|
});
|
||||||
|
|
||||||
|
this.workspaceEventEmitter.emitDatabaseBatchEvent({
|
||||||
|
objectMetadataNameSingular: 'connectedAccount',
|
||||||
|
action: DatabaseEventAction.UPDATED,
|
||||||
|
events: [
|
||||||
|
{
|
||||||
|
recordId: newOrExistingConnectedAccountId,
|
||||||
|
objectMetadata: connectedAccountMetadata,
|
||||||
|
properties: {
|
||||||
|
before: connectedAccount,
|
||||||
|
after: {
|
||||||
|
...connectedAccount,
|
||||||
|
...updatedConnectedAccount.raw[0],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
workspaceId,
|
||||||
|
});
|
||||||
|
|
||||||
const workspaceMemberRepository =
|
const workspaceMemberRepository =
|
||||||
await this.twentyORMGlobalManager.getRepositoryForWorkspace<WorkspaceMemberWorkspaceEntity>(
|
await this.twentyORMGlobalManager.getRepositoryForWorkspace<WorkspaceMemberWorkspaceEntity>(
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@ -164,7 +255,11 @@ export class MicrosoftAPIsService {
|
|||||||
newOrExistingConnectedAccountId,
|
newOrExistingConnectedAccountId,
|
||||||
);
|
);
|
||||||
|
|
||||||
await messageChannelRepository.update(
|
const messageChannels = await messageChannelRepository.find({
|
||||||
|
where: { connectedAccountId: newOrExistingConnectedAccountId },
|
||||||
|
});
|
||||||
|
|
||||||
|
const messageChannelUpdates = await messageChannelRepository.update(
|
||||||
{
|
{
|
||||||
connectedAccountId: newOrExistingConnectedAccountId,
|
connectedAccountId: newOrExistingConnectedAccountId,
|
||||||
},
|
},
|
||||||
@ -176,6 +271,25 @@ export class MicrosoftAPIsService {
|
|||||||
},
|
},
|
||||||
manager,
|
manager,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const messageChannelMetadata =
|
||||||
|
await this.objectMetadataRepository.findOneOrFail({
|
||||||
|
where: { nameSingular: 'messageChannel', workspaceId },
|
||||||
|
});
|
||||||
|
|
||||||
|
this.workspaceEventEmitter.emitDatabaseBatchEvent({
|
||||||
|
objectMetadataNameSingular: 'messageChannel',
|
||||||
|
action: DatabaseEventAction.UPDATED,
|
||||||
|
events: messageChannels.map((messageChannel) => ({
|
||||||
|
recordId: messageChannel.id,
|
||||||
|
objectMetadata: messageChannelMetadata,
|
||||||
|
properties: {
|
||||||
|
before: messageChannel,
|
||||||
|
after: { ...messageChannel, ...messageChannelUpdates.raw[0] },
|
||||||
|
},
|
||||||
|
})),
|
||||||
|
workspaceId,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -85,6 +85,7 @@ export class UserWorkspaceService extends TypeOrmQueryService<UserWorkspace> {
|
|||||||
const objectMetadata = await this.objectMetadataRepository.findOneOrFail({
|
const objectMetadata = await this.objectMetadataRepository.findOneOrFail({
|
||||||
where: {
|
where: {
|
||||||
nameSingular: 'workspaceMember',
|
nameSingular: 'workspaceMember',
|
||||||
|
workspaceId,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -101,7 +101,7 @@ export class UserService extends TypeOrmQueryService<User> {
|
|||||||
const objectMetadata = await this.objectMetadataRepository.findOneOrFail({
|
const objectMetadata = await this.objectMetadataRepository.findOneOrFail({
|
||||||
where: {
|
where: {
|
||||||
nameSingular: 'workspaceMember',
|
nameSingular: 'workspaceMember',
|
||||||
workspaceId: workspaceId,
|
workspaceId,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm';
|
|||||||
|
|
||||||
import { Repository } from 'typeorm';
|
import { Repository } from 'typeorm';
|
||||||
|
|
||||||
|
import { OnCustomBatchEvent } from 'src/engine/api/graphql/graphql-query-runner/decorators/on-custom-batch-event.decorator';
|
||||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||||
import { InjectObjectMetadataRepository } from 'src/engine/object-metadata-repository/object-metadata-repository.decorator';
|
import { InjectObjectMetadataRepository } from 'src/engine/object-metadata-repository/object-metadata-repository.decorator';
|
||||||
import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/workspace-datasource.service';
|
import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/workspace-datasource.service';
|
||||||
@ -10,7 +11,6 @@ import { WorkspaceEventBatch } from 'src/engine/workspace-event-emitter/types/wo
|
|||||||
import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity';
|
import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity';
|
||||||
import { TimelineActivityRepository } from 'src/modules/timeline/repositiories/timeline-activity.repository';
|
import { TimelineActivityRepository } from 'src/modules/timeline/repositiories/timeline-activity.repository';
|
||||||
import { TimelineActivityWorkspaceEntity } from 'src/modules/timeline/standard-objects/timeline-activity.workspace-entity';
|
import { TimelineActivityWorkspaceEntity } from 'src/modules/timeline/standard-objects/timeline-activity.workspace-entity';
|
||||||
import { OnCustomBatchEvent } from 'src/engine/api/graphql/graphql-query-runner/decorators/on-custom-batch-event.decorator';
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CalendarEventParticipantListener {
|
export class CalendarEventParticipantListener {
|
||||||
|
|||||||
@ -5,13 +5,13 @@ import { Repository } from 'typeorm';
|
|||||||
import { WorkspaceQueryHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
import { WorkspaceQueryHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
||||||
import { DeleteOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
import { DeleteOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||||
|
|
||||||
|
import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action';
|
||||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||||
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||||
|
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||||
import { TwentyORMManager } from 'src/engine/twenty-orm/twenty-orm.manager';
|
import { TwentyORMManager } from 'src/engine/twenty-orm/twenty-orm.manager';
|
||||||
import { WorkspaceEventEmitter } from 'src/engine/workspace-event-emitter/workspace-event-emitter';
|
import { WorkspaceEventEmitter } from 'src/engine/workspace-event-emitter/workspace-event-emitter';
|
||||||
import { MessageChannelWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel.workspace-entity';
|
import { MessageChannelWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel.workspace-entity';
|
||||||
import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action';
|
|
||||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
|
||||||
|
|
||||||
@WorkspaceQueryHook(`connectedAccount.destroyOne`)
|
@WorkspaceQueryHook(`connectedAccount.destroyOne`)
|
||||||
export class ConnectedAccountDeleteOnePreQueryHook
|
export class ConnectedAccountDeleteOnePreQueryHook
|
||||||
@ -43,6 +43,7 @@ export class ConnectedAccountDeleteOnePreQueryHook
|
|||||||
const objectMetadata = await this.objectMetadataRepository.findOneOrFail({
|
const objectMetadata = await this.objectMetadataRepository.findOneOrFail({
|
||||||
where: {
|
where: {
|
||||||
nameSingular: 'messageChannel',
|
nameSingular: 'messageChannel',
|
||||||
|
workspaceId: authContext.workspace.id,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import { Repository } from 'typeorm';
|
|||||||
|
|
||||||
import { WorkspaceQueryPostHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
import { WorkspaceQueryPostHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
||||||
|
|
||||||
|
import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action';
|
||||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||||
import { WorkspaceQueryHookType } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/types/workspace-query-hook.type';
|
import { WorkspaceQueryHookType } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/types/workspace-query-hook.type';
|
||||||
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||||
@ -15,7 +16,6 @@ import {
|
|||||||
WorkflowVersionWorkspaceEntity,
|
WorkflowVersionWorkspaceEntity,
|
||||||
} from 'src/modules/workflow/common/standard-objects/workflow-version.workspace-entity';
|
} from 'src/modules/workflow/common/standard-objects/workflow-version.workspace-entity';
|
||||||
import { WorkflowWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow.workspace-entity';
|
import { WorkflowWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow.workspace-entity';
|
||||||
import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action';
|
|
||||||
|
|
||||||
@WorkspaceQueryHook({
|
@WorkspaceQueryHook({
|
||||||
key: `workflow.createMany`,
|
key: `workflow.createMany`,
|
||||||
@ -58,6 +58,7 @@ export class WorkflowCreateManyPostQueryHook
|
|||||||
const objectMetadata = await this.objectMetadataRepository.findOneOrFail({
|
const objectMetadata = await this.objectMetadataRepository.findOneOrFail({
|
||||||
where: {
|
where: {
|
||||||
nameSingular: 'workflowVersion',
|
nameSingular: 'workflowVersion',
|
||||||
|
workspaceId: authContext.workspace.id,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import { Repository } from 'typeorm';
|
|||||||
|
|
||||||
import { WorkspaceQueryPostHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
import { WorkspaceQueryPostHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
||||||
|
|
||||||
|
import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action';
|
||||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||||
import { WorkspaceQueryHookType } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/types/workspace-query-hook.type';
|
import { WorkspaceQueryHookType } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/types/workspace-query-hook.type';
|
||||||
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||||
@ -15,7 +16,6 @@ import {
|
|||||||
WorkflowVersionWorkspaceEntity,
|
WorkflowVersionWorkspaceEntity,
|
||||||
} from 'src/modules/workflow/common/standard-objects/workflow-version.workspace-entity';
|
} from 'src/modules/workflow/common/standard-objects/workflow-version.workspace-entity';
|
||||||
import { WorkflowWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow.workspace-entity';
|
import { WorkflowWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow.workspace-entity';
|
||||||
import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action';
|
|
||||||
|
|
||||||
@WorkspaceQueryHook({
|
@WorkspaceQueryHook({
|
||||||
key: `workflow.createOne`,
|
key: `workflow.createOne`,
|
||||||
@ -54,6 +54,7 @@ export class WorkflowCreateOnePostQueryHook
|
|||||||
const objectMetadata = await this.objectMetadataRepository.findOneOrFail({
|
const objectMetadata = await this.objectMetadataRepository.findOneOrFail({
|
||||||
where: {
|
where: {
|
||||||
nameSingular: 'workflowVersion',
|
nameSingular: 'workflowVersion',
|
||||||
|
workspaceId: authContext.workspace.id,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -3,8 +3,10 @@ import { InjectRepository } from '@nestjs/typeorm';
|
|||||||
|
|
||||||
import { EntityManager, Repository } from 'typeorm';
|
import { EntityManager, Repository } from 'typeorm';
|
||||||
|
|
||||||
|
import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action';
|
||||||
import { buildCreatedByFromWorkspaceMember } from 'src/engine/core-modules/actor/utils/build-created-by-from-workspace-member.util';
|
import { buildCreatedByFromWorkspaceMember } from 'src/engine/core-modules/actor/utils/build-created-by-from-workspace-member.util';
|
||||||
import { User } from 'src/engine/core-modules/user/user.entity';
|
import { User } from 'src/engine/core-modules/user/user.entity';
|
||||||
|
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||||
import { ScopedWorkspaceContextFactory } from 'src/engine/twenty-orm/factories/scoped-workspace-context.factory';
|
import { ScopedWorkspaceContextFactory } from 'src/engine/twenty-orm/factories/scoped-workspace-context.factory';
|
||||||
import { WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository';
|
import { WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository';
|
||||||
import { TwentyORMManager } from 'src/engine/twenty-orm/twenty-orm.manager';
|
import { TwentyORMManager } from 'src/engine/twenty-orm/twenty-orm.manager';
|
||||||
@ -17,6 +19,8 @@ import { WorkflowWorkspaceEntity } from 'src/modules/workflow/common/standard-ob
|
|||||||
import { assertWorkflowVersionTriggerIsDefined } from 'src/modules/workflow/common/utils/assert-workflow-version-trigger-is-defined.util';
|
import { assertWorkflowVersionTriggerIsDefined } from 'src/modules/workflow/common/utils/assert-workflow-version-trigger-is-defined.util';
|
||||||
import { WorkflowCommonWorkspaceService } from 'src/modules/workflow/common/workspace-services/workflow-common.workspace-service';
|
import { WorkflowCommonWorkspaceService } from 'src/modules/workflow/common/workspace-services/workflow-common.workspace-service';
|
||||||
import { WorkflowRunnerWorkspaceService } from 'src/modules/workflow/workflow-runner/workspace-services/workflow-runner.workspace-service';
|
import { WorkflowRunnerWorkspaceService } from 'src/modules/workflow/workflow-runner/workspace-services/workflow-runner.workspace-service';
|
||||||
|
import { WORKFLOW_VERSION_STATUS_UPDATED } from 'src/modules/workflow/workflow-status/constants/workflow-version-status-updated.constants';
|
||||||
|
import { WorkflowVersionStatusUpdate } from 'src/modules/workflow/workflow-status/jobs/workflow-statuses-update.job';
|
||||||
import { DatabaseEventTriggerService } from 'src/modules/workflow/workflow-trigger/database-event-trigger/database-event-trigger.service';
|
import { DatabaseEventTriggerService } from 'src/modules/workflow/workflow-trigger/database-event-trigger/database-event-trigger.service';
|
||||||
import {
|
import {
|
||||||
WorkflowTriggerException,
|
WorkflowTriggerException,
|
||||||
@ -25,10 +29,6 @@ import {
|
|||||||
import { WorkflowTriggerType } from 'src/modules/workflow/workflow-trigger/types/workflow-trigger.type';
|
import { WorkflowTriggerType } from 'src/modules/workflow/workflow-trigger/types/workflow-trigger.type';
|
||||||
import { assertVersionCanBeActivated } from 'src/modules/workflow/workflow-trigger/utils/assert-version-can-be-activated.util';
|
import { assertVersionCanBeActivated } from 'src/modules/workflow/workflow-trigger/utils/assert-version-can-be-activated.util';
|
||||||
import { assertNever } from 'src/utils/assert';
|
import { assertNever } from 'src/utils/assert';
|
||||||
import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action';
|
|
||||||
import { WORKFLOW_VERSION_STATUS_UPDATED } from 'src/modules/workflow/workflow-status/constants/workflow-version-status-updated.constants';
|
|
||||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
|
||||||
import { WorkflowVersionStatusUpdate } from 'src/modules/workflow/workflow-status/jobs/workflow-statuses-update.job';
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class WorkflowTriggerWorkspaceService {
|
export class WorkflowTriggerWorkspaceService {
|
||||||
@ -365,6 +365,7 @@ export class WorkflowTriggerWorkspaceService {
|
|||||||
const objectMetadata = await this.objectMetadataRepository.findOneOrFail({
|
const objectMetadata = await this.objectMetadataRepository.findOneOrFail({
|
||||||
where: {
|
where: {
|
||||||
nameSingular: 'workflowVersion',
|
nameSingular: 'workflowVersion',
|
||||||
|
workspaceId,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user