Improve workspace auth context surface (#18164)
This commit is contained in:
+6
-12
@@ -1,17 +1,15 @@
|
||||
import { BadRequestException } from '@nestjs/common';
|
||||
|
||||
import { assertIsDefinedOrThrow } from 'twenty-shared/utils';
|
||||
|
||||
import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
||||
import { type CreateManyResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { isUserAuthContext } from 'src/engine/core-modules/auth/guards/is-user-auth-context.guard';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import {
|
||||
type BlocklistItem,
|
||||
BlocklistValidationService,
|
||||
} from 'src/modules/blocklist/blocklist-validation-manager/services/blocklist-validation.service';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
|
||||
@WorkspaceQueryHook(`blocklist.createMany`)
|
||||
export class BlocklistCreateManyPreQueryHook
|
||||
@@ -22,22 +20,18 @@ export class BlocklistCreateManyPreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: CreateManyResolverArgs<BlocklistItem>,
|
||||
): Promise<CreateManyResolverArgs<BlocklistItem>> {
|
||||
if (!authContext.user?.id) {
|
||||
if (!isUserAuthContext(authContext)) {
|
||||
throw new BadRequestException('User id is required');
|
||||
}
|
||||
|
||||
const workspace = authContext.workspace;
|
||||
|
||||
assertIsDefinedOrThrow(workspace, WorkspaceNotFoundDefaultError);
|
||||
|
||||
await this.blocklistValidationService.validateBlocklistForCreateMany(
|
||||
payload,
|
||||
authContext.user?.id,
|
||||
workspace.id,
|
||||
authContext.user.id,
|
||||
authContext.workspace.id,
|
||||
);
|
||||
|
||||
return payload;
|
||||
|
||||
+5
-9
@@ -1,17 +1,15 @@
|
||||
import { BadRequestException } from '@nestjs/common';
|
||||
|
||||
import { assertIsDefinedOrThrow } from 'twenty-shared/utils';
|
||||
|
||||
import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
||||
import { type UpdateOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { isUserAuthContext } from 'src/engine/core-modules/auth/guards/is-user-auth-context.guard';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import {
|
||||
type BlocklistItem,
|
||||
BlocklistValidationService,
|
||||
} from 'src/modules/blocklist/blocklist-validation-manager/services/blocklist-validation.service';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
|
||||
@WorkspaceQueryHook(`blocklist.updateOne`)
|
||||
export class BlocklistUpdateOnePreQueryHook
|
||||
@@ -22,21 +20,19 @@ export class BlocklistUpdateOnePreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: UpdateOneResolverArgs<BlocklistItem>,
|
||||
): Promise<UpdateOneResolverArgs<BlocklistItem>> {
|
||||
if (!authContext.user?.id) {
|
||||
if (!isUserAuthContext(authContext)) {
|
||||
throw new BadRequestException('User id is required');
|
||||
}
|
||||
|
||||
const workspace = authContext.workspace;
|
||||
|
||||
assertIsDefinedOrThrow(workspace, WorkspaceNotFoundDefaultError);
|
||||
|
||||
await this.blocklistValidationService.validateBlocklistForUpdateOne(
|
||||
payload,
|
||||
authContext.user?.id,
|
||||
authContext.user.id,
|
||||
workspace.id,
|
||||
);
|
||||
|
||||
|
||||
+10
-10
@@ -1,10 +1,9 @@
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { isUserAuthContext } from 'src/engine/core-modules/auth/guards/is-user-auth-context.guard';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { ForbiddenError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util';
|
||||
import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications';
|
||||
import { ApplyCalendarEventsVisibilityRestrictionsService } from 'src/modules/calendar/common/query-hooks/calendar-event/services/apply-calendar-events-visibility-restrictions.service';
|
||||
@@ -22,20 +21,21 @@ export class CalendarEventFindManyPostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: CalendarEventWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
const { user, apiKey, application } = authContext;
|
||||
const isUserContext = isUserAuthContext(authContext);
|
||||
const userId = isUserContext ? authContext.user.id : undefined;
|
||||
|
||||
const isTwentyStandardApplication =
|
||||
isDefined(application) &&
|
||||
application.universalIdentifier ===
|
||||
authContext.type === 'application' &&
|
||||
authContext.application.universalIdentifier ===
|
||||
TWENTY_STANDARD_APPLICATION.universalIdentifier;
|
||||
|
||||
if (
|
||||
!isDefined(user) &&
|
||||
!isDefined(apiKey) &&
|
||||
!isUserContext &&
|
||||
authContext.type !== 'apiKey' &&
|
||||
!isTwentyStandardApplication
|
||||
) {
|
||||
throw new ForbiddenError('Authentication is required');
|
||||
@@ -50,7 +50,7 @@ export class CalendarEventFindManyPostQueryHook
|
||||
await this.applyCalendarEventsVisibilityRestrictionsService.applyCalendarEventsVisibilityRestrictions(
|
||||
payload,
|
||||
workspace.id,
|
||||
user?.id,
|
||||
userId,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
+10
-10
@@ -1,10 +1,9 @@
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { isUserAuthContext } from 'src/engine/core-modules/auth/guards/is-user-auth-context.guard';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { ForbiddenError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util';
|
||||
import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications';
|
||||
import { ApplyCalendarEventsVisibilityRestrictionsService } from 'src/modules/calendar/common/query-hooks/calendar-event/services/apply-calendar-events-visibility-restrictions.service';
|
||||
@@ -22,20 +21,21 @@ export class CalendarEventFindOnePostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: CalendarEventWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
const { user, apiKey, application } = authContext;
|
||||
const isUserContext = isUserAuthContext(authContext);
|
||||
const userId = isUserContext ? authContext.user.id : undefined;
|
||||
|
||||
const isTwentyStandardApplication =
|
||||
isDefined(application) &&
|
||||
application.universalIdentifier ===
|
||||
authContext.type === 'application' &&
|
||||
authContext.application.universalIdentifier ===
|
||||
TWENTY_STANDARD_APPLICATION.universalIdentifier;
|
||||
|
||||
if (
|
||||
!isDefined(user) &&
|
||||
!isDefined(apiKey) &&
|
||||
!isUserContext &&
|
||||
authContext.type !== 'apiKey' &&
|
||||
!isTwentyStandardApplication
|
||||
) {
|
||||
throw new ForbiddenError('Authentication is required');
|
||||
@@ -50,7 +50,7 @@ export class CalendarEventFindOnePostQueryHook
|
||||
await this.applyCalendarEventsVisibilityRestrictionsService.applyCalendarEventsVisibilityRestrictions(
|
||||
payload,
|
||||
workspace.id,
|
||||
user?.id,
|
||||
userId,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-3
@@ -6,7 +6,6 @@ import { type DeleteOneResolverArgs } from 'src/engine/api/graphql/workspace-res
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
|
||||
@@ -26,7 +25,7 @@ export class ConnectedAccountDeleteOnePreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: DeleteOneResolverArgs,
|
||||
): Promise<DeleteOneResolverArgs> {
|
||||
@@ -49,7 +48,7 @@ export class ConnectedAccountDeleteOnePreQueryHook
|
||||
connectedAccountId,
|
||||
});
|
||||
},
|
||||
authContext as WorkspaceAuthContext,
|
||||
authContext,
|
||||
);
|
||||
|
||||
const { flatObjectMetadataMaps } =
|
||||
|
||||
+4
-21
@@ -1,21 +1,13 @@
|
||||
import { UseFilters, UseGuards, UsePipes } from '@nestjs/common';
|
||||
import { Args, Query } from '@nestjs/graphql';
|
||||
|
||||
import {
|
||||
AuthContext,
|
||||
type AuthContextUser,
|
||||
} from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator';
|
||||
import { getWorkspaceAuthContext } from 'src/engine/core-modules/auth/storage/workspace-auth-context.storage';
|
||||
import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe';
|
||||
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||
import { AuthUserWorkspaceId } from 'src/engine/decorators/auth/auth-user-workspace-id.decorator';
|
||||
import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator';
|
||||
import { AuthWorkspaceMemberId } from 'src/engine/decorators/auth/auth-workspace-member-id.decorator';
|
||||
import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
|
||||
import { NoPermissionGuard } from 'src/engine/guards/no-permission.guard';
|
||||
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
|
||||
import { BarChartDataInput } from 'src/modules/dashboard/chart-data/dtos/inputs/bar-chart-data.input';
|
||||
import { BarChartDataDTO } from 'src/modules/dashboard/chart-data/dtos/bar-chart-data.dto';
|
||||
import { BarChartDataInput } from 'src/modules/dashboard/chart-data/dtos/inputs/bar-chart-data.input';
|
||||
import { ChartDataGraphqlApiExceptionFilter } from 'src/modules/dashboard/chart-data/filters/chart-data-graphql-api-exception.filter';
|
||||
import { BarChartDataService } from 'src/modules/dashboard/chart-data/services/bar-chart-data.service';
|
||||
|
||||
@@ -30,22 +22,13 @@ export class BarChartDataResolver {
|
||||
@UseGuards(NoPermissionGuard)
|
||||
async barChartData(
|
||||
@Args('input') input: BarChartDataInput,
|
||||
@AuthWorkspace() workspace: WorkspaceEntity,
|
||||
@AuthUser() user: AuthContextUser,
|
||||
@AuthWorkspaceMemberId() workspaceMemberId: string,
|
||||
@AuthUserWorkspaceId() userWorkspaceId: string,
|
||||
): Promise<BarChartDataDTO> {
|
||||
const authContext: AuthContext = {
|
||||
user,
|
||||
workspace,
|
||||
workspaceMemberId,
|
||||
userWorkspaceId,
|
||||
};
|
||||
const authContext = getWorkspaceAuthContext();
|
||||
|
||||
return this.barChartDataService.getBarChartData({
|
||||
objectMetadataId: input.objectMetadataId,
|
||||
configuration: input.configuration,
|
||||
workspaceId: workspace.id,
|
||||
workspaceId: authContext.workspace.id,
|
||||
authContext,
|
||||
});
|
||||
}
|
||||
|
||||
+3
-20
@@ -1,17 +1,9 @@
|
||||
import { UseFilters, UseGuards, UsePipes } from '@nestjs/common';
|
||||
import { Args, Query } from '@nestjs/graphql';
|
||||
|
||||
import {
|
||||
AuthContext,
|
||||
type AuthContextUser,
|
||||
} from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator';
|
||||
import { getWorkspaceAuthContext } from 'src/engine/core-modules/auth/storage/workspace-auth-context.storage';
|
||||
import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe';
|
||||
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||
import { AuthUserWorkspaceId } from 'src/engine/decorators/auth/auth-user-workspace-id.decorator';
|
||||
import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator';
|
||||
import { AuthWorkspaceMemberId } from 'src/engine/decorators/auth/auth-workspace-member-id.decorator';
|
||||
import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
|
||||
import { NoPermissionGuard } from 'src/engine/guards/no-permission.guard';
|
||||
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
|
||||
import { LineChartDataInput } from 'src/modules/dashboard/chart-data/dtos/inputs/line-chart-data.input';
|
||||
@@ -30,22 +22,13 @@ export class LineChartDataResolver {
|
||||
@UseGuards(NoPermissionGuard)
|
||||
async lineChartData(
|
||||
@Args('input') input: LineChartDataInput,
|
||||
@AuthWorkspace() workspace: WorkspaceEntity,
|
||||
@AuthUser() user: AuthContextUser,
|
||||
@AuthWorkspaceMemberId() workspaceMemberId: string,
|
||||
@AuthUserWorkspaceId() userWorkspaceId: string,
|
||||
): Promise<LineChartDataDTO> {
|
||||
const authContext: AuthContext = {
|
||||
user,
|
||||
workspace,
|
||||
workspaceMemberId,
|
||||
userWorkspaceId,
|
||||
};
|
||||
const authContext = getWorkspaceAuthContext();
|
||||
|
||||
return this.lineChartDataService.getLineChartData({
|
||||
objectMetadataId: input.objectMetadataId,
|
||||
configuration: input.configuration,
|
||||
workspaceId: workspace.id,
|
||||
workspaceId: authContext.workspace.id,
|
||||
authContext,
|
||||
});
|
||||
}
|
||||
|
||||
+3
-20
@@ -1,17 +1,9 @@
|
||||
import { UseFilters, UseGuards, UsePipes } from '@nestjs/common';
|
||||
import { Args, Query } from '@nestjs/graphql';
|
||||
|
||||
import {
|
||||
AuthContext,
|
||||
type AuthContextUser,
|
||||
} from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator';
|
||||
import { getWorkspaceAuthContext } from 'src/engine/core-modules/auth/storage/workspace-auth-context.storage';
|
||||
import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe';
|
||||
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||
import { AuthUserWorkspaceId } from 'src/engine/decorators/auth/auth-user-workspace-id.decorator';
|
||||
import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator';
|
||||
import { AuthWorkspaceMemberId } from 'src/engine/decorators/auth/auth-workspace-member-id.decorator';
|
||||
import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
|
||||
import { NoPermissionGuard } from 'src/engine/guards/no-permission.guard';
|
||||
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
|
||||
import { PieChartDataInput } from 'src/modules/dashboard/chart-data/dtos/inputs/pie-chart-data.input';
|
||||
@@ -30,22 +22,13 @@ export class PieChartDataResolver {
|
||||
@UseGuards(NoPermissionGuard)
|
||||
async pieChartData(
|
||||
@Args('input') input: PieChartDataInput,
|
||||
@AuthWorkspace() workspace: WorkspaceEntity,
|
||||
@AuthUser() user: AuthContextUser,
|
||||
@AuthWorkspaceMemberId() workspaceMemberId: string,
|
||||
@AuthUserWorkspaceId() userWorkspaceId: string,
|
||||
): Promise<PieChartDataDTO> {
|
||||
const authContext: AuthContext = {
|
||||
user,
|
||||
workspace,
|
||||
workspaceMemberId,
|
||||
userWorkspaceId,
|
||||
};
|
||||
const authContext = getWorkspaceAuthContext();
|
||||
|
||||
return this.pieChartDataService.getPieChartData({
|
||||
objectMetadataId: input.objectMetadataId,
|
||||
configuration: input.configuration,
|
||||
workspaceId: workspace.id,
|
||||
workspaceId: authContext.workspace.id,
|
||||
authContext,
|
||||
});
|
||||
}
|
||||
|
||||
+5
-4
@@ -2,7 +2,7 @@ import { Test, type TestingModule } from '@nestjs/testing';
|
||||
|
||||
import { AggregateOperations, FieldMetadataType } from 'twenty-shared/types';
|
||||
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
|
||||
import { BarChartGroupMode } from 'src/engine/metadata-modules/page-layout-widget/enums/bar-chart-group-mode.enum';
|
||||
import { BarChartLayout } from 'src/engine/metadata-modules/page-layout-widget/enums/bar-chart-layout.enum';
|
||||
@@ -17,9 +17,10 @@ describe('BarChartDataService', () => {
|
||||
let mockGetOrRecomputeManyOrAllFlatEntityMaps: jest.Mock;
|
||||
|
||||
const workspaceId = 'test-workspace-id';
|
||||
const mockAuthContext: AuthContext = {
|
||||
workspace: { id: workspaceId } as any,
|
||||
};
|
||||
const mockAuthContext = {
|
||||
type: 'system',
|
||||
workspace: { id: workspaceId },
|
||||
} as unknown as WorkspaceAuthContext;
|
||||
const objectMetadataId = 'test-object-id';
|
||||
|
||||
const mockGroupByField = {
|
||||
|
||||
+5
-4
@@ -2,7 +2,7 @@ import { Test, type TestingModule } from '@nestjs/testing';
|
||||
|
||||
import { AggregateOperations, FieldMetadataType } from 'twenty-shared/types';
|
||||
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
|
||||
import { WidgetConfigurationType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-configuration-type.type';
|
||||
import { LINE_CHART_MAXIMUM_NUMBER_OF_DATA_POINTS } from 'src/modules/dashboard/chart-data/constants/line-chart-maximum-number-of-data-points.constant';
|
||||
@@ -14,9 +14,10 @@ describe('LineChartDataService', () => {
|
||||
let mockExecuteGroupByQuery: jest.Mock;
|
||||
|
||||
const workspaceId = 'test-workspace-id';
|
||||
const mockAuthContext: AuthContext = {
|
||||
workspace: { id: workspaceId } as any,
|
||||
};
|
||||
const mockAuthContext = {
|
||||
type: 'system',
|
||||
workspace: { id: workspaceId },
|
||||
} as unknown as WorkspaceAuthContext;
|
||||
const objectMetadataId = 'test-object-id';
|
||||
|
||||
const mockGroupByFieldX = {
|
||||
|
||||
+4
-3
@@ -2,7 +2,7 @@ import { Test, type TestingModule } from '@nestjs/testing';
|
||||
|
||||
import { AggregateOperations, FieldMetadataType } from 'twenty-shared/types';
|
||||
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
|
||||
import { WidgetConfigurationType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-configuration-type.type';
|
||||
import { PIE_CHART_MAXIMUM_NUMBER_OF_SLICES } from 'src/modules/dashboard/chart-data/constants/pie-chart-maximum-number-of-slices.constant';
|
||||
@@ -15,9 +15,10 @@ describe('PieChartDataService', () => {
|
||||
let mockGetOrRecomputeManyOrAllFlatEntityMaps: jest.Mock;
|
||||
|
||||
const workspaceId = 'test-workspace-id';
|
||||
const mockAuthContext: AuthContext = {
|
||||
const mockAuthContext = {
|
||||
type: 'system',
|
||||
workspace: { id: workspaceId } as any,
|
||||
};
|
||||
} as unknown as WorkspaceAuthContext;
|
||||
const objectMetadataId = 'test-object-id';
|
||||
|
||||
const mockGroupByField = {
|
||||
|
||||
+2
-2
@@ -8,7 +8,7 @@ import {
|
||||
isDefined,
|
||||
} from 'twenty-shared/utils';
|
||||
|
||||
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
|
||||
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
|
||||
import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||
@@ -44,7 +44,7 @@ type GetBarChartDataParams = {
|
||||
workspaceId: string;
|
||||
objectMetadataId: string;
|
||||
configuration: BarChartConfigurationDTO;
|
||||
authContext: AuthContext;
|
||||
authContext: WorkspaceAuthContext;
|
||||
};
|
||||
|
||||
@Injectable()
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@ import {
|
||||
import { ObjectRecordGroupBy } from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface';
|
||||
|
||||
import { CommonGroupByQueryRunnerService } from 'src/engine/api/common/common-query-runners/common-group-by-query-runner.service';
|
||||
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
|
||||
import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||
import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
|
||||
@@ -45,7 +45,7 @@ type ExecuteGroupByQueryParams = {
|
||||
flatFieldMetadataMaps: FlatEntityMaps<FlatFieldMetadata>;
|
||||
flatObjectMetadataMaps: FlatEntityMaps<FlatObjectMetadata>;
|
||||
objectIdByNameSingular: Record<string, string>;
|
||||
authContext: AuthContext;
|
||||
authContext: WorkspaceAuthContext;
|
||||
groupByFieldMetadataId: string;
|
||||
groupBySubFieldName?: string | null;
|
||||
aggregateFieldMetadataId: string;
|
||||
|
||||
+2
-2
@@ -7,7 +7,7 @@ import {
|
||||
isDefined,
|
||||
} from 'twenty-shared/utils';
|
||||
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
|
||||
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
|
||||
import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||
@@ -43,7 +43,7 @@ type GetLineChartDataParams = {
|
||||
workspaceId: string;
|
||||
objectMetadataId: string;
|
||||
configuration: LineChartConfigurationDTO;
|
||||
authContext: AuthContext;
|
||||
authContext: WorkspaceAuthContext;
|
||||
};
|
||||
|
||||
@Injectable()
|
||||
|
||||
+2
-2
@@ -7,7 +7,7 @@ import {
|
||||
isDefined,
|
||||
} from 'twenty-shared/utils';
|
||||
|
||||
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
|
||||
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
|
||||
import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||
@@ -31,7 +31,7 @@ type GetPieChartDataParams = {
|
||||
workspaceId: string;
|
||||
objectMetadataId: string;
|
||||
configuration: PieChartConfigurationDTO;
|
||||
authContext: AuthContext;
|
||||
authContext: WorkspaceAuthContext;
|
||||
};
|
||||
|
||||
@Injectable()
|
||||
|
||||
@@ -1,14 +1,6 @@
|
||||
import { Controller, Param, Post, UseFilters, UseGuards } from '@nestjs/common';
|
||||
|
||||
import {
|
||||
AuthContext,
|
||||
type AuthContextUser,
|
||||
} from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||
import { AuthUserWorkspaceId } from 'src/engine/decorators/auth/auth-user-workspace-id.decorator';
|
||||
import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator';
|
||||
import { AuthWorkspaceMemberId } from 'src/engine/decorators/auth/auth-workspace-member-id.decorator';
|
||||
import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
|
||||
import { getWorkspaceAuthContext } from 'src/engine/core-modules/auth/storage/workspace-auth-context.storage';
|
||||
import { JwtAuthGuard } from 'src/engine/guards/jwt-auth.guard';
|
||||
import { NoPermissionGuard } from 'src/engine/guards/no-permission.guard';
|
||||
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
|
||||
@@ -25,19 +17,8 @@ export class DashboardController {
|
||||
) {}
|
||||
|
||||
@Post(':id/duplicate')
|
||||
async duplicate(
|
||||
@Param('id') id: string,
|
||||
@AuthWorkspace() workspace: WorkspaceEntity,
|
||||
@AuthUser() user: AuthContextUser,
|
||||
@AuthWorkspaceMemberId() workspaceMemberId: string,
|
||||
@AuthUserWorkspaceId() userWorkspaceId: string,
|
||||
): Promise<DuplicatedDashboardDTO> {
|
||||
const authContext: AuthContext = {
|
||||
user,
|
||||
workspace,
|
||||
workspaceMemberId,
|
||||
userWorkspaceId,
|
||||
};
|
||||
async duplicate(@Param('id') id: string): Promise<DuplicatedDashboardDTO> {
|
||||
const authContext = getWorkspaceAuthContext();
|
||||
|
||||
return this.dashboardDuplicationService.duplicateDashboard(id, authContext);
|
||||
}
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type CreateManyResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
import { DashboardToPageLayoutSyncService } from 'src/modules/dashboard/services/dashboard-to-page-layout-sync.service';
|
||||
import { type DashboardWorkspaceEntity } from 'src/modules/dashboard/standard-objects/dashboard.workspace-entity';
|
||||
@@ -21,7 +21,7 @@ export class DashboardCreateManyPreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: CreateManyResolverArgs<DashboardWorkspaceEntity>,
|
||||
): Promise<CreateManyResolverArgs<DashboardWorkspaceEntity>> {
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type CreateOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
import { DashboardToPageLayoutSyncService } from 'src/modules/dashboard/services/dashboard-to-page-layout-sync.service';
|
||||
import { type DashboardWorkspaceEntity } from 'src/modules/dashboard/standard-objects/dashboard.workspace-entity';
|
||||
@@ -21,7 +21,7 @@ export class DashboardCreateOnePreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: CreateOneResolverArgs<DashboardWorkspaceEntity>,
|
||||
): Promise<CreateOneResolverArgs<DashboardWorkspaceEntity>> {
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type DestroyManyResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
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 { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
import { DashboardToPageLayoutSyncService } from 'src/modules/dashboard/services/dashboard-to-page-layout-sync.service';
|
||||
|
||||
@@ -20,7 +20,7 @@ export class DashboardDestroyManyPreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: DestroyManyResolverArgs<{ id: { in: string[] } }>,
|
||||
): Promise<DestroyManyResolverArgs<{ id: { in: string[] } }>> {
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type DestroyOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
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 { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
import { DashboardToPageLayoutSyncService } from 'src/modules/dashboard/services/dashboard-to-page-layout-sync.service';
|
||||
|
||||
@@ -20,7 +20,7 @@ export class DashboardDestroyOnePreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: DestroyOneResolverArgs,
|
||||
): Promise<DestroyOneResolverArgs> {
|
||||
|
||||
@@ -1,18 +1,10 @@
|
||||
import { UseFilters, UseGuards, UsePipes } from '@nestjs/common';
|
||||
import { Args, Mutation } from '@nestjs/graphql';
|
||||
|
||||
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
|
||||
import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator';
|
||||
import {
|
||||
AuthContext,
|
||||
type AuthContextUser,
|
||||
} from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
|
||||
import { getWorkspaceAuthContext } from 'src/engine/core-modules/auth/storage/workspace-auth-context.storage';
|
||||
import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe';
|
||||
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||
import { AuthUserWorkspaceId } from 'src/engine/decorators/auth/auth-user-workspace-id.decorator';
|
||||
import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator';
|
||||
import { AuthWorkspaceMemberId } from 'src/engine/decorators/auth/auth-workspace-member-id.decorator';
|
||||
import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
|
||||
import { NoPermissionGuard } from 'src/engine/guards/no-permission.guard';
|
||||
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
|
||||
import { PageLayoutGraphqlApiExceptionFilter } from 'src/engine/metadata-modules/page-layout/utils/page-layout-graphql-api-exception.filter';
|
||||
@@ -36,17 +28,8 @@ export class DashboardResolver {
|
||||
@UseGuards(NoPermissionGuard)
|
||||
async duplicateDashboard(
|
||||
@Args('id', { type: () => UUIDScalarType }) id: string,
|
||||
@AuthWorkspace() workspace: WorkspaceEntity,
|
||||
@AuthUser() user: AuthContextUser,
|
||||
@AuthWorkspaceMemberId() workspaceMemberId: string,
|
||||
@AuthUserWorkspaceId() userWorkspaceId: string,
|
||||
): Promise<DuplicatedDashboardDTO> {
|
||||
const authContext: AuthContext = {
|
||||
user,
|
||||
workspace,
|
||||
workspaceMemberId,
|
||||
userWorkspaceId,
|
||||
};
|
||||
const authContext = getWorkspaceAuthContext();
|
||||
|
||||
return this.dashboardDuplicationService.duplicateDashboard(id, authContext);
|
||||
}
|
||||
|
||||
+6
-15
@@ -1,15 +1,9 @@
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
|
||||
import {
|
||||
appendCopySuffix,
|
||||
assertIsDefinedOrThrow,
|
||||
isDefined,
|
||||
} from 'twenty-shared/utils';
|
||||
import { appendCopySuffix, isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { ActorFromAuthContextService } from 'src/engine/core-modules/actor/services/actor-from-auth-context.service';
|
||||
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { PageLayoutDuplicationService } from 'src/engine/metadata-modules/page-layout/services/page-layout-duplication.service';
|
||||
import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager';
|
||||
import { WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository';
|
||||
@@ -34,12 +28,9 @@ export class DashboardDuplicationService {
|
||||
|
||||
async duplicateDashboard(
|
||||
dashboardId: string,
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
): Promise<DuplicatedDashboardDTO> {
|
||||
const { workspace } = authContext;
|
||||
|
||||
assertIsDefinedOrThrow(workspace, WorkspaceNotFoundDefaultError);
|
||||
|
||||
const workspace = authContext.workspace;
|
||||
const workspaceId = workspace.id;
|
||||
|
||||
return this.globalWorkspaceOrmManager.executeInWorkspaceContext(
|
||||
@@ -106,7 +97,7 @@ export class DashboardDuplicationService {
|
||||
throw error;
|
||||
}
|
||||
},
|
||||
authContext as WorkspaceAuthContext,
|
||||
authContext,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -114,7 +105,7 @@ export class DashboardDuplicationService {
|
||||
originalDashboard: DashboardWorkspaceEntity,
|
||||
newPageLayoutId: string,
|
||||
dashboardRepository: WorkspaceRepository<DashboardWorkspaceEntity>,
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
): Promise<DashboardWorkspaceEntity> {
|
||||
const newTitle = appendCopySuffix(originalDashboard.title ?? '');
|
||||
|
||||
|
||||
+2
-2
@@ -12,7 +12,7 @@ import {
|
||||
WorkspaceQueryRunnerException,
|
||||
WorkspaceQueryRunnerExceptionCode,
|
||||
} from 'src/engine/api/graphql/workspace-query-runner/workspace-query-runner.exception';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager';
|
||||
import { buildSystemAuthContext } from 'src/engine/twenty-orm/utils/build-system-auth-context.util';
|
||||
@@ -45,7 +45,7 @@ export class MessageChannelUpdateOnePreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: UpdateOneResolverArgs<MessageChannelWorkspaceEntity>,
|
||||
): Promise<UpdateOneResolverArgs<MessageChannelWorkspaceEntity>> {
|
||||
|
||||
+12
-11
@@ -1,10 +1,9 @@
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { isUserAuthContext } from 'src/engine/core-modules/auth/guards/is-user-auth-context.guard';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { ForbiddenError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util';
|
||||
import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications';
|
||||
import { ApplyMessagesVisibilityRestrictionsService } from 'src/modules/messaging/common/query-hooks/message/apply-messages-visibility-restrictions.service';
|
||||
@@ -22,20 +21,18 @@ export class MessageFindManyPostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: MessageWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
const { user, apiKey, application } = authContext;
|
||||
|
||||
const isTwentyStandardApplication =
|
||||
isDefined(application) &&
|
||||
application.universalIdentifier ===
|
||||
authContext.type === 'application' &&
|
||||
authContext.application.universalIdentifier ===
|
||||
TWENTY_STANDARD_APPLICATION.universalIdentifier;
|
||||
|
||||
if (
|
||||
!isDefined(user) &&
|
||||
!isDefined(apiKey) &&
|
||||
authContext.type !== 'user' &&
|
||||
authContext.type !== 'apiKey' &&
|
||||
!isTwentyStandardApplication
|
||||
) {
|
||||
throw new ForbiddenError('Authentication is required');
|
||||
@@ -47,10 +44,14 @@ export class MessageFindManyPostQueryHook
|
||||
throw new ForbiddenError('Workspace is required');
|
||||
}
|
||||
|
||||
const userId = isUserAuthContext(authContext)
|
||||
? authContext.user.id
|
||||
: undefined;
|
||||
|
||||
await this.applyMessagesVisibilityRestrictionsService.applyMessagesVisibilityRestrictions(
|
||||
payload,
|
||||
workspace.id,
|
||||
user?.id,
|
||||
userId,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
+14
-11
@@ -1,10 +1,11 @@
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { isApiKeyAuthContext } from 'src/engine/core-modules/auth/guards/is-api-key-auth-context.guard';
|
||||
import { isApplicationAuthContext } from 'src/engine/core-modules/auth/guards/is-application-auth-context.guard';
|
||||
import { isUserAuthContext } from 'src/engine/core-modules/auth/guards/is-user-auth-context.guard';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { ForbiddenError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util';
|
||||
import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications';
|
||||
import { ApplyMessagesVisibilityRestrictionsService } from 'src/modules/messaging/common/query-hooks/message/apply-messages-visibility-restrictions.service';
|
||||
@@ -22,20 +23,18 @@ export class MessageFindOnePostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: MessageWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
const { user, apiKey, application } = authContext;
|
||||
|
||||
const isTwentyStandardApplication =
|
||||
isDefined(application) &&
|
||||
application.universalIdentifier ===
|
||||
isApplicationAuthContext(authContext) &&
|
||||
authContext.application.universalIdentifier ===
|
||||
TWENTY_STANDARD_APPLICATION.universalIdentifier;
|
||||
|
||||
if (
|
||||
!isDefined(user) &&
|
||||
!isDefined(apiKey) &&
|
||||
!isUserAuthContext(authContext) &&
|
||||
!isApiKeyAuthContext(authContext) &&
|
||||
!isTwentyStandardApplication
|
||||
) {
|
||||
throw new ForbiddenError('Authentication is required');
|
||||
@@ -47,10 +46,14 @@ export class MessageFindOnePostQueryHook
|
||||
throw new ForbiddenError('Workspace is required');
|
||||
}
|
||||
|
||||
const userId = isUserAuthContext(authContext)
|
||||
? authContext.user.id
|
||||
: undefined;
|
||||
|
||||
await this.applyMessagesVisibilityRestrictionsService.applyMessagesVisibilityRestrictions(
|
||||
payload,
|
||||
workspace.id,
|
||||
user?.id,
|
||||
userId,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/work
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { NotePostQueryHookService } from 'src/modules/note/query-hooks/note-post-query-hook.service';
|
||||
import { NoteWorkspaceEntity } from 'src/modules/note/standard-objects/note.workspace-entity';
|
||||
|
||||
@@ -21,7 +21,7 @@ export class NoteDeleteManyPostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: NoteWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/work
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { NotePostQueryHookService } from 'src/modules/note/query-hooks/note-post-query-hook.service';
|
||||
import { NoteWorkspaceEntity } from 'src/modules/note/standard-objects/note.workspace-entity';
|
||||
|
||||
@@ -21,7 +21,7 @@ export class NoteDeleteOnePostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: NoteWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
|
||||
@@ -4,7 +4,6 @@ import { assertIsDefinedOrThrow } from 'twenty-shared/utils';
|
||||
import { In } from 'typeorm';
|
||||
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager';
|
||||
import { NoteTargetWorkspaceEntity } from 'src/modules/note/standard-objects/note-target.workspace-entity';
|
||||
@@ -17,7 +16,7 @@ export class NotePostQueryHookService {
|
||||
) {}
|
||||
|
||||
async handleNoteTargetsDelete(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
payload: NoteWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
if (!payload || payload?.length === 0) {
|
||||
@@ -38,11 +37,11 @@ export class NotePostQueryHookService {
|
||||
await noteTargetRepository.softDelete({
|
||||
noteId: In(payload.map((note) => note.id)),
|
||||
});
|
||||
}, authContext as WorkspaceAuthContext);
|
||||
}, authContext);
|
||||
}
|
||||
|
||||
async handleNoteTargetsRestore(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
payload: NoteWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
if (!payload || payload?.length === 0) {
|
||||
@@ -63,6 +62,6 @@ export class NotePostQueryHookService {
|
||||
await noteTargetRepository.restore({
|
||||
noteId: In(payload.map((note) => note.id)),
|
||||
});
|
||||
}, authContext as WorkspaceAuthContext);
|
||||
}, authContext);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/work
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { NotePostQueryHookService } from 'src/modules/note/query-hooks/note-post-query-hook.service';
|
||||
import { NoteWorkspaceEntity } from 'src/modules/note/standard-objects/note.workspace-entity';
|
||||
|
||||
@@ -21,7 +21,7 @@ export class NoteRestoreManyPostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: NoteWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/work
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { NotePostQueryHookService } from 'src/modules/note/query-hooks/note-post-query-hook.service';
|
||||
import { NoteWorkspaceEntity } from 'src/modules/note/standard-objects/note.workspace-entity';
|
||||
|
||||
@@ -21,7 +21,7 @@ export class NoteRestoreOnePostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: NoteWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/work
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { TaskPostQueryHookService } from 'src/modules/task/query-hooks/task-post-query-hook.service';
|
||||
import { TaskWorkspaceEntity } from 'src/modules/task/standard-objects/task.workspace-entity';
|
||||
|
||||
@@ -21,7 +21,7 @@ export class TaskDeleteManyPostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: TaskWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/work
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { TaskPostQueryHookService } from 'src/modules/task/query-hooks/task-post-query-hook.service';
|
||||
import { TaskWorkspaceEntity } from 'src/modules/task/standard-objects/task.workspace-entity';
|
||||
|
||||
@@ -21,7 +21,7 @@ export class TaskDeleteOnePostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: TaskWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
|
||||
@@ -4,7 +4,6 @@ import { assertIsDefinedOrThrow } from 'twenty-shared/utils';
|
||||
import { In } from 'typeorm';
|
||||
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager';
|
||||
import { TaskTargetWorkspaceEntity } from 'src/modules/task/standard-objects/task-target.workspace-entity';
|
||||
@@ -17,7 +16,7 @@ export class TaskPostQueryHookService {
|
||||
) {}
|
||||
|
||||
async handleTaskTargetsDelete(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
payload: TaskWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
if (!payload || payload?.length === 0) {
|
||||
@@ -38,11 +37,11 @@ export class TaskPostQueryHookService {
|
||||
await taskTargetRepository.softDelete({
|
||||
taskId: In(payload.map((task) => task.id)),
|
||||
});
|
||||
}, authContext as WorkspaceAuthContext);
|
||||
}, authContext);
|
||||
}
|
||||
|
||||
async handleTaskTargetsRestore(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
payload: TaskWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
if (!payload || payload?.length === 0) {
|
||||
@@ -63,6 +62,6 @@ export class TaskPostQueryHookService {
|
||||
await taskTargetRepository.restore({
|
||||
taskId: In(payload.map((task) => task.id)),
|
||||
});
|
||||
}, authContext as WorkspaceAuthContext);
|
||||
}, authContext);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/work
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { TaskPostQueryHookService } from 'src/modules/task/query-hooks/task-post-query-hook.service';
|
||||
import { TaskWorkspaceEntity } from 'src/modules/task/standard-objects/task.workspace-entity';
|
||||
|
||||
@@ -21,7 +21,7 @@ export class TaskRestoreManyPostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: TaskWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/work
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { TaskPostQueryHookService } from 'src/modules/task/query-hooks/task-post-query-hook.service';
|
||||
import { TaskWorkspaceEntity } from 'src/modules/task/standard-objects/task.workspace-entity';
|
||||
|
||||
@@ -21,7 +21,7 @@ export class TaskRestoreOnePostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: TaskWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
|
||||
+3
-4
@@ -2,10 +2,9 @@ import { assertIsDefinedOrThrow } from 'twenty-shared/utils';
|
||||
|
||||
import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
||||
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { RecordPositionService } from 'src/engine/core-modules/record-position/services/record-position.service';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager';
|
||||
@@ -28,7 +27,7 @@ export class WorkflowCreateManyPostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: WorkflowWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
@@ -64,6 +63,6 @@ export class WorkflowCreateManyPostQueryHook
|
||||
return workflowVersionRepository.insert(workflowVersion);
|
||||
}),
|
||||
);
|
||||
}, authContext as WorkspaceAuthContext);
|
||||
}, authContext);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type CreateManyResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { type WorkflowWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow.workspace-entity';
|
||||
import { assertWorkflowStatusesNotSetOrEmpty } from 'src/modules/workflow/common/utils/assert-workflow-statuses-not-set-or-empty';
|
||||
|
||||
@@ -11,7 +11,7 @@ export class WorkflowCreateManyPreQueryHook
|
||||
implements WorkspacePreQueryHookInstance
|
||||
{
|
||||
async execute(
|
||||
_authContext: AuthContext,
|
||||
_authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: CreateManyResolverArgs<WorkflowWorkspaceEntity>,
|
||||
): Promise<CreateManyResolverArgs<WorkflowWorkspaceEntity>> {
|
||||
|
||||
+3
-4
@@ -2,10 +2,9 @@ import { assertIsDefinedOrThrow } from 'twenty-shared/utils';
|
||||
|
||||
import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
||||
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { RecordPositionService } from 'src/engine/core-modules/record-position/services/record-position.service';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager';
|
||||
@@ -28,7 +27,7 @@ export class WorkflowCreateOnePostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: WorkflowWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
@@ -60,6 +59,6 @@ export class WorkflowCreateOnePostQueryHook
|
||||
name: 'v1',
|
||||
position,
|
||||
});
|
||||
}, authContext as WorkspaceAuthContext);
|
||||
}, authContext);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type CreateOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { type WorkflowWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow.workspace-entity';
|
||||
import { assertWorkflowStatusesNotSetOrEmpty } from 'src/modules/workflow/common/utils/assert-workflow-statuses-not-set-or-empty';
|
||||
|
||||
@@ -11,7 +11,7 @@ export class WorkflowCreateOnePreQueryHook
|
||||
implements WorkspacePreQueryHookInstance
|
||||
{
|
||||
async execute(
|
||||
_authContext: AuthContext,
|
||||
_authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: CreateOneResolverArgs<WorkflowWorkspaceEntity>,
|
||||
): Promise<CreateOneResolverArgs<WorkflowWorkspaceEntity>> {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/work
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { type WorkflowWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow.workspace-entity';
|
||||
import { WorkflowCommonWorkspaceService } from 'src/modules/workflow/common/workspace-services/workflow-common.workspace-service';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
@@ -21,7 +21,7 @@ export class WorkflowDeleteManyPostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: WorkflowWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/work
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { type WorkflowWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow.workspace-entity';
|
||||
import { WorkflowCommonWorkspaceService } from 'src/modules/workflow/common/workspace-services/workflow-common.workspace-service';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
@@ -21,7 +21,7 @@ export class WorkflowDeleteOnePostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: WorkflowWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type DestroyManyResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkflowCommonWorkspaceService } from 'src/modules/workflow/common/workspace-services/workflow-common.workspace-service';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
|
||||
@@ -17,7 +17,7 @@ export class WorkflowDestroyManyPreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: DestroyManyResolverArgs<{ id: { in: string[] } }>,
|
||||
): Promise<DestroyManyResolverArgs<{ id: { in: string[] } }>> {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type DestroyOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkflowCommonWorkspaceService } from 'src/modules/workflow/common/workspace-services/workflow-common.workspace-service';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
|
||||
@@ -17,7 +17,7 @@ export class WorkflowDestroyOnePreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: DestroyOneResolverArgs,
|
||||
): Promise<DestroyOneResolverArgs> {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/work
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { type WorkflowWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow.workspace-entity';
|
||||
import { WorkflowCommonWorkspaceService } from 'src/modules/workflow/common/workspace-services/workflow-common.workspace-service';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
@@ -21,7 +21,7 @@ export class WorkflowRestoreManyPostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: WorkflowWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/work
|
||||
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { type WorkflowWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow.workspace-entity';
|
||||
import { WorkflowCommonWorkspaceService } from 'src/modules/workflow/common/workspace-services/workflow-common.workspace-service';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
@@ -21,7 +21,7 @@ export class WorkflowRestoreOnePostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: WorkflowWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type UpdateOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import {
|
||||
WorkflowQueryValidationException,
|
||||
WorkflowQueryValidationExceptionCode,
|
||||
@@ -14,7 +14,7 @@ export class WorkflowRunUpdateOnePreQueryHook
|
||||
implements WorkspacePreQueryHookInstance
|
||||
{
|
||||
async execute(
|
||||
_authContext: AuthContext,
|
||||
_authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: UpdateOneResolverArgs<WorkflowRunWorkspaceEntity>,
|
||||
): Promise<UpdateOneResolverArgs<WorkflowRunWorkspaceEntity>> {
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type UpdateOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { type WorkflowWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow.workspace-entity';
|
||||
import { assertWorkflowStatusesNotSet } from 'src/modules/workflow/common/utils/assert-workflow-statuses-not-set';
|
||||
|
||||
@@ -11,7 +11,7 @@ export class WorkflowUpdateOnePreQueryHook
|
||||
implements WorkspacePreQueryHookInstance
|
||||
{
|
||||
async execute(
|
||||
_authContext: AuthContext,
|
||||
_authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: UpdateOneResolverArgs<WorkflowWorkspaceEntity>,
|
||||
): Promise<UpdateOneResolverArgs<WorkflowWorkspaceEntity>> {
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type CreateManyResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import {
|
||||
WorkflowQueryValidationException,
|
||||
WorkflowQueryValidationExceptionCode,
|
||||
@@ -14,7 +14,7 @@ export class WorkflowVersionCreateManyPreQueryHook
|
||||
implements WorkspacePreQueryHookInstance
|
||||
{
|
||||
async execute(
|
||||
_authContext: AuthContext,
|
||||
_authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
_payload: CreateManyResolverArgs<WorkflowVersionWorkspaceEntity>,
|
||||
): Promise<CreateManyResolverArgs<WorkflowVersionWorkspaceEntity>> {
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type CreateOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import {
|
||||
WorkflowQueryValidationException,
|
||||
WorkflowQueryValidationExceptionCode,
|
||||
@@ -14,7 +14,7 @@ export class WorkflowVersionCreateOnePreQueryHook
|
||||
implements WorkspacePreQueryHookInstance
|
||||
{
|
||||
async execute(
|
||||
_authContext: AuthContext,
|
||||
_authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
_payload: CreateOneResolverArgs<WorkflowVersionWorkspaceEntity>,
|
||||
): Promise<CreateOneResolverArgs<WorkflowVersionWorkspaceEntity>> {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type DeleteOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkflowVersionValidationWorkspaceService } from 'src/modules/workflow/common/workspace-services/workflow-version-validation.workspace-service';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
|
||||
@@ -17,7 +17,7 @@ export class WorkflowVersionDeleteOnePreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: DeleteOneResolverArgs,
|
||||
): Promise<DeleteOneResolverArgs> {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type UpdateOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { type WorkflowVersionWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow-version.workspace-entity';
|
||||
import { WorkflowVersionValidationWorkspaceService } from 'src/modules/workflow/common/workspace-services/workflow-version-validation.workspace-service';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
@@ -18,7 +18,7 @@ export class WorkflowVersionUpdateOnePreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: UpdateOneResolverArgs<WorkflowVersionWorkspaceEntity>,
|
||||
): Promise<UpdateOneResolverArgs<WorkflowVersionWorkspaceEntity>> {
|
||||
|
||||
+4
-2
@@ -4,7 +4,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type CreateManyResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import {
|
||||
PermissionsException,
|
||||
PermissionsExceptionCode,
|
||||
@@ -18,7 +18,9 @@ export class WorkspaceMemberCreateManyPreQueryHook
|
||||
{
|
||||
constructor() {}
|
||||
|
||||
async execute(authContext: AuthContext): Promise<CreateManyResolverArgs> {
|
||||
async execute(
|
||||
authContext: WorkspaceAuthContext,
|
||||
): Promise<CreateManyResolverArgs> {
|
||||
const workspace = authContext.workspace;
|
||||
|
||||
assertIsDefinedOrThrow(workspace, WorkspaceNotFoundDefaultError);
|
||||
|
||||
+4
-2
@@ -4,7 +4,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type CreateOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import {
|
||||
PermissionsException,
|
||||
PermissionsExceptionCode,
|
||||
@@ -18,7 +18,9 @@ export class WorkspaceMemberCreateOnePreQueryHook
|
||||
{
|
||||
constructor() {}
|
||||
|
||||
async execute(authContext: AuthContext): Promise<CreateOneResolverArgs> {
|
||||
async execute(
|
||||
authContext: WorkspaceAuthContext,
|
||||
): Promise<CreateOneResolverArgs> {
|
||||
const workspace = authContext.workspace;
|
||||
|
||||
assertIsDefinedOrThrow(workspace, WorkspaceNotFoundDefaultError);
|
||||
|
||||
+4
-2
@@ -8,7 +8,7 @@ import {
|
||||
CommonQueryRunnerExceptionCode,
|
||||
} from 'src/engine/api/common/common-query-runners/errors/common-query-runner.exception';
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
|
||||
@WorkspaceQueryHook(`workspaceMember.deleteMany`)
|
||||
export class WorkspaceMemberDeleteManyPreQueryHook
|
||||
@@ -16,7 +16,9 @@ export class WorkspaceMemberDeleteManyPreQueryHook
|
||||
{
|
||||
constructor() {}
|
||||
|
||||
async execute(_authContext: AuthContext): Promise<DeleteManyResolverArgs> {
|
||||
async execute(
|
||||
_authContext: WorkspaceAuthContext,
|
||||
): Promise<DeleteManyResolverArgs> {
|
||||
throw new CommonQueryRunnerException(
|
||||
'Please use /deleteUserFromWorkspace to remove a workspace member.',
|
||||
CommonQueryRunnerExceptionCode.BAD_REQUEST,
|
||||
|
||||
+14
-7
@@ -5,10 +5,11 @@ import { Repository } from 'typeorm';
|
||||
|
||||
import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
|
||||
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
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 { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { isApiKeyAuthContext } from 'src/engine/core-modules/auth/guards/is-api-key-auth-context.guard';
|
||||
import { isUserAuthContext } from 'src/engine/core-modules/auth/guards/is-user-auth-context.guard';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity';
|
||||
import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
@@ -36,7 +37,7 @@ export class WorkspaceMemberDeleteOnePostQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: WorkspaceMemberWorkspaceEntity[],
|
||||
): Promise<void> {
|
||||
@@ -53,11 +54,17 @@ export class WorkspaceMemberDeleteOnePostQueryHook
|
||||
|
||||
await this.workspaceMemberPreQueryHookService.validateWorkspaceMemberUpdatePermissionOrThrow(
|
||||
{
|
||||
userWorkspaceId: authContext.userWorkspaceId,
|
||||
workspaceMemberId: authContext.workspaceMemberId,
|
||||
userWorkspaceId: isUserAuthContext(authContext)
|
||||
? authContext.userWorkspaceId
|
||||
: undefined,
|
||||
workspaceMemberId: isUserAuthContext(authContext)
|
||||
? authContext.workspaceMemberId
|
||||
: undefined,
|
||||
targettedWorkspaceMemberId,
|
||||
workspaceId: workspace.id,
|
||||
apiKey: authContext.apiKey,
|
||||
apiKey: isApiKeyAuthContext(authContext)
|
||||
? authContext.apiKey
|
||||
: undefined,
|
||||
},
|
||||
);
|
||||
|
||||
@@ -77,7 +84,7 @@ export class WorkspaceMemberDeleteOnePostQueryHook
|
||||
withDeleted: true,
|
||||
});
|
||||
},
|
||||
authContext as WorkspaceAuthContext,
|
||||
authContext,
|
||||
);
|
||||
|
||||
if (!isDefined(workspaceMember)) {
|
||||
|
||||
+4
-2
@@ -8,7 +8,7 @@ import {
|
||||
CommonQueryRunnerExceptionCode,
|
||||
} from 'src/engine/api/common/common-query-runners/errors/common-query-runner.exception';
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
|
||||
@WorkspaceQueryHook(`workspaceMember.deleteOne`)
|
||||
export class WorkspaceMemberDeleteOnePreQueryHook
|
||||
@@ -16,7 +16,9 @@ export class WorkspaceMemberDeleteOnePreQueryHook
|
||||
{
|
||||
constructor() {}
|
||||
|
||||
async execute(_authContext: AuthContext): Promise<RestoreOneResolverArgs> {
|
||||
async execute(
|
||||
_authContext: WorkspaceAuthContext,
|
||||
): Promise<RestoreOneResolverArgs> {
|
||||
throw new CommonQueryRunnerException(
|
||||
'Please use /deleteUserFromWorkspace to remove a workspace member.',
|
||||
CommonQueryRunnerExceptionCode.BAD_REQUEST,
|
||||
|
||||
+4
-2
@@ -4,7 +4,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type DeleteManyResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import {
|
||||
PermissionsException,
|
||||
PermissionsExceptionCode,
|
||||
@@ -18,7 +18,9 @@ export class WorkspaceMemberDestroyManyPreQueryHook
|
||||
{
|
||||
constructor() {}
|
||||
|
||||
async execute(authContext: AuthContext): Promise<DeleteManyResolverArgs> {
|
||||
async execute(
|
||||
authContext: WorkspaceAuthContext,
|
||||
): Promise<DeleteManyResolverArgs> {
|
||||
const workspace = authContext.workspace;
|
||||
|
||||
assertIsDefinedOrThrow(workspace, WorkspaceNotFoundDefaultError);
|
||||
|
||||
+4
-2
@@ -4,7 +4,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type DeleteOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import {
|
||||
PermissionsException,
|
||||
PermissionsExceptionCode,
|
||||
@@ -18,7 +18,9 @@ export class WorkspaceMemberDestroyOnePreQueryHook
|
||||
{
|
||||
constructor() {}
|
||||
|
||||
async execute(authContext: AuthContext): Promise<DeleteOneResolverArgs> {
|
||||
async execute(
|
||||
authContext: WorkspaceAuthContext,
|
||||
): Promise<DeleteOneResolverArgs> {
|
||||
const workspace = authContext.workspace;
|
||||
|
||||
assertIsDefinedOrThrow(workspace, WorkspaceNotFoundDefaultError);
|
||||
|
||||
+4
-2
@@ -4,7 +4,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type RestoreManyResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import {
|
||||
PermissionsException,
|
||||
PermissionsExceptionCode,
|
||||
@@ -18,7 +18,9 @@ export class WorkspaceMemberRestoreManyPreQueryHook
|
||||
{
|
||||
constructor() {}
|
||||
|
||||
async execute(authContext: AuthContext): Promise<RestoreManyResolverArgs> {
|
||||
async execute(
|
||||
authContext: WorkspaceAuthContext,
|
||||
): Promise<RestoreManyResolverArgs> {
|
||||
const workspace = authContext.workspace;
|
||||
|
||||
assertIsDefinedOrThrow(workspace, WorkspaceNotFoundDefaultError);
|
||||
|
||||
+4
-2
@@ -4,7 +4,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type RestoreOneResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import {
|
||||
PermissionsException,
|
||||
PermissionsExceptionCode,
|
||||
@@ -18,7 +18,9 @@ export class WorkspaceMemberRestoreOnePreQueryHook
|
||||
{
|
||||
constructor() {}
|
||||
|
||||
async execute(authContext: AuthContext): Promise<RestoreOneResolverArgs> {
|
||||
async execute(
|
||||
authContext: WorkspaceAuthContext,
|
||||
): Promise<RestoreOneResolverArgs> {
|
||||
const workspace = authContext.workspace;
|
||||
|
||||
assertIsDefinedOrThrow(workspace, WorkspaceNotFoundDefaultError);
|
||||
|
||||
+4
-2
@@ -4,7 +4,7 @@ import { type WorkspacePreQueryHookInstance } from 'src/engine/api/graphql/works
|
||||
import { type UpdateManyResolverArgs } from 'src/engine/api/graphql/workspace-resolver-builder/interfaces/workspace-resolvers-builder.interface';
|
||||
|
||||
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import {
|
||||
PermissionsException,
|
||||
PermissionsExceptionCode,
|
||||
@@ -18,7 +18,9 @@ export class WorkspaceMemberUpdateManyPreQueryHook
|
||||
{
|
||||
constructor() {}
|
||||
|
||||
async execute(authContext: AuthContext): Promise<UpdateManyResolverArgs> {
|
||||
async execute(
|
||||
authContext: WorkspaceAuthContext,
|
||||
): Promise<UpdateManyResolverArgs> {
|
||||
const workspace = authContext.workspace;
|
||||
|
||||
assertIsDefinedOrThrow(workspace, WorkspaceNotFoundDefaultError);
|
||||
|
||||
+17
-7
@@ -12,7 +12,9 @@ import {
|
||||
AuthException,
|
||||
AuthExceptionCode,
|
||||
} from 'src/engine/core-modules/auth/auth.exception';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { isApiKeyAuthContext } from 'src/engine/core-modules/auth/guards/is-api-key-auth-context.guard';
|
||||
import { isUserAuthContext } from 'src/engine/core-modules/auth/guards/is-user-auth-context.guard';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
import { WorkspaceMemberPreQueryHookService } from 'src/modules/workspace-member/query-hooks/workspace-member-pre-query-hook.service';
|
||||
@@ -28,7 +30,7 @@ export class WorkspaceMemberUpdateOnePreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
_objectName: string,
|
||||
payload: UpdateOneResolverArgs,
|
||||
): Promise<UpdateOneResolverArgs> {
|
||||
@@ -38,16 +40,22 @@ export class WorkspaceMemberUpdateOnePreQueryHook
|
||||
|
||||
await this.workspaceMemberPreQueryHookService.validateWorkspaceMemberUpdatePermissionOrThrow(
|
||||
{
|
||||
userWorkspaceId: authContext.userWorkspaceId,
|
||||
userWorkspaceId: isUserAuthContext(authContext)
|
||||
? authContext.userWorkspaceId
|
||||
: undefined,
|
||||
targettedWorkspaceMemberId: payload.id,
|
||||
workspaceId: workspace.id,
|
||||
apiKey: authContext.apiKey,
|
||||
workspaceMemberId: authContext.workspaceMemberId,
|
||||
apiKey: isApiKeyAuthContext(authContext)
|
||||
? authContext.apiKey
|
||||
: undefined,
|
||||
workspaceMemberId: isUserAuthContext(authContext)
|
||||
? authContext.workspaceMemberId
|
||||
: undefined,
|
||||
},
|
||||
);
|
||||
|
||||
// TODO: remove this code once we have migrated locale update to userWorkspace update
|
||||
if (payload.data.locale) {
|
||||
if (payload.data.locale && isUserAuthContext(authContext)) {
|
||||
const userWorkspace = await this.userWorkspaceRepository.findOne({
|
||||
where: {
|
||||
id: authContext.userWorkspaceId,
|
||||
@@ -69,7 +77,9 @@ export class WorkspaceMemberUpdateOnePreQueryHook
|
||||
|
||||
await this.workspaceMemberPreQueryHookService.completeOnboardingProfileStepIfNameProvided(
|
||||
{
|
||||
userId: authContext.user?.id,
|
||||
userId: isUserAuthContext(authContext)
|
||||
? authContext.user.id
|
||||
: undefined,
|
||||
workspaceId: workspace.id,
|
||||
firstName: payload.data.name?.firstName,
|
||||
lastName: payload.data.name?.lastName,
|
||||
|
||||
Reference in New Issue
Block a user