diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/run-workflow-actions/hooks/useRunWorkflowRecordActions.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/run-workflow-actions/hooks/useRunWorkflowRecordActions.tsx
index 010110e58c5..a35d66f485a 100644
--- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/run-workflow-actions/hooks/useRunWorkflowRecordActions.tsx
+++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/run-workflow-actions/hooks/useRunWorkflowRecordActions.tsx
@@ -49,7 +49,10 @@ export const useRunWorkflowRecordActions = ({
({ snapshot }) =>
async (
selectedRecordIds: string[],
- activeWorkflowVersion: WorkflowVersion,
+ activeWorkflowVersion: Pick<
+ WorkflowVersion,
+ 'id' | 'workflowId' | 'trigger'
+ >,
) => {
if (
isIteratorEnabled &&
diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/components/SeeActiveVersionWorkflowSingleRecordAction.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/components/SeeActiveVersionWorkflowSingleRecordAction.tsx
index f0a62dd69d4..e16b28fec5c 100644
--- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/components/SeeActiveVersionWorkflowSingleRecordAction.tsx
+++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/components/SeeActiveVersionWorkflowSingleRecordAction.tsx
@@ -8,7 +8,9 @@ import { AppPath } from 'twenty-shared/types';
export const SeeActiveVersionWorkflowSingleRecordAction = () => {
const recordId = useSelectedRecordIdOrThrow();
- const { workflowVersion, loading } = useActiveWorkflowVersion(recordId);
+ const { workflowVersion, loading } = useActiveWorkflowVersion({
+ workflowId: recordId,
+ });
if (loading) {
return ;
diff --git a/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersion.ts b/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersion.ts
index 5064ca387cd..f1df077bd92 100644
--- a/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersion.ts
+++ b/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersion.ts
@@ -1,14 +1,16 @@
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
-import { type Workflow, type WorkflowVersion } from '@/workflow/types/Workflow';
+import { type WorkflowVersion } from '@/workflow/types/Workflow';
-export const useActiveWorkflowVersion = (workflowId: string) => {
+type UseActiveWorkflowVersionProps = {
+ workflowId: string;
+};
+
+export const useActiveWorkflowVersion = ({
+ workflowId,
+}: UseActiveWorkflowVersionProps) => {
const { records: workflowVersions, loading } = useFindManyRecords<
- WorkflowVersion & {
- workflow: Omit & {
- versions: Array<{ __typename: string }>;
- };
- }
+ Pick
>({
objectNameSingular: CoreObjectNameSingular.WorkflowVersion,
filter: {
@@ -21,21 +23,6 @@ export const useActiveWorkflowVersion = (workflowId: string) => {
},
recordGqlFields: {
id: true,
- name: true,
- createdAt: true,
- updatedAt: true,
- workflowId: true,
- trigger: true,
- steps: true,
- status: true,
- workflow: {
- id: true,
- name: true,
- statuses: true,
- versions: {
- totalCount: true,
- },
- },
},
});
diff --git a/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersionsWithManualTrigger.ts b/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersionsWithManualTrigger.ts
index 63b98a83428..66f21f4455f 100644
--- a/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersionsWithManualTrigger.ts
+++ b/packages/twenty-front/src/modules/workflow/hooks/useActiveWorkflowVersionsWithManualTrigger.ts
@@ -1,8 +1,6 @@
import { isGlobalManualTrigger } from '@/action-menu/actions/record-actions/utils/isGlobalManualTrigger';
-import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
-import { generateDepthOneRecordGqlFields } from '@/object-record/graphql/utils/generateDepthOneRecordGqlFields';
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
import {
type ManualTriggerWorkflowVersion,
@@ -52,23 +50,24 @@ export const useActiveWorkflowVersionsWithManualTrigger = ({
filters.push(objectTypeFilter);
}
- const { objectMetadataItem: workflowVersionObjectMetadataItem } =
- useObjectMetadataItem({
- objectNameSingular: CoreObjectNameSingular.WorkflowVersion,
- });
-
const { records } = useFindManyRecords<
- ManualTriggerWorkflowVersion & { workflow: Workflow }
+ Pick<
+ ManualTriggerWorkflowVersion,
+ 'id' | '__typename' | 'trigger' | 'status' | 'workflowId'
+ > & {
+ workflow: Workflow;
+ }
>({
objectNameSingular: CoreObjectNameSingular.WorkflowVersion,
filter: {
and: filters,
},
recordGqlFields: {
- ...generateDepthOneRecordGqlFields({
- objectMetadataItem: workflowVersionObjectMetadataItem,
- }),
+ id: true,
+ trigger: true,
+ workflowId: true,
workflow: true,
+ status: true,
},
skip,
});
diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-config/hooks/use-cached-metadata.ts b/packages/twenty-server/src/engine/api/graphql/graphql-config/hooks/use-cached-metadata.ts
index 637de7388b9..48193b5793e 100644
--- a/packages/twenty-server/src/engine/api/graphql/graphql-config/hooks/use-cached-metadata.ts
+++ b/packages/twenty-server/src/engine/api/graphql/graphql-config/hooks/use-cached-metadata.ts
@@ -43,14 +43,20 @@ export function useCachedMetadata(config: CacheMetadataPluginConfig): Plugin {
return {
onRequest: async ({ endResponse, serverContext }) => {
+ // TODO: we should probably override the graphql-yoga request type to include the workspace and locale
+ const request = (serverContext as unknown as { req: Request }).req;
+
+ if (!request.workspace?.id) {
+ return;
+ }
+
if (!config.operationsToCache.includes(getOperationName(serverContext))) {
return;
}
const cacheKey = computeCacheKey({
operationName: getOperationName(serverContext),
- // TODO: we should probably override the graphql-yoga request type to include the workspace and locale
- request: (serverContext as unknown as { req: Request }).req,
+ request,
});
const cachedResponse = await config.cacheGetter(cacheKey);
@@ -61,13 +67,19 @@ export function useCachedMetadata(config: CacheMetadataPluginConfig): Plugin {
}
},
onResponse: async ({ response, serverContext }) => {
+ const request = (serverContext as unknown as { req: Request }).req;
+
+ if (!request.workspace?.id) {
+ return;
+ }
+
if (!config.operationsToCache.includes(getOperationName(serverContext))) {
return;
}
const cacheKey = computeCacheKey({
operationName: getOperationName(serverContext),
- request: (serverContext as unknown as { req: Request }).req,
+ request,
});
const cachedResponse = await config.cacheGetter(cacheKey);
diff --git a/packages/twenty-server/src/engine/api/rest/core/controllers/rest-api-core.controller.ts b/packages/twenty-server/src/engine/api/rest/core/controllers/rest-api-core.controller.ts
index 2ebb8790c83..d40b76ad8cd 100644
--- a/packages/twenty-server/src/engine/api/rest/core/controllers/rest-api-core.controller.ts
+++ b/packages/twenty-server/src/engine/api/rest/core/controllers/rest-api-core.controller.ts
@@ -2,6 +2,7 @@ import {
Controller,
Delete,
Get,
+ Logger,
Patch,
Post,
Put,
@@ -22,10 +23,14 @@ import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
@UseGuards(JwtAuthGuard, WorkspaceAuthGuard)
@UseFilters(RestApiExceptionFilter)
export class RestApiCoreController {
+ private readonly logger = new Logger(RestApiCoreController.name);
constructor(private readonly restApiCoreService: RestApiCoreService) {}
@Post('batch/*')
async handleApiPostBatch(@Req() request: Request, @Res() res: Response) {
+ this.logger.log(
+ `[REST API] Processing BATCH request to ${request.path} on workspace ${request.workspaceId}`,
+ );
const result = await this.restApiCoreService.createMany(request);
res.status(201).send(result);
@@ -33,6 +38,9 @@ export class RestApiCoreController {
@Post('*/duplicates')
async handleApiFindDuplicates(@Req() request: Request, @Res() res: Response) {
+ this.logger.log(
+ `[REST API] Processing DUPLICATES request to ${request.path} on workspace ${request.workspaceId}`,
+ );
const result = await this.restApiCoreService.findDuplicates(request);
res.status(200).send(result);
@@ -40,6 +48,9 @@ export class RestApiCoreController {
@Post('*')
async handleApiPost(@Req() request: Request, @Res() res: Response) {
+ this.logger.log(
+ `[REST API] Processing POST request to ${request.path} on workspace ${request.workspaceId}`,
+ );
const result = await this.restApiCoreService.createOne(request);
res.status(201).send(result);
@@ -47,6 +58,9 @@ export class RestApiCoreController {
@Get('*')
async handleApiGet(@Req() request: Request, @Res() res: Response) {
+ this.logger.log(
+ `[REST API] Processing GET request to ${request.path} on workspace ${request.workspaceId}`,
+ );
const result = await this.restApiCoreService.get(request);
res.status(200).send(result);
@@ -54,6 +68,9 @@ export class RestApiCoreController {
@Delete('*')
async handleApiDelete(@Req() request: Request, @Res() res: Response) {
+ this.logger.log(
+ `[REST API] Processing DELETE request to ${request.path} on workspace ${request.workspaceId}`,
+ );
const result = await this.restApiCoreService.delete(request);
res.status(200).send(result);
@@ -61,6 +78,9 @@ export class RestApiCoreController {
@Patch('*')
async handleApiPatch(@Req() request: Request, @Res() res: Response) {
+ this.logger.log(
+ `[REST API] Processing PATCH request to ${request.path} on workspace ${request.workspaceId}`,
+ );
const result = await this.restApiCoreService.update(request);
res.status(200).send(result);
@@ -71,6 +91,9 @@ export class RestApiCoreController {
// of PATCH, and because the PUT verb is often used as a PATCH.
@Put('*')
async handleApiPut(@Req() request: Request, @Res() res: Response) {
+ this.logger.log(
+ `[REST API] Processing PUT request to ${request.path} on workspace ${request.workspaceId}`,
+ );
const result = await this.restApiCoreService.update(request);
res.status(200).send(result);
diff --git a/packages/twenty-server/src/engine/core-modules/cache-storage/services/cache-storage.service.ts b/packages/twenty-server/src/engine/core-modules/cache-storage/services/cache-storage.service.ts
index 10ad62e3df1..ace12db201d 100644
--- a/packages/twenty-server/src/engine/core-modules/cache-storage/services/cache-storage.service.ts
+++ b/packages/twenty-server/src/engine/core-modules/cache-storage/services/cache-storage.service.ts
@@ -15,7 +15,9 @@ export class CacheStorageService {
) {}
async get(key: string): Promise {
- return this.cache.get(this.getKey(key));
+ const value = await this.cache.get(this.getKey(key));
+
+ return value;
}
async set(key: string, value: T, ttl?: Milliseconds) {
diff --git a/packages/twenty-server/src/engine/core-modules/graphql/hooks/use-graphql-error-handler.hook.ts b/packages/twenty-server/src/engine/core-modules/graphql/hooks/use-graphql-error-handler.hook.ts
index bd43061cbcc..e8164090cdd 100644
--- a/packages/twenty-server/src/engine/core-modules/graphql/hooks/use-graphql-error-handler.hook.ts
+++ b/packages/twenty-server/src/engine/core-modules/graphql/hooks/use-graphql-error-handler.hook.ts
@@ -95,6 +95,11 @@ export const useGraphQLErrorHandlerHook = <
'Anonymous Operation';
const workspaceInfo = extractWorkspaceInfo(args.contextValue.req);
+ // eslint-disable-next-line no-console
+ console.log(
+ `[GQL Execute] Processing GQL query ${opName} on workspace ${workspaceInfo?.id}`,
+ );
+
return {
onExecuteDone(payload) {
const handleResult: OnExecuteDoneHookResultOnNextHook