Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| eeb8fff707 | |||
| f8ff334f39 | |||
| 573ebd205a | |||
| 0f3aea8563 | |||
| 03c44811ae |
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "twenty-emails",
|
||||
"version": "0.31.0",
|
||||
"version": "0.31.3",
|
||||
"description": "",
|
||||
"author": "",
|
||||
"private": true,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "twenty-front",
|
||||
"version": "0.31.0",
|
||||
"version": "0.31.3",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "twenty-server",
|
||||
"version": "0.31.0",
|
||||
"version": "0.31.3",
|
||||
"description": "",
|
||||
"author": "",
|
||||
"private": true,
|
||||
|
||||
+4
-85
@@ -1,4 +1,4 @@
|
||||
import { ObjectLiteral, WhereExpressionBuilder } from 'typeorm';
|
||||
import { WhereExpressionBuilder } from 'typeorm';
|
||||
|
||||
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
|
||||
|
||||
@@ -6,17 +6,13 @@ import {
|
||||
GraphqlQueryRunnerException,
|
||||
GraphqlQueryRunnerExceptionCode,
|
||||
} from 'src/engine/api/graphql/graphql-query-runner/errors/graphql-query-runner.exception';
|
||||
import { computeWhereConditionParts } from 'src/engine/api/graphql/graphql-query-runner/utils/compute-where-condition-parts';
|
||||
import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types';
|
||||
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
|
||||
import { FieldMetadataMap } from 'src/engine/metadata-modules/utils/generate-object-metadata-map.util';
|
||||
import { CompositeFieldMetadataType } from 'src/engine/metadata-modules/workspace-migration/factories/composite-column-action.factory';
|
||||
import { capitalize } from 'src/utils/capitalize';
|
||||
|
||||
type WhereConditionParts = {
|
||||
sql: string;
|
||||
params: ObjectLiteral;
|
||||
};
|
||||
|
||||
export class GraphqlQueryFilterFieldParser {
|
||||
private fieldMetadataMap: FieldMetadataMap;
|
||||
|
||||
@@ -57,7 +53,7 @@ export class GraphqlQueryFilterFieldParser {
|
||||
}
|
||||
}
|
||||
|
||||
const { sql, params } = this.computeWhereConditionParts(
|
||||
const { sql, params } = computeWhereConditionParts(
|
||||
operator,
|
||||
objectNameSingular,
|
||||
key,
|
||||
@@ -71,83 +67,6 @@ export class GraphqlQueryFilterFieldParser {
|
||||
}
|
||||
}
|
||||
|
||||
private computeWhereConditionParts(
|
||||
operator: string,
|
||||
objectNameSingular: string,
|
||||
key: string,
|
||||
value: any,
|
||||
): WhereConditionParts {
|
||||
const uuid = Math.random().toString(36).slice(2, 7);
|
||||
|
||||
switch (operator) {
|
||||
case 'eq':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" = :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: value },
|
||||
};
|
||||
case 'neq':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" != :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: value },
|
||||
};
|
||||
case 'gt':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" > :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: value },
|
||||
};
|
||||
case 'gte':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" >= :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: value },
|
||||
};
|
||||
case 'lt':
|
||||
return {
|
||||
sql: `"${objectNameSingular}".${key} < :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: value },
|
||||
};
|
||||
case 'lte':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" <= :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: value },
|
||||
};
|
||||
case 'in':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" IN (:...${key}${uuid})`,
|
||||
params: { [`${key}${uuid}`]: value },
|
||||
};
|
||||
case 'is':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" IS ${value === 'NULL' ? 'NULL' : 'NOT NULL'}`,
|
||||
params: {},
|
||||
};
|
||||
case 'like':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" LIKE :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: `${value}` },
|
||||
};
|
||||
case 'ilike':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" ILIKE :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: `${value}` },
|
||||
};
|
||||
case 'startsWith':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" LIKE :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: `${value}` },
|
||||
};
|
||||
case 'endsWith':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" LIKE :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: `${value}` },
|
||||
};
|
||||
default:
|
||||
throw new GraphqlQueryRunnerException(
|
||||
`Operator "${operator}" is not supported`,
|
||||
GraphqlQueryRunnerExceptionCode.UNSUPPORTED_OPERATOR,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private parseCompositeFieldForFilter(
|
||||
queryBuilder: WhereExpressionBuilder,
|
||||
fieldMetadata: FieldMetadataInterface,
|
||||
@@ -182,7 +101,7 @@ export class GraphqlQueryFilterFieldParser {
|
||||
subFieldFilter as Record<string, any>,
|
||||
);
|
||||
|
||||
const { sql, params } = this.computeWhereConditionParts(
|
||||
const { sql, params } = computeWhereConditionParts(
|
||||
operator,
|
||||
objectNameSingular,
|
||||
fullFieldName,
|
||||
|
||||
+6
-4
@@ -361,19 +361,21 @@ export class GraphqlQueryRunnerService {
|
||||
authContext.workspace.id,
|
||||
);
|
||||
|
||||
const resultWithGettersArray = Array.isArray(resultWithGetters)
|
||||
? resultWithGetters
|
||||
: [resultWithGetters];
|
||||
|
||||
await this.workspaceQueryHookService.executePostQueryHooks(
|
||||
authContext,
|
||||
objectMetadataItem.nameSingular,
|
||||
operationName,
|
||||
Array.isArray(resultWithGetters)
|
||||
? resultWithGetters
|
||||
: [resultWithGetters],
|
||||
resultWithGettersArray,
|
||||
);
|
||||
|
||||
const jobOperation = this.operationNameToJobOperation(operationName);
|
||||
|
||||
if (jobOperation) {
|
||||
await this.triggerWebhooks(resultWithGetters, jobOperation, options);
|
||||
await this.triggerWebhooks(resultWithGettersArray, jobOperation, options);
|
||||
}
|
||||
|
||||
return resultWithGetters;
|
||||
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
import { ObjectLiteral } from 'typeorm';
|
||||
|
||||
import {
|
||||
GraphqlQueryRunnerException,
|
||||
GraphqlQueryRunnerExceptionCode,
|
||||
} from 'src/engine/api/graphql/graphql-query-runner/errors/graphql-query-runner.exception';
|
||||
|
||||
type WhereConditionParts = {
|
||||
sql: string;
|
||||
params: ObjectLiteral;
|
||||
};
|
||||
|
||||
export const computeWhereConditionParts = (
|
||||
operator: string,
|
||||
objectNameSingular: string,
|
||||
key: string,
|
||||
value: any,
|
||||
): WhereConditionParts => {
|
||||
const uuid = Math.random().toString(36).slice(2, 7);
|
||||
|
||||
switch (operator) {
|
||||
case 'eq':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" = :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: value },
|
||||
};
|
||||
case 'neq':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" != :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: value },
|
||||
};
|
||||
case 'gt':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" > :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: value },
|
||||
};
|
||||
case 'gte':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" >= :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: value },
|
||||
};
|
||||
case 'lt':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" < :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: value },
|
||||
};
|
||||
case 'lte':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" <= :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: value },
|
||||
};
|
||||
case 'in':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" IN (:...${key}${uuid})`,
|
||||
params: { [`${key}${uuid}`]: value },
|
||||
};
|
||||
case 'is':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" IS ${value === 'NULL' ? 'NULL' : 'NOT NULL'}`,
|
||||
params: {},
|
||||
};
|
||||
case 'like':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" LIKE :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: `${value}` },
|
||||
};
|
||||
case 'ilike':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" ILIKE :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: `${value}` },
|
||||
};
|
||||
case 'startsWith':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" LIKE :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: `${value}` },
|
||||
};
|
||||
case 'endsWith':
|
||||
return {
|
||||
sql: `"${objectNameSingular}"."${key}" LIKE :${key}${uuid}`,
|
||||
params: { [`${key}${uuid}`]: `${value}` },
|
||||
};
|
||||
default:
|
||||
throw new GraphqlQueryRunnerException(
|
||||
`Operator "${operator}" is not supported`,
|
||||
GraphqlQueryRunnerExceptionCode.UNSUPPORTED_OPERATOR,
|
||||
);
|
||||
}
|
||||
};
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "twenty-ui",
|
||||
"version": "0.31.0",
|
||||
"version": "0.31.3",
|
||||
"type": "module",
|
||||
"main": "./src/index.ts",
|
||||
"exports": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "twenty-website",
|
||||
"version": "0.31.0",
|
||||
"version": "0.31.3",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"nx": "NX_DEFAULT_PROJECT=twenty-website node ../../node_modules/nx/bin/nx.js",
|
||||
|
||||
Reference in New Issue
Block a user