File size: 2,585 Bytes
d9494a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import { type ObjectsPermissions } from 'twenty-shared/types';
import { type ObjectLiteral } from 'typeorm';
import { type QueryExpressionMap } from 'typeorm/query-builder/QueryExpressionMap';

import { type FeatureFlagMap } from 'src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface';
import { type WorkspaceInternalContext } from 'src/engine/twenty-orm/interfaces/workspace-internal-context.interface';

import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
import { type WorkspaceDeleteQueryBuilder } from 'src/engine/twenty-orm/repository/workspace-delete-query-builder';
import { type WorkspaceInsertQueryBuilder } from 'src/engine/twenty-orm/repository/workspace-insert-query-builder';
import { WorkspaceSelectQueryBuilder } from 'src/engine/twenty-orm/repository/workspace-select-query-builder';
import { type WorkspaceSoftDeleteQueryBuilder } from 'src/engine/twenty-orm/repository/workspace-soft-delete-query-builder';
import { type WorkspaceUpdateQueryBuilder } from 'src/engine/twenty-orm/repository/workspace-update-query-builder';

type EventSelectQueryBuilderFactoryArgs<T extends ObjectLiteral> = {
  queryBuilder:
    | WorkspaceUpdateQueryBuilder<T>
    | WorkspaceSoftDeleteQueryBuilder<T>
    | WorkspaceDeleteQueryBuilder<T>
    | WorkspaceInsertQueryBuilder<T>;
  authContext: WorkspaceAuthContext;
  internalContext: WorkspaceInternalContext;
  featureFlagMap: FeatureFlagMap;
  expressionMap: QueryExpressionMap;
  objectRecordsPermissions: ObjectsPermissions;
};

export const computeEventSelectQueryBuilder = <T extends ObjectLiteral>({
  queryBuilder,
  authContext,
  featureFlagMap,
  internalContext,
  expressionMap,
  objectRecordsPermissions,
}: EventSelectQueryBuilderFactoryArgs<T>): WorkspaceSelectQueryBuilder<T> => {
  const eventSelectQueryBuilder = new WorkspaceSelectQueryBuilder(
    queryBuilder as unknown as WorkspaceSelectQueryBuilder<T>,
    objectRecordsPermissions,
    internalContext,
    true,
    authContext,
    featureFlagMap,
  );

  eventSelectQueryBuilder.expressionMap.wheres = expressionMap.wheres;
  eventSelectQueryBuilder.expressionMap.aliases = expressionMap.aliases;
  eventSelectQueryBuilder.setParameters(expressionMap.parameters);

  if (
    eventSelectQueryBuilder.expressionMap.selects.length === 0 &&
    eventSelectQueryBuilder.expressionMap.mainAlias
  ) {
    eventSelectQueryBuilder.expressionMap.selects = [
      { selection: eventSelectQueryBuilder.expressionMap.mainAlias.name },
    ];
  }

  return eventSelectQueryBuilder;
};