From b0d75169511d578e1fcfac8b4e15cac4398b7664 Mon Sep 17 00:00:00 2001
From: Paul Rastoin <45004772+prastoin@users.noreply.github.com>
Date: Tue, 30 Jun 2026 11:16:01 +0200
Subject: [PATCH] Deprecate `asExpression` from field metadata search_vector
(#22287)
## Summary
Fully deprecates the cached `asExpression` / `generatedType` settings on
`TS_VECTOR` (searchVector) fields. Previously the generated-column
expression was stored in `FieldMetadataSettings` and kept in sync via
imperative recompute side-effects. It is now **derived at DDL time**
from the `searchFieldMetadata` rows that describe which fields feed the
search vector, making `searchFieldMetadata` the single source of truth
and removing a whole class of cache-drift bugs.
This is delivered across the milestones tracked in #2587 and coordinates
with the frontend migration (#1428).
## Why
- The searchVector expression lived in two places (stored
`settings.asExpression` + the actual generated column), kept consistent
by bespoke side-effects (`recompute-search-vector-on-field-rename`,
label-identifier recompute, etc.).
- The frontend reconstructed the searchable-fields list by
**regex-parsing** the stored `asExpression`.
- Both are brittle. Deriving the expression from `searchFieldMetadata`
rows at build/run time removes the cache and the parsing.
## What changed
### Server - data model & derivation
- Introduce the `tsVectorFieldMetadata` relation on
`searchFieldMetadata` (`tsVectorFieldMetadataId` / universal identifier)
linking each searchable-field row to its target `TS_VECTOR` field.
- New runtime derivation
`deriveSearchVectorAsExpressionForTsVectorField`
(`flat-search-field-metadata/utils/...`) used by the create-object and
update-field handlers to generate the column expression from
`searchFieldMetadata` rows.
- Remove `asExpression` / `generatedType` from stored settings:
`FieldMetadataSettings.TS_VECTOR` is now `null`; the column builder
(`generate-column-definitions.util.ts`) hardcodes `generatedType:
'STORED'` and requires the derived expression.
- Delete the imperative recompute side-effects and the
`compute-search-vector-universal-settings-from-object-manifest` path;
drop the `settings` block from all 28 standard
`compute-*-standard-flat-field-metadata` utils.
### Server - migration runner
- New `rebuildSearchVector` marker on `update-field` actions: the
orchestrator synthesizes targeted column rebuilds
(`compute-search-vector-rebuild-target-universal-identifiers.util.ts` +
the deprioritize aggregator) only when a searchFieldMetadata change or
indexed-field rename actually requires it - instead of rebuilding on
every settings touch.
- Deferrable FKs + in-flight ID resolution so a `searchFieldMetadata`
row and its `TS_VECTOR` field can be created in the same transaction
(deterministic UUIDs).
### Frontend (contract change, #1428)
- New `SearchFieldMetadataDTO` + dataloader exposing
`searchFieldMetadataList` on object metadata.
- `SettingsObjectSearchSection` now reads
`objectMetadataItem.searchFieldMetadatas` instead of parsing
`asExpression`; new `SearchFieldMetadataItem` type, fragment, and
mapping updates.
### Upgrade commands (2.18)
-
`2-18-instance-command-fast-...-add-ts-vector-field-metadata-id-to-search-field-metadata`
-
`2-18-instance-command-fast-...-make-search-field-metadata-fks-deferrable`
-
`2-18-instance-command-slow-...-backfill-ts-vector-field-metadata-id-on-search-field-metadata`
(These were relocated from 2.16 to 2.18 and re-timestamped into an
ordered block - add column -> make FK deferrable -> backfill data -
since 2.16/2.17 are released.)
### Tests
- Updated search-vector side-effect integration specs to assert behavior
(search works) rather than the now-removed `asExpression`; removed the
obsolete expression-validation specs; refreshed the application-sync
snapshot (`universalSettings: null`).
## Upgrade / compatibility notes
- Existing workspaces keep their stored `settings` until a later
cleanup; nothing reads it anymore. The new derivation drives all DDL
going forward.
- Schema changes are gated behind the 2.18 instance commands above.
## Known follow-up (separate PR)
https://github.com/twentyhq/core-team-issues/issues/2620
- The column rebuild (`DROP`/`ADD` of the `searchVector` STORED column)
cascade-drops its GIN index and does not recreate it - a pre-existing
regression on `main` inherited here. A follow-up PR will fix the rebuild
handler to recreate the GIN index and add a 2.18 workspace command to
recompute every search vector + strip the deprecated settings.
(Planned.)
## Test plan
- [ ] `npx nx typecheck twenty-server` / `twenty-front`
- [ ] `npx nx lint:diff-with-main twenty-server` / `twenty-front`
- [ ] Server integration: create/update/delete field, rename indexed
field, update object - search returns expected records
- [ ] Run the 2.18 instance commands on a seeded DB; verify
`tsVectorFieldMetadataId` backfilled and FKs deferrable
- [ ] Frontend: object Search settings tab lists the correct searchable
fields (no `asExpression` parsing)
close https://github.com/twentyhq/core-team-issues/issues/2587
---
.../src/metadata/generated/schema.graphql | 10 +
.../src/metadata/generated/schema.ts | 31 +
.../src/metadata/generated/types.ts | 810 +++++++++---------
.../mock-data/generate-object-metadata.ts | 9 +
.../src/generated-metadata/graphql.ts | 31 +-
.../object-metadata/graphql/fragment.ts | 8 +
.../types/EnrichedObjectMetadataItem.ts | 3 +
.../types/SearchFieldMetadataItem.ts | 8 +
...bjectMetadataItemsToObjectMetadataItems.ts | 15 +-
.../objectMetadataItemSchema.ts | 2 +
.../searchFieldMetadataItemSchema.ts | 13 +
.../useAggregateRecordsQuery.test.tsx | 1 +
.../__tests__/turnSortsIntoOrderBy.test.ts | 3 +
...ildRecordGqlFieldsAggregateForView.test.ts | 1 +
.../__tests__/generateAggregateQuery.test.ts | 2 +
.../tabs/SettingsObjectSearchSection.tsx | 55 +-
.../WorkflowFieldsMultiSelect.stories.ts | 1 +
.../SettingsApplicationPermissionsTab.tsx | 1 +
.../metadata/objects/mock-objects-metadata.ts | 29 +
...call-recording-standard-objects.command.ts | 2 +
...-metadata-backfill-operations.util.spec.ts | 92 +-
...field-metadata-backfill-operations.util.ts | 11 +
...ld-metadata-id-to-search-field-metadata.ts | 53 ++
...ld-metadata-id-on-search-field-metadata.ts | 51 ++
...-metadata-upgrade-command-name.constant.ts | 2 +
.../instance-commands.constant.ts | 14 +-
...generate-workspace-schema-ddl.util.spec.ts | 114 +++
.../generate-workspace-schema-ddl.util.ts | 75 +-
.../workspace-export.module.ts | 7 +-
.../workspace-export.service.ts | 49 +-
...t-to-universal-flat-field-metadata.util.ts | 1 +
...-all-universal-flat-entity-maps.service.ts | 21 +-
...settings-from-object-manifest.util.spec.ts | 149 ----
...rsal-settings-from-object-manifest.util.ts | 37 -
.../dataloaders/dataloader.interface.ts | 7 +
.../engine/dataloaders/dataloader.service.ts | 49 ++
.../field-metadata/field-metadata.entity.ts | 7 +
.../services/field-metadata.service.ts | 11 +-
...configuration-by-metadata-name.constant.ts | 5 +
...ny-to-one-metadata-foreign-key.constant.ts | 3 +
...many-to-one-metadata-relations.constant.ts | 9 +-
...one-to-many-metadata-relations.constant.ts | 6 +
...ny-entity-relation-properties.type-test.ts | 5 +-
...ity-related-entity-properties.type-test.ts | 3 +-
...a-related-metadata-names.util.spec.ts.snap | 1 +
...ata-names-children-first.util.spec.ts.snap | 2 +-
...ity-maps-through-mutation-or-throw.util.ts | 15 +
.../__mocks__/get-flat-field-metadata.mock.ts | 2 +
...elation-target-flat-field-metadata-mock.ts | 2 +
...lat-field-metadatas-to-create.spec.ts.snap | 4 +
...e-flat-field-metadata-map-cache.service.ts | 14 +
...tadata-deletion-for-deleted-fields.util.ts | 31 +-
...-to-flat-field-metadatas-to-delete.util.ts | 7 +-
...data-entity-to-flat-field-metadata.util.ts | 6 +
...field-input-to-flat-field-metadata.util.ts | 5 -
...d-metadata-from-create-field-input.util.ts | 1 +
...-field-metadata-update-side-effect.util.ts | 29 +-
...pute-search-vector-on-field-rename.util.ts | 68 --
...date-ts-vector-flat-field-metadata.util.ts | 19 -
...create-on-label-identifier-update.util.ts} | 48 +-
...metadata-and-related-flat-entities.util.ts | 2 -
...object-metadata-update-side-effect.util.ts | 15 +-
...-field-from-search-field-metadatas.util.ts | 112 ---
...search-field-metadata-map-cache.service.ts | 43 +-
...at-search-field-metadata-for-field.util.ts | 4 +
...ession-from-search-field-metadatas.util.ts | 14 +-
...-as-expression-for-ts-vector-field.util.ts | 53 ++
...tor-flat-field-metadata-for-object.util.ts | 28 +
...adata-to-search-field-metadata-dto.util.ts | 15 +
...tity-to-flat-search-field-metadata.util.ts | 13 +
...al-system-flat-field-metadatas.constant.ts | 8 +
.../object-metadata.resolver.ts | 22 +
.../object-metadata.service.ts | 6 +-
...-field-metadatas-for-custom-object.util.ts | 9 +-
...-field-metadatas-for-custom-object.util.ts | 2 +
.../dtos/search-field-metadata.dto.ts | 57 ++
.../search-field-metadata.exception.ts | 2 +
.../search-field-metadata.entity.ts | 18 +-
.../workspace-entity-manager.spec.ts | 2 +
.../__tests__/workspace.repository.spec.ts | 2 +
...hment-standard-flat-field-metadata.util.ts | 9 -
...klist-standard-flat-field-metadata.util.ts | 9 -
...ation-standard-flat-field-metadata.util.ts | 9 -
...ipant-standard-flat-field-metadata.util.ts | 9 -
...event-standard-flat-field-metadata.util.ts | 9 -
...rding-standard-flat-field-metadata.util.ts | 8 -
...mpany-standard-flat-field-metadata.util.ts | 9 -
...board-standard-flat-field-metadata.util.ts | 9 -
...paign-standard-flat-field-metadata.util.ts | 9 -
...older-standard-flat-field-metadata.util.ts | 9 -
...ation-standard-flat-field-metadata.util.ts | 8 -
...ember-standard-flat-field-metadata.util.ts | 9 -
...-list-standard-flat-field-metadata.util.ts | 9 -
...ipant-standard-flat-field-metadata.util.ts | 9 -
...ssage-standard-flat-field-metadata.util.ts | 9 -
...hread-standard-flat-field-metadata.util.ts | 9 -
...-note-standard-flat-field-metadata.util.ts | 9 -
...arget-standard-flat-field-metadata.util.ts | 9 -
...unity-standard-flat-field-metadata.util.ts | 9 -
...erson-standard-flat-field-metadata.util.ts | 9 -
...-task-standard-flat-field-metadata.util.ts | 9 -
...arget-standard-flat-field-metadata.util.ts | 9 -
...ivity-standard-flat-field-metadata.util.ts | 9 -
...igger-standard-flat-field-metadata.util.ts | 9 -
...w-run-standard-flat-field-metadata.util.ts | 9 -
...kflow-standard-flat-field-metadata.util.ts | 9 -
...rsion-standard-flat-field-metadata.util.ts | 9 -
...ember-standard-flat-field-metadata.util.ts | 8 -
...reate-standard-field-flat-metadata.util.ts | 2 +
...ndard-relation-field-flat-metadata.util.ts | 2 +
...tandard-search-field-flat-metadata.util.ts | 11 +
...orkspace-migration-action-with-ids.util.ts | 35 +-
...ce-migration-build-orchestrator.service.ts | 13 +
...e-orchestrator-actions-report-args.type.ts | 1 +
...ggregator-properties.constant.spec.ts.snap | 1 +
...pdated-matrix-dispatcher.util.spec.ts.snap | 8 +
...ity-maps-through-mutation-or-throw.util.ts | 15 +
...versal-relation-identifiers-to-ids.util.ts | 18 +
...search-vector-update-field-actions.util.ts | 42 +-
...regate-orchestrator-actions-report.util.ts | 2 +
.../compute-ordered-migration-actions.util.ts | 8 +-
...build-target-universal-identifiers.util.ts | 91 ++
.../types/workspace-migration-field-action.ts | 8 +-
...search-field-metadata-validator.service.ts | 34 +
.../update-field-action-handler.service.ts | 100 ++-
...ld-metadata-to-flat-field-metadata.util.ts | 1 +
.../create-object-action-handler.service.ts | 23 +-
...h-field-metadata-action-handler.service.ts | 7 +-
.../workspace-migration-runner.service.ts | 5 +
...space-migration-action-runner-args.type.ts | 2 +
...-universal-identifier-from-actions.util.ts | 57 ++
.../utils/generate-column-definitions.util.ts | 14 +-
...ate-action-on-all-flat-entity-maps.util.ts | 15 +-
.../get-field-metadata-entity.mock.ts | 1 +
...ect-system-fields.integration-spec.ts.snap | 34 +-
...rkspace-migration.integration-spec.ts.snap | 16 +-
...-expression-validation.integration-spec.ts | 74 --
...rch-vector-side-effect.integration-spec.ts | 59 +-
...-expression-validation.integration-spec.ts | 148 ----
...rch-vector-side-effect.integration-spec.ts | 53 +-
...bject-metadata-v2.integration-spec.ts.snap | 75 ++
...ach-vector-side-effect.integration-spec.ts | 58 --
...ract-record-ids-and-dates-as-expect-any.ts | 3 +-
.../src/types/FieldMetadataSettings.ts | 7 +-
144 files changed, 2030 insertions(+), 1759 deletions(-)
create mode 100644 packages/twenty-front/src/modules/object-metadata/types/SearchFieldMetadataItem.ts
create mode 100644 packages/twenty-front/src/modules/object-metadata/validation-schemas/searchFieldMetadataItemSchema.ts
create mode 100644 packages/twenty-server/src/database/commands/upgrade-version-command/2-18/2-18-instance-command-fast-1810000001000-add-ts-vector-field-metadata-id-to-search-field-metadata.ts
create mode 100644 packages/twenty-server/src/database/commands/upgrade-version-command/2-18/2-18-instance-command-slow-1810000003000-backfill-ts-vector-field-metadata-id-on-search-field-metadata.ts
create mode 100644 packages/twenty-server/src/database/commands/upgrade-version-command/2-18/add-ts-vector-field-metadata-id-to-search-field-metadata-upgrade-command-name.constant.ts
create mode 100644 packages/twenty-server/src/database/commands/workspace-export/utils/__tests__/generate-workspace-schema-ddl.util.spec.ts
delete mode 100644 packages/twenty-server/src/engine/core-modules/application/application-manifest/utils/__tests__/compute-search-vector-universal-settings-from-object-manifest.util.spec.ts
delete mode 100644 packages/twenty-server/src/engine/core-modules/application/application-manifest/utils/compute-search-vector-universal-settings-from-object-manifest.util.ts
delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-search-vector-on-field-rename.util.ts
rename packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/{recompute-search-vector-on-label-identifier-update.util.ts => compute-search-field-metadata-to-create-on-label-identifier-update.util.ts} (68%)
delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-search-vector-field-from-search-field-metadatas.util.ts
create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/derive-search-vector-as-expression-for-ts-vector-field.util.ts
create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/find-ts-vector-flat-field-metadata-for-object.util.ts
create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/from-flat-search-field-metadata-to-search-field-metadata-dto.util.ts
create mode 100644 packages/twenty-server/src/engine/metadata-modules/search-field-metadata/dtos/search-field-metadata.dto.ts
create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/compute-search-vector-rebuild-target-universal-identifiers.util.ts
create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/build-preallocated-id-by-universal-identifier-from-actions.util.ts
delete mode 100644 packages/twenty-server/test/integration/metadata/suites/application/failing-sync-application-search-vector-expression-validation.integration-spec.ts
delete mode 100644 packages/twenty-server/test/integration/metadata/suites/field-metadata/update-one-field-metadata-search-vector-expression-validation.integration-spec.ts
diff --git a/packages/twenty-client-sdk/src/metadata/generated/schema.graphql b/packages/twenty-client-sdk/src/metadata/generated/schema.graphql
index 1046d09f7c..4d8d52de11 100644
--- a/packages/twenty-client-sdk/src/metadata/generated/schema.graphql
+++ b/packages/twenty-client-sdk/src/metadata/generated/schema.graphql
@@ -666,6 +666,7 @@ type Object {
duplicateCriteria: [[String!]!]
fieldsList: [Field!]!
indexMetadataList: [Index!]!
+ searchFieldMetadataList: [SearchField!]!
fields(
"""Limit or page results."""
paging: CursorPaging! = {first: 10}
@@ -2085,6 +2086,15 @@ type ObjectRecordCount {
totalCount: Int!
}
+type SearchField {
+ id: UUID!
+ fieldMetadataId: UUID!
+ tsVectorFieldMetadataId: UUID!
+ position: Float!
+ createdAt: DateTime!
+ updatedAt: DateTime!
+}
+
type ObjectConnection {
"""Paging information"""
pageInfo: PageInfo!
diff --git a/packages/twenty-client-sdk/src/metadata/generated/schema.ts b/packages/twenty-client-sdk/src/metadata/generated/schema.ts
index 50b8f4570e..c75e835726 100644
--- a/packages/twenty-client-sdk/src/metadata/generated/schema.ts
+++ b/packages/twenty-client-sdk/src/metadata/generated/schema.ts
@@ -455,6 +455,7 @@ export interface Object {
duplicateCriteria?: Scalars['String'][][]
fieldsList: Field[]
indexMetadataList: Index[]
+ searchFieldMetadataList: SearchField[]
fields: ObjectFieldsConnection
indexMetadatas: ObjectIndexMetadatasConnection
__typename: 'Object'
@@ -1719,6 +1720,16 @@ export interface ObjectRecordCount {
__typename: 'ObjectRecordCount'
}
+export interface SearchField {
+ id: Scalars['UUID']
+ fieldMetadataId: Scalars['UUID']
+ tsVectorFieldMetadataId: Scalars['UUID']
+ position: Scalars['Float']
+ createdAt: Scalars['DateTime']
+ updatedAt: Scalars['DateTime']
+ __typename: 'SearchField'
+}
+
export interface ObjectConnection {
/** Paging information */
pageInfo: PageInfo
@@ -3487,6 +3498,7 @@ export interface ObjectGenqlSelection{
duplicateCriteria?: boolean | number
fieldsList?: FieldGenqlSelection
indexMetadataList?: IndexGenqlSelection
+ searchFieldMetadataList?: SearchFieldGenqlSelection
fields?: (ObjectFieldsConnectionGenqlSelection & { __args: {
/** Limit or page results. */
paging: CursorPaging,
@@ -4802,6 +4814,17 @@ export interface ObjectRecordCountGenqlSelection{
__scalar?: boolean | number
}
+export interface SearchFieldGenqlSelection{
+ id?: boolean | number
+ fieldMetadataId?: boolean | number
+ tsVectorFieldMetadataId?: boolean | number
+ position?: boolean | number
+ createdAt?: boolean | number
+ updatedAt?: boolean | number
+ __typename?: boolean | number
+ __scalar?: boolean | number
+}
+
export interface ObjectConnectionGenqlSelection{
/** Paging information */
pageInfo?: PageInfoGenqlSelection
@@ -7771,6 +7794,14 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
+ const SearchField_possibleTypes: string[] = ['SearchField']
+ export const isSearchField = (obj?: { __typename?: any } | null): obj is SearchField => {
+ if (!obj?.__typename) throw new Error('__typename is missing in "isSearchField"')
+ return SearchField_possibleTypes.includes(obj.__typename)
+ }
+
+
+
const ObjectConnection_possibleTypes: string[] = ['ObjectConnection']
export const isObjectConnection = (obj?: { __typename?: any } | null): obj is ObjectConnection => {
if (!obj?.__typename) throw new Error('__typename is missing in "isObjectConnection"')
diff --git a/packages/twenty-client-sdk/src/metadata/generated/types.ts b/packages/twenty-client-sdk/src/metadata/generated/types.ts
index 67d1ce4c17..ac68e81386 100644
--- a/packages/twenty-client-sdk/src/metadata/generated/types.ts
+++ b/packages/twenty-client-sdk/src/metadata/generated/types.ts
@@ -59,30 +59,30 @@ export default {
188,
191,
204,
- 219,
- 231,
- 237,
- 273,
- 275,
+ 220,
+ 232,
+ 238,
+ 274,
276,
277,
278,
279,
280,
281,
- 288,
- 327,
+ 282,
+ 289,
328,
329,
330,
- 332,
- 334,
- 345,
- 352,
- 359,
- 442,
- 487,
- 496
+ 331,
+ 333,
+ 335,
+ 346,
+ 353,
+ 360,
+ 443,
+ 488,
+ 497
],
"types": {
"BillingProductDTO": {
@@ -1287,8 +1287,11 @@ export default {
"indexMetadataList": [
47
],
+ "searchFieldMetadataList": [
+ 213
+ ],
"fields": [
- 216,
+ 217,
{
"paging": [
49,
@@ -1301,7 +1304,7 @@ export default {
}
],
"indexMetadatas": [
- 214,
+ 215,
{
"paging": [
49,
@@ -1915,7 +1918,7 @@ export default {
146
],
"billingEntitlements": [
- 230
+ 231
],
"hasValidSignedEnterpriseKey": [
6
@@ -2013,7 +2016,7 @@ export default {
20
],
"deletedWorkspaceMembers": [
- 229
+ 230
],
"hasPassword": [
6
@@ -2025,7 +2028,7 @@ export default {
17
],
"availableWorkspaces": [
- 228
+ 229
],
"__typename": [
1
@@ -4047,6 +4050,29 @@ export default {
1
]
},
+ "SearchField": {
+ "id": [
+ 3
+ ],
+ "fieldMetadataId": [
+ 3
+ ],
+ "tsVectorFieldMetadataId": [
+ 3
+ ],
+ "position": [
+ 11
+ ],
+ "createdAt": [
+ 4
+ ],
+ "updatedAt": [
+ 4
+ ],
+ "__typename": [
+ 1
+ ]
+ },
"ObjectConnection": {
"pageInfo": [
206
@@ -4085,7 +4111,7 @@ export default {
206
],
"edges": [
- 215
+ 216
],
"__typename": [
1
@@ -4096,7 +4122,7 @@ export default {
206
],
"edges": [
- 215
+ 216
],
"__typename": [
1
@@ -4104,7 +4130,7 @@ export default {
},
"AppConnection": {
"id": [
- 219
+ 220
],
"providerName": [
1
@@ -4199,7 +4225,7 @@ export default {
178
],
"workspace": [
- 223
+ 224
],
"__typename": [
1
@@ -4268,7 +4294,7 @@ export default {
1
],
"sso": [
- 226
+ 227
],
"__typename": [
1
@@ -4276,10 +4302,10 @@ export default {
},
"AvailableWorkspaces": {
"availableWorkspacesForSignIn": [
- 227
+ 228
],
"availableWorkspacesForSignUp": [
- 227
+ 228
],
"__typename": [
1
@@ -4307,7 +4333,7 @@ export default {
},
"BillingEntitlement": {
"key": [
- 231
+ 232
],
"value": [
6
@@ -4345,7 +4371,7 @@ export default {
1
],
"records": [
- 232
+ 233
],
"isCustomDomainEnabled": [
6
@@ -4384,7 +4410,7 @@ export default {
1
],
"connectionSecurity": [
- 237
+ 238
],
"__typename": [
1
@@ -4393,13 +4419,13 @@ export default {
"EmailConnectionSecurity": {},
"PublicImapSmtpCaldavConnectionParameters": {
"IMAP": [
- 236
+ 237
],
"SMTP": [
- 236
+ 237
],
"CALDAV": [
- 236
+ 237
],
"__typename": [
1
@@ -4455,7 +4481,7 @@ export default {
4
],
"connectionParameters": [
- 238
+ 239
],
"__typename": [
1
@@ -4506,10 +4532,10 @@ export default {
},
"AvailableWorkspacesAndAccessTokens": {
"tokens": [
- 244
+ 245
],
"availableWorkspaces": [
- 228
+ 229
],
"__typename": [
1
@@ -4561,7 +4587,7 @@ export default {
32
],
"workspace": [
- 249
+ 250
],
"__typename": [
1
@@ -4638,7 +4664,7 @@ export default {
},
"AuthTokens": {
"tokens": [
- 244
+ 245
],
"__typename": [
1
@@ -4679,7 +4705,7 @@ export default {
32
],
"workspace": [
- 249
+ 250
],
"__typename": [
1
@@ -4701,7 +4727,7 @@ export default {
1
],
"dailyUsage": [
- 262
+ 263
],
"__typename": [
1
@@ -4718,7 +4744,7 @@ export default {
197
],
"timeSeries": [
- 262
+ 263
],
"periodStart": [
4
@@ -4727,7 +4753,7 @@ export default {
4
],
"userDailyUsage": [
- 263
+ 264
],
"__typename": [
1
@@ -4884,10 +4910,10 @@ export default {
1
],
"status": [
- 273
+ 274
],
"verificationRecords": [
- 271
+ 272
],
"verifiedAt": [
4
@@ -4902,22 +4928,22 @@ export default {
3
],
"visibility": [
- 275
+ 276
],
"handle": [
1
],
"type": [
- 276
+ 277
],
"isContactAutoCreationEnabled": [
6
],
"contactAutoCreationPolicy": [
- 277
+ 278
],
"messageFolderImportPolicy": [
- 278
+ 279
],
"excludeNonProfessionalEmails": [
6
@@ -4926,7 +4952,7 @@ export default {
6
],
"pendingGroupEmailsAction": [
- 279
+ 280
],
"isSyncEnabled": [
6
@@ -4935,10 +4961,10 @@ export default {
4
],
"syncStatus": [
- 280
+ 281
],
"syncStage": [
- 281
+ 282
],
"syncStageStartedAt": [
4
@@ -4959,7 +4985,7 @@ export default {
4
],
"connectedAccount": [
- 239
+ 240
],
"__typename": [
1
@@ -4974,7 +5000,7 @@ export default {
"MessageChannelSyncStage": {},
"CreateEmailGroupChannelOutput": {
"messageChannel": [
- 274
+ 275
],
"forwardingAddress": [
1
@@ -5036,7 +5062,7 @@ export default {
21
],
"skipped": [
- 285
+ 286
],
"__typename": [
1
@@ -5059,7 +5085,7 @@ export default {
1
],
"visibility": [
- 288
+ 289
],
"__typename": [
1
@@ -5105,7 +5131,7 @@ export default {
1
],
"location": [
- 290
+ 291
],
"__typename": [
1
@@ -5122,7 +5148,7 @@ export default {
1
],
"connectionSecurity": [
- 237
+ 238
],
"__typename": [
1
@@ -5130,13 +5156,13 @@ export default {
},
"ImapSmtpCaldavPublicConnectionParameters": {
"IMAP": [
- 292
+ 293
],
"SMTP": [
- 292
+ 293
],
"CALDAV": [
- 292
+ 293
],
"__typename": [
1
@@ -5156,7 +5182,7 @@ export default {
3
],
"connectionParameters": [
- 293
+ 294
],
"__typename": [
1
@@ -5378,7 +5404,7 @@ export default {
1
],
"series": [
- 302
+ 303
],
"xAxisLabel": [
1
@@ -5427,7 +5453,7 @@ export default {
1
],
"data": [
- 304
+ 305
],
"__typename": [
1
@@ -5435,7 +5461,7 @@ export default {
},
"LineChartData": {
"series": [
- 305
+ 306
],
"xAxisLabel": [
1
@@ -5472,7 +5498,7 @@ export default {
},
"PieChartData": {
"data": [
- 307
+ 308
],
"showLegend": [
6
@@ -5574,13 +5600,13 @@ export default {
},
"EventLogQueryResult": {
"records": [
- 312
+ 313
],
"totalCount": [
21
],
"pageInfo": [
- 313
+ 314
],
"__typename": [
1
@@ -5644,7 +5670,7 @@ export default {
1
],
"parts": [
- 298
+ 299
],
"processedAt": [
4
@@ -5658,7 +5684,7 @@ export default {
},
"AgentChatThread": {
"id": [
- 219
+ 220
],
"title": [
1
@@ -5713,7 +5739,7 @@ export default {
},
"AiSystemPromptPreview": {
"sections": [
- 318
+ 319
],
"estimatedTokenCount": [
21
@@ -5789,10 +5815,10 @@ export default {
3
],
"evaluations": [
- 323
+ 324
],
"messages": [
- 316
+ 317
],
"createdAt": [
4
@@ -5823,19 +5849,19 @@ export default {
1
],
"syncStatus": [
- 327
- ],
- "syncStage": [
328
],
- "visibility": [
+ "syncStage": [
329
],
+ "visibility": [
+ 330
+ ],
"isContactAutoCreationEnabled": [
6
],
"contactAutoCreationPolicy": [
- 330
+ 331
],
"isSyncEnabled": [
6
@@ -5886,7 +5912,7 @@ export default {
1
],
"pendingSyncAction": [
- 332
+ 333
],
"messageChannelId": [
3
@@ -5904,7 +5930,7 @@ export default {
"MessageFolderPendingSyncAction": {},
"CollectionHash": {
"collectionName": [
- 334
+ 335
],
"hash": [
1
@@ -5968,13 +5994,13 @@ export default {
},
"MinimalMetadata": {
"objectMetadataItems": [
- 335
- ],
- "views": [
336
],
+ "views": [
+ 337
+ ],
"collectionHashes": [
- 333
+ 334
],
"__typename": [
1
@@ -6127,7 +6153,7 @@ export default {
2,
{
"input": [
- 339,
+ 340,
"GetApiKeyInput!"
]
}
@@ -6230,7 +6256,7 @@ export default {
25,
{
"input": [
- 340,
+ 341,
"AgentIdInput!"
]
}
@@ -6248,7 +6274,7 @@ export default {
}
],
"objects": [
- 213,
+ 214,
{
"paging": [
49,
@@ -6286,7 +6312,7 @@ export default {
41,
{
"input": [
- 341,
+ 342,
"LogicFunctionIdInput!"
]
}
@@ -6298,7 +6324,7 @@ export default {
15,
{
"input": [
- 341,
+ 342,
"LogicFunctionIdInput!"
]
}
@@ -6307,7 +6333,7 @@ export default {
1,
{
"input": [
- 341,
+ 342,
"LogicFunctionIdInput!"
]
}
@@ -6366,7 +6392,7 @@ export default {
}
],
"fields": [
- 217,
+ 218,
{
"paging": [
49,
@@ -6470,22 +6496,22 @@ export default {
}
],
"previewMessageCampaignAudience": [
- 283,
+ 284,
{
"input": [
- 342,
+ 343,
"PreviewMessageCampaignAudienceInput!"
]
}
],
"unsubscribeTopics": [
- 287
+ 288
],
"unsubscribePagePreviewUrl": [
1
],
"myMessageChannels": [
- 274,
+ 275,
{
"connectedAccountId": [
3
@@ -6493,13 +6519,13 @@ export default {
}
],
"getEmailingDomains": [
- 272
+ 273
],
"myConnectedAccounts": [
- 239
+ 240
],
"getToolIndex": [
- 297
+ 298
],
"getToolInputSchema": [
15,
@@ -6511,10 +6537,10 @@ export default {
}
],
"webhooks": [
- 296
+ 297
],
"webhook": [
- 296,
+ 297,
{
"id": [
3,
@@ -6523,7 +6549,7 @@ export default {
}
],
"myMessageFolders": [
- 331,
+ 332,
{
"messageChannelId": [
3
@@ -6531,7 +6557,7 @@ export default {
}
],
"myCalendarChannels": [
- 326,
+ 327,
{
"connectedAccountId": [
3
@@ -6539,33 +6565,33 @@ export default {
}
],
"minimalMetadata": [
- 337
+ 338
],
"appConnections": [
- 218,
+ 219,
{
"filter": [
- 343
+ 344
]
}
],
"appConnection": [
- 218,
+ 219,
{
"id": [
- 219,
+ 220,
"ID!"
]
}
],
"findWorkspaceAiStats": [
- 325
+ 326
],
"chatThreads": [
- 317
+ 318
],
"chatThread": [
- 317,
+ 318,
{
"id": [
3,
@@ -6574,7 +6600,7 @@ export default {
}
],
"chatMessages": [
- 316,
+ 317,
{
"threadId": [
3,
@@ -6583,7 +6609,7 @@ export default {
}
],
"chatStreamCatchupChunks": [
- 320,
+ 321,
{
"threadId": [
3,
@@ -6592,13 +6618,13 @@ export default {
}
],
"getAiSystemPromptPreview": [
- 319
+ 320
],
"skills": [
- 315
+ 316
],
"skill": [
- 315,
+ 316,
{
"id": [
3,
@@ -6607,7 +6633,7 @@ export default {
}
],
"agentTurns": [
- 324,
+ 325,
{
"agentId": [
3,
@@ -6616,7 +6642,7 @@ export default {
}
],
"checkUserExists": [
- 259,
+ 260,
{
"email": [
1,
@@ -6628,7 +6654,7 @@ export default {
}
],
"checkWorkspaceInviteHashIsValid": [
- 260,
+ 261,
{
"inviteHash": [
1,
@@ -6646,7 +6672,7 @@ export default {
}
],
"checkWorkspaceSubdomainAvailability": [
- 254,
+ 255,
{
"subdomain": [
1,
@@ -6655,10 +6681,10 @@ export default {
}
],
"getWorkspaceCreationDefaults": [
- 255
+ 256
],
"validatePasswordResetToken": [
- 252,
+ 253,
{
"passwordResetToken": [
1,
@@ -6670,46 +6696,46 @@ export default {
79
],
"getSSOIdentityProviders": [
- 224
+ 225
],
"eventLogs": [
- 314,
+ 315,
{
"input": [
- 344,
+ 345,
"EventLogQueryInput!"
]
}
],
"pieChartData": [
- 308,
+ 309,
{
"input": [
- 348,
+ 349,
"PieChartDataInput!"
]
}
],
"lineChartData": [
- 306,
+ 307,
{
"input": [
- 349,
+ 350,
"LineChartDataInput!"
]
}
],
"barChartData": [
- 303,
+ 304,
{
"input": [
- 350,
+ 351,
"BarChartDataInput!"
]
}
],
"getConnectedImapSmtpCaldavAccount": [
- 294,
+ 295,
{
"id": [
3,
@@ -6718,7 +6744,7 @@ export default {
}
],
"getAutoCompleteAddress": [
- 289,
+ 290,
{
"address": [
1,
@@ -6737,7 +6763,7 @@ export default {
}
],
"getAddressDetails": [
- 291,
+ 292,
{
"placeId": [
1,
@@ -6750,21 +6776,21 @@ export default {
}
],
"getUsageAnalytics": [
- 264,
+ 265,
{
"input": [
- 351
+ 352
]
}
],
"findManyPublicDomains": [
- 270
+ 271
],
"findManyMarketplaceApps": [
- 268
+ 269
],
"findMarketplaceAppDetail": [
- 269,
+ 270,
{
"universalIdentifier": [
1,
@@ -6794,7 +6820,7 @@ export default {
},
"LogicFunctionIdInput": {
"id": [
- 219
+ 220
],
"__typename": [
1
@@ -6827,10 +6853,10 @@ export default {
},
"EventLogQueryInput": {
"table": [
- 345
+ 346
],
"filters": [
- 346
+ 347
],
"first": [
21
@@ -6851,7 +6877,7 @@ export default {
1
],
"dateRange": [
- 347
+ 348
],
"recordId": [
1
@@ -6918,7 +6944,7 @@ export default {
1
],
"operationTypes": [
- 352
+ 353
],
"__typename": [
1
@@ -6930,7 +6956,7 @@ export default {
6,
{
"input": [
- 354,
+ 355,
"AddQuerySubscriptionInput!"
]
}
@@ -6939,7 +6965,7 @@ export default {
6,
{
"input": [
- 355,
+ 356,
"RemoveQueryFromEventStreamInput!"
]
}
@@ -6948,7 +6974,7 @@ export default {
160,
{
"inputs": [
- 356,
+ 357,
"[CreateNavigationMenuItemInput!]!"
]
}
@@ -6957,7 +6983,7 @@ export default {
160,
{
"input": [
- 356,
+ 357,
"CreateNavigationMenuItemInput!"
]
}
@@ -6966,7 +6992,7 @@ export default {
160,
{
"inputs": [
- 357,
+ 358,
"[UpdateOneNavigationMenuItemInput!]!"
]
}
@@ -6975,7 +7001,7 @@ export default {
160,
{
"input": [
- 357,
+ 358,
"UpdateOneNavigationMenuItemInput!"
]
}
@@ -7002,7 +7028,7 @@ export default {
131,
{
"file": [
- 359,
+ 360,
"Upload!"
]
}
@@ -7023,7 +7049,7 @@ export default {
131,
{
"file": [
- 359,
+ 360,
"Upload!"
]
}
@@ -7032,7 +7058,7 @@ export default {
131,
{
"file": [
- 359,
+ 360,
"Upload!"
]
}
@@ -7041,7 +7067,7 @@ export default {
131,
{
"file": [
- 359,
+ 360,
"Upload!"
]
}
@@ -7050,7 +7076,7 @@ export default {
131,
{
"file": [
- 359,
+ 360,
"Upload!"
]
}
@@ -7059,7 +7085,7 @@ export default {
131,
{
"file": [
- 359,
+ 360,
"Upload!"
],
"fieldMetadataId": [
@@ -7072,7 +7098,7 @@ export default {
131,
{
"file": [
- 359,
+ 360,
"Upload!"
],
"fieldMetadataUniversalIdentifier": [
@@ -7085,7 +7111,7 @@ export default {
62,
{
"input": [
- 360,
+ 361,
"CreateViewFilterGroupInput!"
]
}
@@ -7098,7 +7124,7 @@ export default {
"String!"
],
"input": [
- 361,
+ 362,
"UpdateViewFilterGroupInput!"
]
}
@@ -7125,7 +7151,7 @@ export default {
64,
{
"input": [
- 362,
+ 363,
"CreateViewFilterInput!"
]
}
@@ -7134,7 +7160,7 @@ export default {
64,
{
"input": [
- 363,
+ 364,
"UpdateViewFilterInput!"
]
}
@@ -7143,7 +7169,7 @@ export default {
64,
{
"input": [
- 365,
+ 366,
"DeleteViewFilterInput!"
]
}
@@ -7152,7 +7178,7 @@ export default {
64,
{
"input": [
- 366,
+ 367,
"DestroyViewFilterInput!"
]
}
@@ -7161,7 +7187,7 @@ export default {
70,
{
"input": [
- 367,
+ 368,
"CreateViewInput!"
]
}
@@ -7174,7 +7200,7 @@ export default {
"String!"
],
"input": [
- 368,
+ 369,
"UpdateViewInput!"
]
}
@@ -7201,7 +7227,7 @@ export default {
70,
{
"input": [
- 369,
+ 370,
"UpsertViewWidgetInput!"
]
}
@@ -7210,7 +7236,7 @@ export default {
67,
{
"input": [
- 374,
+ 375,
"CreateViewSortInput!"
]
}
@@ -7219,7 +7245,7 @@ export default {
67,
{
"input": [
- 375,
+ 376,
"UpdateViewSortInput!"
]
}
@@ -7228,7 +7254,7 @@ export default {
6,
{
"input": [
- 377,
+ 378,
"DeleteViewSortInput!"
]
}
@@ -7237,7 +7263,7 @@ export default {
6,
{
"input": [
- 378,
+ 379,
"DestroyViewSortInput!"
]
}
@@ -7246,7 +7272,7 @@ export default {
60,
{
"input": [
- 379,
+ 380,
"UpdateViewFieldInput!"
]
}
@@ -7255,7 +7281,7 @@ export default {
60,
{
"input": [
- 381,
+ 382,
"CreateViewFieldInput!"
]
}
@@ -7264,7 +7290,7 @@ export default {
60,
{
"inputs": [
- 381,
+ 382,
"[CreateViewFieldInput!]!"
]
}
@@ -7273,7 +7299,7 @@ export default {
60,
{
"input": [
- 382,
+ 383,
"DeleteViewFieldInput!"
]
}
@@ -7282,7 +7308,7 @@ export default {
60,
{
"input": [
- 383,
+ 384,
"DestroyViewFieldInput!"
]
}
@@ -7291,7 +7317,7 @@ export default {
69,
{
"input": [
- 384,
+ 385,
"UpdateViewFieldGroupInput!"
]
}
@@ -7300,7 +7326,7 @@ export default {
69,
{
"input": [
- 386,
+ 387,
"CreateViewFieldGroupInput!"
]
}
@@ -7309,7 +7335,7 @@ export default {
69,
{
"inputs": [
- 386,
+ 387,
"[CreateViewFieldGroupInput!]!"
]
}
@@ -7318,7 +7344,7 @@ export default {
69,
{
"input": [
- 387,
+ 388,
"DeleteViewFieldGroupInput!"
]
}
@@ -7327,7 +7353,7 @@ export default {
69,
{
"input": [
- 388,
+ 389,
"DestroyViewFieldGroupInput!"
]
}
@@ -7336,7 +7362,7 @@ export default {
70,
{
"input": [
- 389,
+ 390,
"UpsertFieldsWidgetInput!"
]
}
@@ -7345,7 +7371,7 @@ export default {
2,
{
"input": [
- 392,
+ 393,
"CreateApiKeyInput!"
]
}
@@ -7354,7 +7380,7 @@ export default {
2,
{
"input": [
- 393,
+ 394,
"UpdateApiKeyInput!"
]
}
@@ -7363,7 +7389,7 @@ export default {
2,
{
"input": [
- 394,
+ 395,
"RevokeApiKeyInput!"
]
}
@@ -7512,7 +7538,7 @@ export default {
130,
{
"input": [
- 395,
+ 396,
"CreateApprovedAccessDomainInput!"
]
}
@@ -7521,7 +7547,7 @@ export default {
6,
{
"input": [
- 396,
+ 397,
"DeleteApprovedAccessDomainInput!"
]
}
@@ -7530,7 +7556,7 @@ export default {
130,
{
"input": [
- 397,
+ 398,
"ValidateApprovedAccessDomainInput!"
]
}
@@ -7539,7 +7565,7 @@ export default {
123,
{
"input": [
- 398,
+ 399,
"CreatePageLayoutTabInput!"
]
}
@@ -7552,7 +7578,7 @@ export default {
"String!"
],
"input": [
- 399,
+ 400,
"UpdatePageLayoutTabInput!"
]
}
@@ -7570,7 +7596,7 @@ export default {
124,
{
"input": [
- 400,
+ 401,
"CreatePageLayoutInput!"
]
}
@@ -7583,7 +7609,7 @@ export default {
"String!"
],
"input": [
- 401,
+ 402,
"UpdatePageLayoutInput!"
]
}
@@ -7605,7 +7631,7 @@ export default {
"String!"
],
"input": [
- 402,
+ 403,
"UpdatePageLayoutWithTabsInput!"
]
}
@@ -7641,7 +7667,7 @@ export default {
85,
{
"input": [
- 406,
+ 407,
"CreatePageLayoutWidgetInput!"
]
}
@@ -7654,7 +7680,7 @@ export default {
"String!"
],
"input": [
- 407,
+ 408,
"UpdatePageLayoutWidgetInput!"
]
}
@@ -7672,7 +7698,7 @@ export default {
25,
{
"input": [
- 408,
+ 409,
"CreateAgentInput!"
]
}
@@ -7681,7 +7707,7 @@ export default {
25,
{
"input": [
- 409,
+ 410,
"UpdateAgentInput!"
]
}
@@ -7690,7 +7716,7 @@ export default {
25,
{
"input": [
- 340,
+ 341,
"AgentIdInput!"
]
}
@@ -7699,7 +7725,7 @@ export default {
56,
{
"input": [
- 410,
+ 411,
"CreateOneObjectInput!"
]
}
@@ -7708,7 +7734,7 @@ export default {
56,
{
"input": [
- 412,
+ 413,
"DeleteOneObjectInput!"
]
}
@@ -7717,7 +7743,7 @@ export default {
56,
{
"input": [
- 413,
+ 414,
"UpdateOneObjectInput!"
]
}
@@ -7726,7 +7752,7 @@ export default {
47,
{
"input": [
- 415,
+ 416,
"CreateOneIndexInput!"
]
}
@@ -7735,7 +7761,7 @@ export default {
47,
{
"input": [
- 418,
+ 419,
"DeleteOneIndexInput!"
]
}
@@ -7744,7 +7770,7 @@ export default {
41,
{
"input": [
- 341,
+ 342,
"LogicFunctionIdInput!"
]
}
@@ -7753,7 +7779,7 @@ export default {
41,
{
"input": [
- 419,
+ 420,
"CreateLogicFunctionFromSourceInput!"
]
}
@@ -7762,7 +7788,7 @@ export default {
169,
{
"input": [
- 420,
+ 421,
"ExecuteOneLogicFunctionInput!"
]
}
@@ -7771,7 +7797,7 @@ export default {
6,
{
"input": [
- 421,
+ 422,
"UpdateLogicFunctionFromSourceInput!"
]
}
@@ -7780,7 +7806,7 @@ export default {
35,
{
"input": [
- 423,
+ 424,
"CreateCommandMenuItemInput!"
]
}
@@ -7789,7 +7815,7 @@ export default {
35,
{
"input": [
- 424,
+ 425,
"UpdateCommandMenuItemInput!"
]
}
@@ -7816,7 +7842,7 @@ export default {
34,
{
"input": [
- 425,
+ 426,
"CreateFrontComponentInput!"
]
}
@@ -7825,7 +7851,7 @@ export default {
34,
{
"input": [
- 426,
+ 427,
"UpdateFrontComponentInput!"
]
}
@@ -7843,7 +7869,7 @@ export default {
76,
{
"data": [
- 428,
+ 429,
"ActivateWorkspaceInput!"
]
}
@@ -7852,7 +7878,7 @@ export default {
76,
{
"data": [
- 429,
+ 430,
"UpdateWorkspaceInput!"
]
}
@@ -7861,13 +7887,13 @@ export default {
76
],
"checkCustomDomainValidRecords": [
- 233
+ 234
],
"createOneField": [
44,
{
"input": [
- 430,
+ 431,
"CreateOneFieldMetadataInput!"
]
}
@@ -7876,7 +7902,7 @@ export default {
44,
{
"input": [
- 432,
+ 433,
"UpdateOneFieldMetadataInput!"
]
}
@@ -7885,7 +7911,7 @@ export default {
44,
{
"input": [
- 434,
+ 435,
"DeleteOneFieldInput!"
]
}
@@ -7894,7 +7920,7 @@ export default {
66,
{
"input": [
- 435,
+ 436,
"CreateViewGroupInput!"
]
}
@@ -7903,7 +7929,7 @@ export default {
66,
{
"inputs": [
- 435,
+ 436,
"[CreateViewGroupInput!]!"
]
}
@@ -7912,7 +7938,7 @@ export default {
66,
{
"input": [
- 436,
+ 437,
"UpdateViewGroupInput!"
]
}
@@ -7921,7 +7947,7 @@ export default {
66,
{
"inputs": [
- 436,
+ 437,
"[UpdateViewGroupInput!]!"
]
}
@@ -7930,7 +7956,7 @@ export default {
66,
{
"input": [
- 438,
+ 439,
"DeleteViewGroupInput!"
]
}
@@ -7939,7 +7965,7 @@ export default {
66,
{
"input": [
- 439,
+ 440,
"DestroyViewGroupInput!"
]
}
@@ -7948,7 +7974,7 @@ export default {
6,
{
"workspaceMigration": [
- 440,
+ 441,
"WorkspaceMigrationInput!"
]
}
@@ -7979,7 +8005,7 @@ export default {
29,
{
"createRoleInput": [
- 443,
+ 444,
"CreateRoleInput!"
]
}
@@ -7988,7 +8014,7 @@ export default {
29,
{
"updateRoleInput": [
- 444,
+ 445,
"UpdateRoleInput!"
]
}
@@ -8006,7 +8032,7 @@ export default {
16,
{
"upsertObjectPermissionsInput": [
- 446,
+ 447,
"UpsertObjectPermissionsInput!"
]
}
@@ -8015,7 +8041,7 @@ export default {
27,
{
"upsertPermissionFlagsInput": [
- 448,
+ 449,
"UpsertPermissionFlagsInput!"
]
}
@@ -8024,16 +8050,16 @@ export default {
26,
{
"upsertFieldPermissionsInput": [
- 449,
+ 450,
"UpsertFieldPermissionsInput!"
]
}
],
"upsertRowLevelPermissionPredicates": [
- 234,
+ 235,
{
"input": [
- 451,
+ 452,
"UpsertRowLevelPermissionPredicatesInput!"
]
}
@@ -8064,7 +8090,7 @@ export default {
200,
{
"input": [
- 454,
+ 455,
"CreateApplicationRegistrationInput!"
]
}
@@ -8073,7 +8099,7 @@ export default {
7,
{
"input": [
- 455,
+ 456,
"UpdateApplicationRegistrationInput!"
]
}
@@ -8100,7 +8126,7 @@ export default {
5,
{
"input": [
- 457,
+ 458,
"CreateApplicationRegistrationVariableInput!"
]
}
@@ -8109,7 +8135,7 @@ export default {
5,
{
"input": [
- 458,
+ 459,
"UpdateApplicationRegistrationVariableInput!"
]
}
@@ -8127,7 +8153,7 @@ export default {
7,
{
"file": [
- 359,
+ 360,
"Upload!"
],
"universalIdentifier": [
@@ -8149,37 +8175,37 @@ export default {
}
],
"sendEmailViaEmailingDomain": [
- 284,
+ 285,
{
"input": [
- 460,
+ 461,
"SendEmailViaDomainInput!"
]
}
],
"sendMessageCampaign": [
- 286,
+ 287,
{
"input": [
- 461,
+ 462,
"SendMessageCampaignInput!"
]
}
],
"createUnsubscribeTopic": [
- 287,
+ 288,
{
"input": [
- 462,
+ 463,
"CreateUnsubscribeTopicInput!"
]
}
],
"updateUnsubscribeTopic": [
- 287,
+ 288,
{
"input": [
- 463,
+ 464,
"UpdateUnsubscribeTopicInput!"
]
}
@@ -8194,25 +8220,25 @@ export default {
}
],
"updateMessageChannel": [
- 274,
+ 275,
{
"input": [
- 464,
+ 465,
"UpdateMessageChannelInput!"
]
}
],
"createEmailGroupChannel": [
- 282,
+ 283,
{
"input": [
- 466,
+ 467,
"CreateEmailGroupChannelInput!"
]
}
],
"deleteEmailGroupChannel": [
- 274,
+ 275,
{
"id": [
3,
@@ -8221,10 +8247,10 @@ export default {
}
],
"createEmailingDomain": [
- 272,
+ 273,
{
"input": [
- 467,
+ 468,
"CreateEmailingDomainInput!"
]
}
@@ -8239,7 +8265,7 @@ export default {
}
],
"verifyEmailingDomain": [
- 272,
+ 273,
{
"id": [
1,
@@ -8248,7 +8274,7 @@ export default {
}
],
"deleteConnectedAccount": [
- 239,
+ 240,
{
"id": [
3,
@@ -8257,34 +8283,34 @@ export default {
}
],
"runAgent": [
- 299,
+ 300,
{
"input": [
- 468,
+ 469,
"RunAgentInput!"
]
}
],
"createWebhook": [
- 296,
+ 297,
{
"input": [
- 469,
+ 470,
"CreateWebhookInput!"
]
}
],
"updateWebhook": [
- 296,
+ 297,
{
"input": [
- 470,
+ 471,
"UpdateWebhookInput!"
]
}
],
"deleteWebhook": [
- 296,
+ 297,
{
"id": [
3,
@@ -8293,37 +8319,37 @@ export default {
}
],
"updateMessageFolder": [
- 331,
+ 332,
{
"input": [
- 472,
+ 473,
"UpdateMessageFolderInput!"
]
}
],
"updateMessageFolders": [
- 331,
+ 332,
{
"input": [
- 474,
+ 475,
"UpdateMessageFoldersInput!"
]
}
],
"updateCalendarChannel": [
- 326,
+ 327,
{
"input": [
- 475,
+ 476,
"UpdateCalendarChannelInput!"
]
}
],
"createChatThread": [
- 317
+ 318
],
"sendChatMessage": [
- 321,
+ 322,
{
"threadId": [
3,
@@ -8344,7 +8370,7 @@ export default {
1
],
"fileAttachments": [
- 477,
+ 478,
"[FileAttachmentInput!]"
]
}
@@ -8359,7 +8385,7 @@ export default {
}
],
"renameChatThread": [
- 317,
+ 318,
{
"id": [
3,
@@ -8372,7 +8398,7 @@ export default {
}
],
"archiveChatThread": [
- 317,
+ 318,
{
"id": [
3,
@@ -8381,7 +8407,7 @@ export default {
}
],
"unarchiveChatThread": [
- 317,
+ 318,
{
"id": [
3,
@@ -8408,25 +8434,25 @@ export default {
}
],
"createSkill": [
- 315,
+ 316,
{
"input": [
- 478,
+ 479,
"CreateSkillInput!"
]
}
],
"updateSkill": [
- 315,
+ 316,
{
"input": [
- 479,
+ 480,
"UpdateSkillInput!"
]
}
],
"deleteSkill": [
- 315,
+ 316,
{
"id": [
3,
@@ -8435,7 +8461,7 @@ export default {
}
],
"activateSkill": [
- 315,
+ 316,
{
"id": [
3,
@@ -8444,7 +8470,7 @@ export default {
}
],
"deactivateSkill": [
- 315,
+ 316,
{
"id": [
3,
@@ -8453,7 +8479,7 @@ export default {
}
],
"evaluateAgentTurn": [
- 323,
+ 324,
{
"turnId": [
3,
@@ -8462,7 +8488,7 @@ export default {
}
],
"runEvaluationInput": [
- 324,
+ 325,
{
"agentId": [
3,
@@ -8475,16 +8501,16 @@ export default {
}
],
"getAuthorizationUrlForSSO": [
- 247,
+ 248,
{
"input": [
- 480,
+ 481,
"GetAuthorizationUrlForSSOInput!"
]
}
],
"getLoginTokenFromCredentials": [
- 258,
+ 259,
{
"email": [
1,
@@ -8510,7 +8536,7 @@ export default {
}
],
"signIn": [
- 245,
+ 246,
{
"email": [
1,
@@ -8532,7 +8558,7 @@ export default {
}
],
"verifyEmailAndGetLoginToken": [
- 253,
+ 254,
{
"emailVerificationToken": [
1,
@@ -8552,7 +8578,7 @@ export default {
}
],
"verifyEmailAndGetWorkspaceAgnosticToken": [
- 245,
+ 246,
{
"emailVerificationToken": [
1,
@@ -8568,7 +8594,7 @@ export default {
}
],
"getAuthTokensFromOTP": [
- 257,
+ 258,
{
"otp": [
1,
@@ -8588,7 +8614,7 @@ export default {
}
],
"signUp": [
- 245,
+ 246,
{
"email": [
1,
@@ -8610,7 +8636,7 @@ export default {
}
],
"signUpInWorkspace": [
- 250,
+ 251,
{
"email": [
1,
@@ -8641,10 +8667,10 @@ export default {
}
],
"signUpInNewWorkspace": [
- 250,
+ 251,
{
"input": [
- 481
+ 482
]
}
],
@@ -8656,16 +8682,16 @@ export default {
"String!"
],
"file": [
- 359,
+ 360,
"Upload!"
]
}
],
"generateTransientToken": [
- 251
+ 252
],
"getAuthTokensFromLoginToken": [
- 257,
+ 258,
{
"loginToken": [
1,
@@ -8678,7 +8704,7 @@ export default {
}
],
"authorizeApp": [
- 243,
+ 244,
{
"clientId": [
1,
@@ -8700,7 +8726,7 @@ export default {
}
],
"renewToken": [
- 257,
+ 258,
{
"appToken": [
1,
@@ -8709,7 +8735,7 @@ export default {
}
],
"generateApiKeyToken": [
- 256,
+ 257,
{
"apiKeyId": [
3,
@@ -8725,7 +8751,7 @@ export default {
32
],
"emailPasswordResetLink": [
- 246,
+ 247,
{
"email": [
1,
@@ -8737,7 +8763,7 @@ export default {
}
],
"updatePasswordViaResetToken": [
- 248,
+ 249,
{
"passwordResetToken": [
1,
@@ -8750,7 +8776,7 @@ export default {
}
],
"initiateOTPProvisioning": [
- 241,
+ 242,
{
"loginToken": [
1,
@@ -8763,10 +8789,10 @@ export default {
}
],
"initiateOTPProvisioningForAuthenticatedUser": [
- 241
+ 242
],
"deleteTwoFactorAuthenticationMethod": [
- 240,
+ 241,
{
"twoFactorAuthenticationMethodId": [
3,
@@ -8775,7 +8801,7 @@ export default {
}
],
"verifyTwoFactorAuthenticationMethodForAuthenticatedUser": [
- 242,
+ 243,
{
"otp": [
1,
@@ -8799,7 +8825,7 @@ export default {
6,
{
"input": [
- 482,
+ 483,
"UpdateWorkspaceMemberSettingsInput!"
]
}
@@ -8817,7 +8843,7 @@ export default {
}
],
"resendEmailVerificationToken": [
- 220,
+ 221,
{
"email": [
1,
@@ -8830,43 +8856,43 @@ export default {
}
],
"createOIDCIdentityProvider": [
- 225,
+ 226,
{
"input": [
- 483,
+ 484,
"SetupOIDCSsoInput!"
]
}
],
"createSAMLIdentityProvider": [
- 225,
+ 226,
{
"input": [
- 484,
+ 485,
"SetupSAMLSsoInput!"
]
}
],
"deleteSSOIdentityProvider": [
- 221,
+ 222,
{
"input": [
- 485,
+ 486,
"DeleteSsoInput!"
]
}
],
"editSSOIdentityProvider": [
- 222,
+ 223,
{
"input": [
- 486,
+ 487,
"EditSsoInput!"
]
}
],
"createObjectEvent": [
- 311,
+ 312,
{
"event": [
1,
@@ -8886,10 +8912,10 @@ export default {
}
],
"trackAnalytics": [
- 311,
+ 312,
{
"type": [
- 487,
+ 488,
"AnalyticsType!"
],
"name": [
@@ -8904,7 +8930,7 @@ export default {
}
],
"duplicateDashboard": [
- 309,
+ 310,
{
"id": [
3,
@@ -8913,7 +8939,7 @@ export default {
}
],
"impersonate": [
- 261,
+ 262,
{
"userId": [
3,
@@ -8926,25 +8952,25 @@ export default {
}
],
"createCalendarEvent": [
- 301,
+ 302,
{
"input": [
- 488,
+ 489,
"CreateCalendarEventInput!"
]
}
],
"sendEmail": [
- 310,
+ 311,
{
"input": [
- 489,
+ 490,
"SendEmailInput!"
]
}
],
"startChannelSync": [
- 300,
+ 301,
{
"connectedAccountId": [
3,
@@ -8953,14 +8979,14 @@ export default {
}
],
"saveImapSmtpCaldavAccount": [
- 295,
+ 296,
{
"handle": [
1,
"String!"
],
"connectionParameters": [
- 491,
+ 492,
"EmailAccountConnectionParameters!"
],
"id": [
@@ -8972,13 +8998,13 @@ export default {
171,
{
"input": [
- 493,
+ 494,
"UpdateLabPublicFeatureFlagInput!"
]
}
],
"createPublicDomain": [
- 270,
+ 271,
{
"domain": [
1,
@@ -9000,7 +9026,7 @@ export default {
}
],
"checkPublicDomainValidRecords": [
- 233,
+ 234,
{
"domain": [
1,
@@ -9012,7 +9038,7 @@ export default {
78,
{
"input": [
- 494,
+ 495,
"CreateOneAppTokenInput!"
]
}
@@ -9045,7 +9071,7 @@ export default {
6
],
"createDevelopmentApplication": [
- 265,
+ 266,
{
"universalIdentifier": [
1,
@@ -9067,7 +9093,7 @@ export default {
}
],
"syncApplication": [
- 266,
+ 267,
{
"manifest": [
15,
@@ -9079,10 +9105,10 @@ export default {
}
],
"uploadApplicationFile": [
- 267,
+ 268,
{
"file": [
- 359,
+ 360,
"Upload!"
],
"applicationUniversalIdentifier": [
@@ -9090,7 +9116,7 @@ export default {
"String!"
],
"fileFolder": [
- 496,
+ 497,
"FileFolder!"
],
"filePath": [
@@ -9199,7 +9225,7 @@ export default {
3
],
"update": [
- 358
+ 359
],
"__typename": [
1
@@ -9309,7 +9335,7 @@ export default {
3
],
"update": [
- 364
+ 365
],
"__typename": [
1
@@ -9474,17 +9500,17 @@ export default {
3
],
"viewFields": [
- 370
- ],
- "viewFilters": [
371
],
- "viewFilterGroups": [
+ "viewFilters": [
372
],
- "viewSorts": [
+ "viewFilterGroups": [
373
],
+ "viewSorts": [
+ 374
+ ],
"__typename": [
1
]
@@ -9594,7 +9620,7 @@ export default {
3
],
"update": [
- 376
+ 377
],
"__typename": [
1
@@ -9632,7 +9658,7 @@ export default {
3
],
"update": [
- 380
+ 381
],
"__typename": [
1
@@ -9708,7 +9734,7 @@ export default {
3
],
"update": [
- 385
+ 386
],
"__typename": [
1
@@ -9772,10 +9798,10 @@ export default {
3
],
"groups": [
- 390
+ 391
],
"fields": [
- 391
+ 392
],
"__typename": [
1
@@ -9795,7 +9821,7 @@ export default {
6
],
"fields": [
- 391
+ 392
],
"__typename": [
1
@@ -9963,7 +9989,7 @@ export default {
3
],
"tabs": [
- 403
+ 404
],
"__typename": [
1
@@ -9986,7 +10012,7 @@ export default {
89
],
"widgets": [
- 404
+ 405
],
"__typename": [
1
@@ -10009,7 +10035,7 @@ export default {
3
],
"gridPosition": [
- 405
+ 406
],
"position": [
15
@@ -10058,7 +10084,7 @@ export default {
3
],
"gridPosition": [
- 405
+ 406
],
"position": [
15
@@ -10084,7 +10110,7 @@ export default {
3
],
"gridPosition": [
- 405
+ 406
],
"position": [
15
@@ -10177,7 +10203,7 @@ export default {
},
"CreateOneObjectInput": {
"object": [
- 411
+ 412
],
"__typename": [
1
@@ -10237,7 +10263,7 @@ export default {
},
"UpdateOneObjectInput": {
"update": [
- 414
+ 415
],
"id": [
3
@@ -10292,7 +10318,7 @@ export default {
},
"CreateOneIndexInput": {
"index": [
- 416
+ 417
],
"__typename": [
1
@@ -10303,7 +10329,7 @@ export default {
3
],
"fields": [
- 417
+ 418
],
"indexType": [
48
@@ -10388,7 +10414,7 @@ export default {
3
],
"update": [
- 422
+ 423
],
"__typename": [
1
@@ -10548,7 +10574,7 @@ export default {
3
],
"update": [
- 427
+ 428
],
"__typename": [
1
@@ -10652,7 +10678,7 @@ export default {
},
"CreateOneFieldMetadataInput": {
"field": [
- 431
+ 432
],
"__typename": [
1
@@ -10725,7 +10751,7 @@ export default {
3
],
"update": [
- 433
+ 434
],
"__typename": [
1
@@ -10820,7 +10846,7 @@ export default {
3
],
"update": [
- 437
+ 438
],
"__typename": [
1
@@ -10861,7 +10887,7 @@ export default {
},
"WorkspaceMigrationInput": {
"actions": [
- 441
+ 442
],
"__typename": [
1
@@ -10869,10 +10895,10 @@ export default {
},
"WorkspaceMigrationDeleteActionInput": {
"type": [
- 442
+ 443
],
"metadataName": [
- 334
+ 335
],
"universalIdentifier": [
1
@@ -10928,7 +10954,7 @@ export default {
},
"UpdateRoleInput": {
"update": [
- 445
+ 446
],
"id": [
3
@@ -10983,7 +11009,7 @@ export default {
3
],
"objectPermissions": [
- 447
+ 448
],
"__typename": [
1
@@ -11025,7 +11051,7 @@ export default {
3
],
"fieldPermissions": [
- 450
+ 451
],
"__typename": [
1
@@ -11056,10 +11082,10 @@ export default {
3
],
"predicates": [
- 452
+ 453
],
"predicateGroups": [
- 453
+ 454
],
"__typename": [
1
@@ -11139,7 +11165,7 @@ export default {
1
],
"update": [
- 456
+ 457
],
"__typename": [
1
@@ -11190,7 +11216,7 @@ export default {
1
],
"update": [
- 459
+ 460
],
"__typename": [
1
@@ -11270,7 +11296,7 @@ export default {
1
],
"visibility": [
- 288
+ 289
],
"__typename": [
1
@@ -11287,7 +11313,7 @@ export default {
1
],
"visibility": [
- 288
+ 289
],
"__typename": [
1
@@ -11298,7 +11324,7 @@ export default {
3
],
"update": [
- 465
+ 466
],
"__typename": [
1
@@ -11306,16 +11332,16 @@ export default {
},
"UpdateMessageChannelInputUpdates": {
"visibility": [
- 275
+ 276
],
"isContactAutoCreationEnabled": [
6
],
"contactAutoCreationPolicy": [
- 277
+ 278
],
"messageFolderImportPolicy": [
- 278
+ 279
],
"isSyncEnabled": [
6
@@ -11382,7 +11408,7 @@ export default {
3
],
"update": [
- 471
+ 472
],
"__typename": [
1
@@ -11410,7 +11436,7 @@ export default {
3
],
"update": [
- 473
+ 474
],
"__typename": [
1
@@ -11429,7 +11455,7 @@ export default {
3
],
"update": [
- 473
+ 474
],
"__typename": [
1
@@ -11440,7 +11466,7 @@ export default {
3
],
"update": [
- 476
+ 477
],
"__typename": [
1
@@ -11448,13 +11474,13 @@ export default {
},
"UpdateCalendarChannelInputUpdates": {
"visibility": [
- 329
+ 330
],
"isContactAutoCreationEnabled": [
6
],
"contactAutoCreationPolicy": [
- 330
+ 331
],
"isSyncEnabled": [
6
@@ -11677,7 +11703,7 @@ export default {
1
],
"files": [
- 490
+ 491
],
"__typename": [
1
@@ -11696,13 +11722,13 @@ export default {
},
"EmailAccountConnectionParameters": {
"IMAP": [
- 492
+ 493
],
"SMTP": [
- 492
+ 493
],
"CALDAV": [
- 492
+ 493
],
"__typename": [
1
@@ -11722,7 +11748,7 @@ export default {
1
],
"connectionSecurity": [
- 237
+ 238
],
"__typename": [
1
@@ -11741,7 +11767,7 @@ export default {
},
"CreateOneAppTokenInput": {
"appToken": [
- 495
+ 496
],
"__typename": [
1
@@ -11767,16 +11793,16 @@ export default {
}
],
"logicFunctionLogs": [
- 235,
+ 236,
{
"input": [
- 498,
+ 499,
"LogicFunctionLogsInput!"
]
}
],
"onAgentChatEvent": [
- 322,
+ 323,
{
"threadId": [
3,
@@ -11785,10 +11811,10 @@ export default {
}
],
"eventLogsLive": [
- 312,
+ 313,
{
"table": [
- 345,
+ 346,
"EventLogTable!"
]
}
diff --git a/packages/twenty-front/scripts/mock-data/generate-object-metadata.ts b/packages/twenty-front/scripts/mock-data/generate-object-metadata.ts
index 84a3c3cf36..bfcf35f489 100644
--- a/packages/twenty-front/scripts/mock-data/generate-object-metadata.ts
+++ b/packages/twenty-front/scripts/mock-data/generate-object-metadata.ts
@@ -33,6 +33,15 @@ const METADATA_QUERY = `
isLabelSyncedWithName
isSearchable
duplicateCriteria
+ searchFieldMetadataList {
+ __typename
+ id
+ fieldMetadataId
+ tsVectorFieldMetadataId
+ position
+ createdAt
+ updatedAt
+ }
indexMetadataList {
__typename
id
diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts
index 7b481670a2..84b5ea4487 100644
--- a/packages/twenty-front/src/generated-metadata/graphql.ts
+++ b/packages/twenty-front/src/generated-metadata/graphql.ts
@@ -3870,6 +3870,7 @@ export type Object = {
labelSingular: Scalars['String']['output'];
namePlural: Scalars['String']['output'];
nameSingular: Scalars['String']['output'];
+ searchFieldMetadataList: Array;
shortcut?: Maybe;
standardOverrides?: Maybe;
universalIdentifier: Scalars['String']['output'];
@@ -4976,6 +4977,16 @@ export enum SsoIdentityProviderStatus {
Inactive = 'Inactive'
}
+export type SearchField = {
+ __typename?: 'SearchField';
+ createdAt: Scalars['DateTime']['output'];
+ fieldMetadataId: Scalars['UUID']['output'];
+ id: Scalars['UUID']['output'];
+ position: Scalars['Float']['output'];
+ tsVectorFieldMetadataId: Scalars['UUID']['output'];
+ updatedAt: Scalars['DateTime']['output'];
+};
+
export type SendChatMessageResult = {
__typename?: 'SendChatMessageResult';
messageId: Scalars['String']['output'];
@@ -6611,7 +6622,7 @@ export type TrackAnalyticsMutationVariables = Exact<{
export type TrackAnalyticsMutation = { __typename?: 'Mutation', trackAnalytics: { __typename?: 'Analytics', success: boolean } };
-export type ApplicationFieldsFragment = { __typename?: 'Application', id: string, name: string, description?: string | null, logo?: string | null, version?: string | null, universalIdentifier: string, applicationRegistrationId?: string | null, canBeUninstalled: boolean, defaultRoleId?: string | null, settingsCustomTabFrontComponentId?: string | null, availablePackages: any, applicationRegistration?: { __typename?: 'ApplicationRegistrationSummary', id: string, latestAvailableVersion?: string | null, sourceType: ApplicationRegistrationSourceType, logoUrl?: string | null } | null, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, frontComponents: Array<{ __typename?: 'FrontComponent', id: string, name: string, description?: string | null, applicationId: string, componentName: string, builtComponentChecksum: string, universalIdentifier?: string | null, isHeadless: boolean, usesSdkClient: boolean, createdAt: string, updatedAt: string }>, commandMenuItems: Array<{ __typename?: 'CommandMenuItem', id: string, label: string, shortLabel?: string | null, icon?: string | null, isPinned: boolean, availabilityType: CommandMenuItemAvailabilityType, conditionalAvailabilityExpression?: string | null, frontComponentId?: string | null, universalIdentifier?: string | null, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIEditable: boolean, isUICreatable: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, subFieldName?: string | null, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isActive?: boolean | null, isSystem?: boolean | null, isUIEditable?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, logicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, executionMode: LogicFunctionExecutionMode, sourceHandlerPath: string, handlerName: string, cronTriggerSettings?: any | null, databaseEventTriggerSettings?: any | null, httpRouteTriggerSettings?: any | null, toolTriggerSettings?: any | null, workflowActionTriggerSettings?: any | null, applicationId?: string | null, universalIdentifier?: string | null, createdAt: string, updatedAt: string }> };
+export type ApplicationFieldsFragment = { __typename?: 'Application', id: string, name: string, description?: string | null, logo?: string | null, version?: string | null, universalIdentifier: string, applicationRegistrationId?: string | null, canBeUninstalled: boolean, defaultRoleId?: string | null, settingsCustomTabFrontComponentId?: string | null, availablePackages: any, applicationRegistration?: { __typename?: 'ApplicationRegistrationSummary', id: string, latestAvailableVersion?: string | null, sourceType: ApplicationRegistrationSourceType, logoUrl?: string | null } | null, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, frontComponents: Array<{ __typename?: 'FrontComponent', id: string, name: string, description?: string | null, applicationId: string, componentName: string, builtComponentChecksum: string, universalIdentifier?: string | null, isHeadless: boolean, usesSdkClient: boolean, createdAt: string, updatedAt: string }>, commandMenuItems: Array<{ __typename?: 'CommandMenuItem', id: string, label: string, shortLabel?: string | null, icon?: string | null, isPinned: boolean, availabilityType: CommandMenuItemAvailabilityType, conditionalAvailabilityExpression?: string | null, frontComponentId?: string | null, universalIdentifier?: string | null, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIEditable: boolean, isUICreatable: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, searchFieldMetadataList: Array<{ __typename?: 'SearchField', id: string, fieldMetadataId: string, tsVectorFieldMetadataId: string, position: number, createdAt: string, updatedAt: string }>, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, subFieldName?: string | null, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isActive?: boolean | null, isSystem?: boolean | null, isUIEditable?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, logicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, executionMode: LogicFunctionExecutionMode, sourceHandlerPath: string, handlerName: string, cronTriggerSettings?: any | null, databaseEventTriggerSettings?: any | null, httpRouteTriggerSettings?: any | null, toolTriggerSettings?: any | null, workflowActionTriggerSettings?: any | null, applicationId?: string | null, universalIdentifier?: string | null, createdAt: string, updatedAt: string }> };
export type FindManyApplicationsQueryVariables = Exact<{ [key: string]: never; }>;
@@ -6623,14 +6634,14 @@ export type FindOneApplicationQueryVariables = Exact<{
}>;
-export type FindOneApplicationQuery = { __typename?: 'Query', findOneApplication: { __typename?: 'Application', id: string, name: string, description?: string | null, logo?: string | null, version?: string | null, universalIdentifier: string, applicationRegistrationId?: string | null, canBeUninstalled: boolean, defaultRoleId?: string | null, settingsCustomTabFrontComponentId?: string | null, availablePackages: any, applicationRegistration?: { __typename?: 'ApplicationRegistrationSummary', id: string, latestAvailableVersion?: string | null, sourceType: ApplicationRegistrationSourceType, logoUrl?: string | null } | null, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, frontComponents: Array<{ __typename?: 'FrontComponent', id: string, name: string, description?: string | null, applicationId: string, componentName: string, builtComponentChecksum: string, universalIdentifier?: string | null, isHeadless: boolean, usesSdkClient: boolean, createdAt: string, updatedAt: string }>, commandMenuItems: Array<{ __typename?: 'CommandMenuItem', id: string, label: string, shortLabel?: string | null, icon?: string | null, isPinned: boolean, availabilityType: CommandMenuItemAvailabilityType, conditionalAvailabilityExpression?: string | null, frontComponentId?: string | null, universalIdentifier?: string | null, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIEditable: boolean, isUICreatable: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, subFieldName?: string | null, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isActive?: boolean | null, isSystem?: boolean | null, isUIEditable?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, logicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, executionMode: LogicFunctionExecutionMode, sourceHandlerPath: string, handlerName: string, cronTriggerSettings?: any | null, databaseEventTriggerSettings?: any | null, httpRouteTriggerSettings?: any | null, toolTriggerSettings?: any | null, workflowActionTriggerSettings?: any | null, applicationId?: string | null, universalIdentifier?: string | null, createdAt: string, updatedAt: string }> } };
+export type FindOneApplicationQuery = { __typename?: 'Query', findOneApplication: { __typename?: 'Application', id: string, name: string, description?: string | null, logo?: string | null, version?: string | null, universalIdentifier: string, applicationRegistrationId?: string | null, canBeUninstalled: boolean, defaultRoleId?: string | null, settingsCustomTabFrontComponentId?: string | null, availablePackages: any, applicationRegistration?: { __typename?: 'ApplicationRegistrationSummary', id: string, latestAvailableVersion?: string | null, sourceType: ApplicationRegistrationSourceType, logoUrl?: string | null } | null, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, frontComponents: Array<{ __typename?: 'FrontComponent', id: string, name: string, description?: string | null, applicationId: string, componentName: string, builtComponentChecksum: string, universalIdentifier?: string | null, isHeadless: boolean, usesSdkClient: boolean, createdAt: string, updatedAt: string }>, commandMenuItems: Array<{ __typename?: 'CommandMenuItem', id: string, label: string, shortLabel?: string | null, icon?: string | null, isPinned: boolean, availabilityType: CommandMenuItemAvailabilityType, conditionalAvailabilityExpression?: string | null, frontComponentId?: string | null, universalIdentifier?: string | null, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIEditable: boolean, isUICreatable: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, searchFieldMetadataList: Array<{ __typename?: 'SearchField', id: string, fieldMetadataId: string, tsVectorFieldMetadataId: string, position: number, createdAt: string, updatedAt: string }>, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, subFieldName?: string | null, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isActive?: boolean | null, isSystem?: boolean | null, isUIEditable?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, logicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, executionMode: LogicFunctionExecutionMode, sourceHandlerPath: string, handlerName: string, cronTriggerSettings?: any | null, databaseEventTriggerSettings?: any | null, httpRouteTriggerSettings?: any | null, toolTriggerSettings?: any | null, workflowActionTriggerSettings?: any | null, applicationId?: string | null, universalIdentifier?: string | null, createdAt: string, updatedAt: string }> } };
export type FindOneApplicationByUniversalIdentifierQueryVariables = Exact<{
universalIdentifier: Scalars['UUID']['input'];
}>;
-export type FindOneApplicationByUniversalIdentifierQuery = { __typename?: 'Query', findOneApplication: { __typename?: 'Application', id: string, name: string, description?: string | null, logo?: string | null, version?: string | null, universalIdentifier: string, applicationRegistrationId?: string | null, canBeUninstalled: boolean, defaultRoleId?: string | null, settingsCustomTabFrontComponentId?: string | null, availablePackages: any, applicationRegistration?: { __typename?: 'ApplicationRegistrationSummary', id: string, latestAvailableVersion?: string | null, sourceType: ApplicationRegistrationSourceType, logoUrl?: string | null } | null, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, frontComponents: Array<{ __typename?: 'FrontComponent', id: string, name: string, description?: string | null, applicationId: string, componentName: string, builtComponentChecksum: string, universalIdentifier?: string | null, isHeadless: boolean, usesSdkClient: boolean, createdAt: string, updatedAt: string }>, commandMenuItems: Array<{ __typename?: 'CommandMenuItem', id: string, label: string, shortLabel?: string | null, icon?: string | null, isPinned: boolean, availabilityType: CommandMenuItemAvailabilityType, conditionalAvailabilityExpression?: string | null, frontComponentId?: string | null, universalIdentifier?: string | null, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIEditable: boolean, isUICreatable: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, subFieldName?: string | null, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isActive?: boolean | null, isSystem?: boolean | null, isUIEditable?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, logicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, executionMode: LogicFunctionExecutionMode, sourceHandlerPath: string, handlerName: string, cronTriggerSettings?: any | null, databaseEventTriggerSettings?: any | null, httpRouteTriggerSettings?: any | null, toolTriggerSettings?: any | null, workflowActionTriggerSettings?: any | null, applicationId?: string | null, universalIdentifier?: string | null, createdAt: string, updatedAt: string }> } };
+export type FindOneApplicationByUniversalIdentifierQuery = { __typename?: 'Query', findOneApplication: { __typename?: 'Application', id: string, name: string, description?: string | null, logo?: string | null, version?: string | null, universalIdentifier: string, applicationRegistrationId?: string | null, canBeUninstalled: boolean, defaultRoleId?: string | null, settingsCustomTabFrontComponentId?: string | null, availablePackages: any, applicationRegistration?: { __typename?: 'ApplicationRegistrationSummary', id: string, latestAvailableVersion?: string | null, sourceType: ApplicationRegistrationSourceType, logoUrl?: string | null } | null, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, frontComponents: Array<{ __typename?: 'FrontComponent', id: string, name: string, description?: string | null, applicationId: string, componentName: string, builtComponentChecksum: string, universalIdentifier?: string | null, isHeadless: boolean, usesSdkClient: boolean, createdAt: string, updatedAt: string }>, commandMenuItems: Array<{ __typename?: 'CommandMenuItem', id: string, label: string, shortLabel?: string | null, icon?: string | null, isPinned: boolean, availabilityType: CommandMenuItemAvailabilityType, conditionalAvailabilityExpression?: string | null, frontComponentId?: string | null, universalIdentifier?: string | null, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIEditable: boolean, isUICreatable: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, searchFieldMetadataList: Array<{ __typename?: 'SearchField', id: string, fieldMetadataId: string, tsVectorFieldMetadataId: string, position: number, createdAt: string, updatedAt: string }>, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, subFieldName?: string | null, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isActive?: boolean | null, isSystem?: boolean | null, isUIEditable?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, logicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, executionMode: LogicFunctionExecutionMode, sourceHandlerPath: string, handlerName: string, cronTriggerSettings?: any | null, databaseEventTriggerSettings?: any | null, httpRouteTriggerSettings?: any | null, toolTriggerSettings?: any | null, workflowActionTriggerSettings?: any | null, applicationId?: string | null, universalIdentifier?: string | null, createdAt: string, updatedAt: string }> } };
export type FindOneApplicationSummaryQueryVariables = Exact<{
universalIdentifier: Scalars['UUID']['input'];
@@ -7184,7 +7195,7 @@ export type FindOneNavigationMenuItemQueryVariables = Exact<{
export type FindOneNavigationMenuItemQuery = { __typename?: 'Query', navigationMenuItem?: { __typename?: 'NavigationMenuItem', id: string, type: NavigationMenuItemType, userWorkspaceId?: string | null, targetRecordId?: string | null, targetObjectMetadataId?: string | null, viewId?: string | null, folderId?: string | null, name?: string | null, link?: string | null, icon?: string | null, color?: string | null, pageLayoutId?: string | null, position: number, applicationId?: string | null, createdAt: string, updatedAt: string, targetRecordIdentifier?: { __typename?: 'RecordIdentifier', id: string, labelIdentifier: string, imageIdentifier?: string | null } | null } | null };
-export type ObjectMetadataFieldsFragment = { __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIEditable: boolean, isUICreatable: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, subFieldName?: string | null, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isActive?: boolean | null, isSystem?: boolean | null, isUIEditable?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> };
+export type ObjectMetadataFieldsFragment = { __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIEditable: boolean, isUICreatable: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, searchFieldMetadataList: Array<{ __typename?: 'SearchField', id: string, fieldMetadataId: string, tsVectorFieldMetadataId: string, position: number, createdAt: string, updatedAt: string }>, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, subFieldName?: string | null, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isActive?: boolean | null, isSystem?: boolean | null, isUIEditable?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> };
export type CreateOneObjectMetadataItemMutationVariables = Exact<{
input: CreateOneObjectInput;
@@ -7247,7 +7258,7 @@ export type DeleteOneIndexMetadataItemMutation = { __typename?: 'Mutation', dele
export type ObjectMetadataItemsQueryVariables = Exact<{ [key: string]: never; }>;
-export type ObjectMetadataItemsQuery = { __typename?: 'Query', objects: { __typename?: 'ObjectConnection', edges: Array<{ __typename?: 'ObjectEdge', node: { __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIEditable: boolean, isUICreatable: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, subFieldName?: string | null, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isActive?: boolean | null, isSystem?: boolean | null, isUIEditable?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> } }>, pageInfo: { __typename?: 'PageInfo', hasNextPage?: boolean | null, hasPreviousPage?: boolean | null, startCursor?: any | null, endCursor?: any | null } } };
+export type ObjectMetadataItemsQuery = { __typename?: 'Query', objects: { __typename?: 'ObjectConnection', edges: Array<{ __typename?: 'ObjectEdge', node: { __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIEditable: boolean, isUICreatable: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, searchFieldMetadataList: Array<{ __typename?: 'SearchField', id: string, fieldMetadataId: string, tsVectorFieldMetadataId: string, position: number, createdAt: string, updatedAt: string }>, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, subFieldName?: string | null, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isActive?: boolean | null, isSystem?: boolean | null, isUIEditable?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> } }>, pageInfo: { __typename?: 'PageInfo', hasNextPage?: boolean | null, hasPreviousPage?: boolean | null, startCursor?: any | null, endCursor?: any | null } } };
export type ObjectRecordCountsQueryVariables = Exact<{ [key: string]: never; }>;
@@ -8662,9 +8673,9 @@ export type GetWorkspaceFromInviteHashQuery = { __typename?: 'Query', findWorksp
export const SkillFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SkillFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Skill"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"content"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode;
export const AgentFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode;
-export const ObjectMetadataFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isUICreatable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}}]} as unknown as DocumentNode;
+export const ObjectMetadataFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isUICreatable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"searchFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"tsVectorFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}}]} as unknown as DocumentNode;
export const LogicFunctionFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"executionMode"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"toolTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"workflowActionTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode;
-export const ApplicationFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Application"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}},{"kind":"Field","name":{"kind":"Name","value":"logoUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"canBeUninstalled"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRoleId"}},{"kind":"Field","name":{"kind":"Name","value":"settingsCustomTabFrontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"availablePackages"}},{"kind":"Field","name":{"kind":"Name","value":"applicationVariables"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"isSecret"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"frontComponents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"componentName"}},{"kind":"Field","name":{"kind":"Name","value":"builtComponentChecksum"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"isHeadless"}},{"kind":"Field","name":{"kind":"Name","value":"usesSdkClient"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"commandMenuItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"shortLabel"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isPinned"}},{"kind":"Field","name":{"kind":"Name","value":"availabilityType"}},{"kind":"Field","name":{"kind":"Name","value":"conditionalAvailabilityExpression"}},{"kind":"Field","name":{"kind":"Name","value":"frontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logicFunctions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LogicFunctionFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isUICreatable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"executionMode"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"toolTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"workflowActionTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode;
+export const ApplicationFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Application"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}},{"kind":"Field","name":{"kind":"Name","value":"logoUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"canBeUninstalled"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRoleId"}},{"kind":"Field","name":{"kind":"Name","value":"settingsCustomTabFrontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"availablePackages"}},{"kind":"Field","name":{"kind":"Name","value":"applicationVariables"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"isSecret"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"frontComponents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"componentName"}},{"kind":"Field","name":{"kind":"Name","value":"builtComponentChecksum"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"isHeadless"}},{"kind":"Field","name":{"kind":"Name","value":"usesSdkClient"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"commandMenuItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"shortLabel"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isPinned"}},{"kind":"Field","name":{"kind":"Name","value":"availabilityType"}},{"kind":"Field","name":{"kind":"Name","value":"conditionalAvailabilityExpression"}},{"kind":"Field","name":{"kind":"Name","value":"frontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logicFunctions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LogicFunctionFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isUICreatable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"searchFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"tsVectorFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"executionMode"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"toolTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"workflowActionTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode;
export const AuthTokenFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AuthTokenFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AuthToken"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"token"}},{"kind":"Field","name":{"kind":"Name","value":"expiresAt"}}]}}]} as unknown as DocumentNode;
export const AuthTokenPairFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AuthTokenPairFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AuthTokenPair"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"accessOrWorkspaceAgnosticToken"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AuthTokenFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"refreshToken"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AuthTokenFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AuthTokenFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AuthToken"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"token"}},{"kind":"Field","name":{"kind":"Name","value":"expiresAt"}}]}}]} as unknown as DocumentNode;
export const AvailableSsoIdentityProvidersFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableSSOIdentityProvidersFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FindAvailableSSOIDP"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"workspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}}]}}]}}]} as unknown as DocumentNode;
@@ -8744,8 +8755,8 @@ export const GetToolInputSchemaDocument = {"kind":"Document","definitions":[{"ki
export const OnAgentChatEventDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"OnAgentChatEvent"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"threadId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"onAgentChatEvent"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"threadId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"threadId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"threadId"}},{"kind":"Field","name":{"kind":"Name","value":"event"}}]}}]}}]} as unknown as DocumentNode;
export const TrackAnalyticsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"TrackAnalytics"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"type"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"AnalyticsType"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"event"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"name"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"properties"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"JSON"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"trackAnalytics"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"type"},"value":{"kind":"Variable","name":{"kind":"Name","value":"type"}}},{"kind":"Argument","name":{"kind":"Name","value":"event"},"value":{"kind":"Variable","name":{"kind":"Name","value":"event"}}},{"kind":"Argument","name":{"kind":"Name","value":"name"},"value":{"kind":"Variable","name":{"kind":"Name","value":"name"}}},{"kind":"Argument","name":{"kind":"Name","value":"properties"},"value":{"kind":"Variable","name":{"kind":"Name","value":"properties"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"success"}}]}}]}}]} as unknown as DocumentNode;
export const FindManyApplicationsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindManyApplications"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findManyApplications"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}}]}}]}}]}}]} as unknown as DocumentNode;
-export const FindOneApplicationDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindOneApplication"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findOneApplication"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ApplicationFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isUICreatable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"executionMode"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"toolTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"workflowActionTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Application"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}},{"kind":"Field","name":{"kind":"Name","value":"logoUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"canBeUninstalled"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRoleId"}},{"kind":"Field","name":{"kind":"Name","value":"settingsCustomTabFrontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"availablePackages"}},{"kind":"Field","name":{"kind":"Name","value":"applicationVariables"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"isSecret"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"frontComponents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"componentName"}},{"kind":"Field","name":{"kind":"Name","value":"builtComponentChecksum"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"isHeadless"}},{"kind":"Field","name":{"kind":"Name","value":"usesSdkClient"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"commandMenuItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"shortLabel"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isPinned"}},{"kind":"Field","name":{"kind":"Name","value":"availabilityType"}},{"kind":"Field","name":{"kind":"Name","value":"conditionalAvailabilityExpression"}},{"kind":"Field","name":{"kind":"Name","value":"frontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logicFunctions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LogicFunctionFields"}}]}}]}}]} as unknown as DocumentNode;
-export const FindOneApplicationByUniversalIdentifierDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindOneApplicationByUniversalIdentifier"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"universalIdentifier"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findOneApplication"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"universalIdentifier"},"value":{"kind":"Variable","name":{"kind":"Name","value":"universalIdentifier"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ApplicationFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isUICreatable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"executionMode"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"toolTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"workflowActionTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Application"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}},{"kind":"Field","name":{"kind":"Name","value":"logoUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"canBeUninstalled"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRoleId"}},{"kind":"Field","name":{"kind":"Name","value":"settingsCustomTabFrontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"availablePackages"}},{"kind":"Field","name":{"kind":"Name","value":"applicationVariables"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"isSecret"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"frontComponents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"componentName"}},{"kind":"Field","name":{"kind":"Name","value":"builtComponentChecksum"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"isHeadless"}},{"kind":"Field","name":{"kind":"Name","value":"usesSdkClient"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"commandMenuItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"shortLabel"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isPinned"}},{"kind":"Field","name":{"kind":"Name","value":"availabilityType"}},{"kind":"Field","name":{"kind":"Name","value":"conditionalAvailabilityExpression"}},{"kind":"Field","name":{"kind":"Name","value":"frontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logicFunctions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LogicFunctionFields"}}]}}]}}]} as unknown as DocumentNode;
+export const FindOneApplicationDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindOneApplication"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findOneApplication"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ApplicationFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isUICreatable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"searchFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"tsVectorFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"executionMode"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"toolTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"workflowActionTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Application"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}},{"kind":"Field","name":{"kind":"Name","value":"logoUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"canBeUninstalled"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRoleId"}},{"kind":"Field","name":{"kind":"Name","value":"settingsCustomTabFrontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"availablePackages"}},{"kind":"Field","name":{"kind":"Name","value":"applicationVariables"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"isSecret"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"frontComponents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"componentName"}},{"kind":"Field","name":{"kind":"Name","value":"builtComponentChecksum"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"isHeadless"}},{"kind":"Field","name":{"kind":"Name","value":"usesSdkClient"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"commandMenuItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"shortLabel"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isPinned"}},{"kind":"Field","name":{"kind":"Name","value":"availabilityType"}},{"kind":"Field","name":{"kind":"Name","value":"conditionalAvailabilityExpression"}},{"kind":"Field","name":{"kind":"Name","value":"frontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logicFunctions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LogicFunctionFields"}}]}}]}}]} as unknown as DocumentNode;
+export const FindOneApplicationByUniversalIdentifierDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindOneApplicationByUniversalIdentifier"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"universalIdentifier"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findOneApplication"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"universalIdentifier"},"value":{"kind":"Variable","name":{"kind":"Name","value":"universalIdentifier"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ApplicationFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isUICreatable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"searchFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"tsVectorFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"executionMode"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"toolTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"workflowActionTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Application"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"logo"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}},{"kind":"Field","name":{"kind":"Name","value":"logoUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"canBeUninstalled"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRoleId"}},{"kind":"Field","name":{"kind":"Name","value":"settingsCustomTabFrontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"availablePackages"}},{"kind":"Field","name":{"kind":"Name","value":"applicationVariables"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"isSecret"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"frontComponents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"componentName"}},{"kind":"Field","name":{"kind":"Name","value":"builtComponentChecksum"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"isHeadless"}},{"kind":"Field","name":{"kind":"Name","value":"usesSdkClient"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"commandMenuItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"shortLabel"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isPinned"}},{"kind":"Field","name":{"kind":"Name","value":"availabilityType"}},{"kind":"Field","name":{"kind":"Name","value":"conditionalAvailabilityExpression"}},{"kind":"Field","name":{"kind":"Name","value":"frontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logicFunctions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LogicFunctionFields"}}]}}]}}]} as unknown as DocumentNode;
export const FindOneApplicationSummaryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindOneApplicationSummary"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"universalIdentifier"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findOneApplication"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"universalIdentifier"},"value":{"kind":"Variable","name":{"kind":"Name","value":"universalIdentifier"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode;
export const AuthorizeAppDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"authorizeApp"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"clientId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"codeChallenge"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"redirectUrl"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"state"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"authorizeApp"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"clientId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"clientId"}}},{"kind":"Argument","name":{"kind":"Name","value":"codeChallenge"},"value":{"kind":"Variable","name":{"kind":"Name","value":"codeChallenge"}}},{"kind":"Argument","name":{"kind":"Name","value":"redirectUrl"},"value":{"kind":"Variable","name":{"kind":"Name","value":"redirectUrl"}}},{"kind":"Argument","name":{"kind":"Name","value":"state"},"value":{"kind":"Variable","name":{"kind":"Name","value":"state"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"redirectUrl"}}]}}]}}]} as unknown as DocumentNode;
export const EmailPasswordResetLinkDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"EmailPasswordResetLink"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"email"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workspaceId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"emailPasswordResetLink"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"email"},"value":{"kind":"Variable","name":{"kind":"Name","value":"email"}}},{"kind":"Argument","name":{"kind":"Name","value":"workspaceId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workspaceId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"success"}}]}}]}}]} as unknown as DocumentNode;
@@ -8813,7 +8824,7 @@ export const DeleteOneObjectMetadataItemDocument = {"kind":"Document","definitio
export const DeleteOneFieldMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteOneFieldMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteOneField"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"object"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode;
export const CreateOneIndexMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOneIndexMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateOneIndexInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOneIndex"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}}]}}]} as unknown as DocumentNode;
export const DeleteOneIndexMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteOneIndexMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteOneIndex"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]} as unknown as DocumentNode;
-export const ObjectMetadataItemsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ObjectMetadataItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objects"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"hasNextPage"}},{"kind":"Field","name":{"kind":"Name","value":"hasPreviousPage"}},{"kind":"Field","name":{"kind":"Name","value":"startCursor"}},{"kind":"Field","name":{"kind":"Name","value":"endCursor"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isUICreatable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}}]} as unknown as DocumentNode;
+export const ObjectMetadataItemsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ObjectMetadataItems"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objects"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"hasNextPage"}},{"kind":"Field","name":{"kind":"Name","value":"hasPreviousPage"}},{"kind":"Field","name":{"kind":"Name","value":"startCursor"}},{"kind":"Field","name":{"kind":"Name","value":"endCursor"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isUICreatable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"searchFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"tsVectorFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"position"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"subFieldName"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIEditable"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}}]} as unknown as DocumentNode;
export const ObjectRecordCountsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ObjectRecordCounts"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectRecordCounts"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objectNamePlural"}},{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}}]}}]} as unknown as DocumentNode;
export const SkipBookOnboardingStepDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SkipBookOnboardingStep"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"skipBookOnboardingStep"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"success"}}]}}]}}]} as unknown as DocumentNode;
export const SkipSyncEmailOnboardingStepDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SkipSyncEmailOnboardingStep"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"skipSyncEmailOnboardingStep"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"success"}}]}}]}}]} as unknown as DocumentNode;
diff --git a/packages/twenty-front/src/modules/object-metadata/graphql/fragment.ts b/packages/twenty-front/src/modules/object-metadata/graphql/fragment.ts
index b9ae999c07..ea4d7e29bc 100644
--- a/packages/twenty-front/src/modules/object-metadata/graphql/fragment.ts
+++ b/packages/twenty-front/src/modules/object-metadata/graphql/fragment.ts
@@ -25,6 +25,14 @@ export const OBJECT_METADATA_FRAGMENT = gql`
isLabelSyncedWithName
isSearchable
duplicateCriteria
+ searchFieldMetadataList {
+ id
+ fieldMetadataId
+ tsVectorFieldMetadataId
+ position
+ createdAt
+ updatedAt
+ }
indexMetadataList {
id
createdAt
diff --git a/packages/twenty-front/src/modules/object-metadata/types/EnrichedObjectMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/types/EnrichedObjectMetadataItem.ts
index da502b0149..2dec037f49 100644
--- a/packages/twenty-front/src/modules/object-metadata/types/EnrichedObjectMetadataItem.ts
+++ b/packages/twenty-front/src/modules/object-metadata/types/EnrichedObjectMetadataItem.ts
@@ -1,6 +1,7 @@
import { type Object as GeneratedObject } from '~/generated-metadata/graphql';
import { type IndexMetadataItem } from '@/object-metadata/types/IndexMetadataItem';
+import { type SearchFieldMetadataItem } from '@/object-metadata/types/SearchFieldMetadataItem';
import { type FieldMetadataItem } from './FieldMetadataItem';
export type EnrichedObjectMetadataItem = Omit<
@@ -12,6 +13,7 @@ export type EnrichedObjectMetadataItem = Omit<
| 'labelIdentifierFieldMetadataId'
| 'fieldsList'
| 'indexMetadataList'
+ | 'searchFieldMetadataList'
// Deprecated GraphQL field kept server-side for one release; no longer queried
| 'isUIReadOnly'
> & {
@@ -22,4 +24,5 @@ export type EnrichedObjectMetadataItem = Omit<
updatableFields: FieldMetadataItem[];
labelIdentifierFieldMetadataId: string;
indexMetadatas: IndexMetadataItem[];
+ searchFieldMetadatas: SearchFieldMetadataItem[];
};
diff --git a/packages/twenty-front/src/modules/object-metadata/types/SearchFieldMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/types/SearchFieldMetadataItem.ts
new file mode 100644
index 0000000000..aa8070ebfe
--- /dev/null
+++ b/packages/twenty-front/src/modules/object-metadata/types/SearchFieldMetadataItem.ts
@@ -0,0 +1,8 @@
+import { type SearchField as GeneratedSearchField } from '~/generated-metadata/graphql';
+
+export type SearchFieldMetadataItem = Omit<
+ GeneratedSearchField,
+ '__typename'
+> & {
+ __typename?: string;
+};
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/mapPaginatedObjectMetadataItemsToObjectMetadataItems.ts b/packages/twenty-front/src/modules/object-metadata/utils/mapPaginatedObjectMetadataItemsToObjectMetadataItems.ts
index 9f4b15c1c8..5bba9381bf 100644
--- a/packages/twenty-front/src/modules/object-metadata/utils/mapPaginatedObjectMetadataItemsToObjectMetadataItems.ts
+++ b/packages/twenty-front/src/modules/object-metadata/utils/mapPaginatedObjectMetadataItemsToObjectMetadataItems.ts
@@ -1,5 +1,6 @@
import { type IndexFieldMetadataItem } from '@/object-metadata/types/IndexFieldMetadataItem';
import { type IndexMetadataItem } from '@/object-metadata/types/IndexMetadataItem';
+import { type SearchFieldMetadataItem } from '@/object-metadata/types/SearchFieldMetadataItem';
import { objectMetadataItemSchema } from '@/object-metadata/validation-schemas/objectMetadataItemSchema';
import { type ObjectMetadataItemsQuery } from '~/generated-metadata/graphql';
import { type EnrichedObjectMetadataItem } from '@/object-metadata/types/EnrichedObjectMetadataItem';
@@ -21,8 +22,12 @@ export const mapPaginatedObjectMetadataItemsToObjectMetadataItems = ({
object.node.labelIdentifierFieldMetadataId,
);
- const { fieldsList, indexMetadataList, ...objectWithoutFieldsList } =
- object.node;
+ const {
+ fieldsList,
+ indexMetadataList,
+ searchFieldMetadataList,
+ ...objectWithoutFieldsList
+ } = object.node;
return {
...objectWithoutFieldsList,
@@ -30,6 +35,12 @@ export const mapPaginatedObjectMetadataItemsToObjectMetadataItems = ({
...field,
})),
labelIdentifierFieldMetadataId,
+ searchFieldMetadatas: searchFieldMetadataList.map(
+ (searchFieldMetadata) =>
+ ({
+ ...searchFieldMetadata,
+ }) satisfies SearchFieldMetadataItem,
+ ),
indexMetadatas: indexMetadataList.map(
({ indexFieldMetadataList: indexFields, ...indexRest }) =>
({
diff --git a/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts b/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts
index a302c4cf0e..e8ad22da83 100644
--- a/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts
+++ b/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts
@@ -3,6 +3,7 @@ import { z } from 'zod';
import { fieldMetadataItemSchema } from '@/object-metadata/validation-schemas/fieldMetadataItemSchema';
import { indexMetadataItemSchema } from '@/object-metadata/validation-schemas/indexMetadataItemSchema';
import { metadataLabelSchema } from '@/object-metadata/validation-schemas/metadataLabelSchema';
+import { searchFieldMetadataItemSchema } from '@/object-metadata/validation-schemas/searchFieldMetadataItemSchema';
import { camelCaseStringSchema } from '~/utils/validation-schemas/camelCaseStringSchema';
export const objectMetadataItemSchema = z.object({
@@ -13,6 +14,7 @@ export const objectMetadataItemSchema = z.object({
readableFields: z.array(fieldMetadataItemSchema()),
updatableFields: z.array(fieldMetadataItemSchema()),
indexMetadatas: z.array(indexMetadataItemSchema),
+ searchFieldMetadatas: z.array(searchFieldMetadataItemSchema),
icon: z.string().startsWith('Icon').trim(),
applicationId: z.uuid(),
id: z.uuid(),
diff --git a/packages/twenty-front/src/modules/object-metadata/validation-schemas/searchFieldMetadataItemSchema.ts b/packages/twenty-front/src/modules/object-metadata/validation-schemas/searchFieldMetadataItemSchema.ts
new file mode 100644
index 0000000000..fcf895d8ce
--- /dev/null
+++ b/packages/twenty-front/src/modules/object-metadata/validation-schemas/searchFieldMetadataItemSchema.ts
@@ -0,0 +1,13 @@
+import { z } from 'zod';
+
+import { type SearchFieldMetadataItem } from '@/object-metadata/types/SearchFieldMetadataItem';
+
+export const searchFieldMetadataItemSchema = z.object({
+ __typename: z.literal('SearchField').optional(),
+ id: z.uuid(),
+ fieldMetadataId: z.uuid(),
+ tsVectorFieldMetadataId: z.uuid(),
+ position: z.number(),
+ createdAt: z.string(),
+ updatedAt: z.string(),
+}) satisfies z.ZodType;
diff --git a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useAggregateRecordsQuery.test.tsx b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useAggregateRecordsQuery.test.tsx
index 19dd68b786..bf1ac7836f 100644
--- a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useAggregateRecordsQuery.test.tsx
+++ b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useAggregateRecordsQuery.test.tsx
@@ -50,6 +50,7 @@ const mockObjectMetadataItem: EnrichedObjectMetadataItem = {
readableFields: fields,
updatableFields: fields,
indexMetadatas: [],
+ searchFieldMetadatas: [],
isLabelSyncedWithName: true,
isRemote: false,
isSystem: false,
diff --git a/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/__tests__/turnSortsIntoOrderBy.test.ts b/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/__tests__/turnSortsIntoOrderBy.test.ts
index fe5b0bb4dd..0388b16b4a 100644
--- a/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/__tests__/turnSortsIntoOrderBy.test.ts
+++ b/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/__tests__/turnSortsIntoOrderBy.test.ts
@@ -29,6 +29,7 @@ const objectMetadataItemWithPositionField: EnrichedObjectMetadataItem = {
readableFields: fields,
updatableFields: fields,
indexMetadatas: [],
+ searchFieldMetadatas: [],
createdAt: '2021-01-01',
updatedAt: '2021-01-01',
nameSingular: 'object1',
@@ -191,6 +192,7 @@ describe('turnSortsIntoOrderBy', () => {
readableFields: [],
updatableFields: [],
indexMetadatas: [],
+ searchFieldMetadatas: [],
createdAt: '2021-01-01',
updatedAt: '2021-01-01',
nameSingular: 'company',
@@ -241,6 +243,7 @@ describe('turnSortsIntoOrderBy', () => {
readableFields: [],
updatableFields: [],
indexMetadatas: [],
+ searchFieldMetadatas: [],
createdAt: '2021-01-01',
updatedAt: '2021-01-01',
nameSingular: 'person',
diff --git a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/__tests__/buildRecordGqlFieldsAggregateForView.test.ts b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/__tests__/buildRecordGqlFieldsAggregateForView.test.ts
index b75928f2be..8f5b2f0190 100644
--- a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/__tests__/buildRecordGqlFieldsAggregateForView.test.ts
+++ b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/__tests__/buildRecordGqlFieldsAggregateForView.test.ts
@@ -49,6 +49,7 @@ describe('buildRecordGqlFieldsAggregateForView', () => {
readableFields: fields,
updatableFields: fields,
indexMetadatas: [],
+ searchFieldMetadatas: [],
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
};
diff --git a/packages/twenty-front/src/modules/object-record/utils/__tests__/generateAggregateQuery.test.ts b/packages/twenty-front/src/modules/object-record/utils/__tests__/generateAggregateQuery.test.ts
index 5b0ce8b28a..2cb5c10de9 100644
--- a/packages/twenty-front/src/modules/object-record/utils/__tests__/generateAggregateQuery.test.ts
+++ b/packages/twenty-front/src/modules/object-record/utils/__tests__/generateAggregateQuery.test.ts
@@ -19,6 +19,7 @@ describe('generateAggregateQuery', () => {
readableFields: [],
updatableFields: [],
indexMetadatas: [],
+ searchFieldMetadatas: [],
isLabelSyncedWithName: true,
isRemote: false,
isSystem: false,
@@ -62,6 +63,7 @@ describe('generateAggregateQuery', () => {
readableFields: [],
updatableFields: [],
indexMetadatas: [],
+ searchFieldMetadatas: [],
isLabelSyncedWithName: true,
isRemote: false,
isSystem: false,
diff --git a/packages/twenty-front/src/modules/settings/data-model/object-details/components/tabs/SettingsObjectSearchSection.tsx b/packages/twenty-front/src/modules/settings/data-model/object-details/components/tabs/SettingsObjectSearchSection.tsx
index 54d036612c..7a9f310d18 100644
--- a/packages/twenty-front/src/modules/settings/data-model/object-details/components/tabs/SettingsObjectSearchSection.tsx
+++ b/packages/twenty-front/src/modules/settings/data-model/object-details/components/tabs/SettingsObjectSearchSection.tsx
@@ -12,6 +12,7 @@ import { TableRow } from '@/ui/layout/table/components/TableRow';
import { styled } from '@linaria/react';
import { useLingui } from '@lingui/react/macro';
import { useContext, useMemo, useState } from 'react';
+import { isDefined } from 'twenty-shared/utils';
import { IconEye, IconSearch, useIcons } from 'twenty-ui/icon';
import { Card } from 'twenty-ui/surfaces';
@@ -44,56 +45,34 @@ const StyledNameLabel = styled.div`
const INDEXED_FIELDS_GRID_TEMPLATE_COLUMNS = 'minmax(0, 1fr) 100px 148px';
-// TODO: This is very DIRTY ; let's migrate searchVector to be proper tables
-// Already tracked here: https://github.com/twentyhq/core-team-issues/issues/1428
const extractIndexedFields = (
objectMetadataItem: EnrichedObjectMetadataItem,
): IndexedFieldEntry[] => {
- const searchVectorField = objectMetadataItem.fields.find(
- (field) => field.name === SEARCH_VECTOR_FIELD_NAME,
+ const fieldById = new Map(
+ objectMetadataItem.fields.map((field) => [field.id, field]),
);
- const asExpression = (
- searchVectorField?.settings as { asExpression?: string } | null
- )?.asExpression;
+ return [...objectMetadataItem.searchFieldMetadatas]
+ .sort(
+ (searchFieldMetadataA, searchFieldMetadataB) =>
+ searchFieldMetadataA.position - searchFieldMetadataB.position,
+ )
+ .map((searchFieldMetadata) => {
+ const field = fieldById.get(searchFieldMetadata.fieldMetadataId);
- if (!asExpression) {
- return [];
- }
+ if (!isDefined(field) || field.name === SEARCH_VECTOR_FIELD_NAME) {
+ return undefined;
+ }
- const columnNames = [
- ...new Set(
- Array.from(asExpression.matchAll(/"([^"]+)"/g), (match) => match[1]),
- ),
- ];
-
- const seenFieldIds = new Set();
- const entries: IndexedFieldEntry[] = [];
-
- for (const columnName of columnNames) {
- const field = objectMetadataItem.fields.find(
- (fieldItem) =>
- fieldItem.name === columnName || columnName.startsWith(fieldItem.name),
- );
-
- if (
- field &&
- field.name !== SEARCH_VECTOR_FIELD_NAME &&
- !seenFieldIds.has(field.id)
- ) {
- seenFieldIds.add(field.id);
-
- entries.push({
+ return {
id: field.id,
label: field.label,
icon: field.icon,
weight: 1,
fieldType: field.type,
- });
- }
- }
-
- return entries;
+ } satisfies IndexedFieldEntry;
+ })
+ .filter(isDefined);
};
export const SettingsObjectSearchSection = ({
diff --git a/packages/twenty-front/src/modules/workflow/components/__stories__/WorkflowFieldsMultiSelect.stories.ts b/packages/twenty-front/src/modules/workflow/components/__stories__/WorkflowFieldsMultiSelect.stories.ts
index cb52b4e9b2..46438c7a70 100644
--- a/packages/twenty-front/src/modules/workflow/components/__stories__/WorkflowFieldsMultiSelect.stories.ts
+++ b/packages/twenty-front/src/modules/workflow/components/__stories__/WorkflowFieldsMultiSelect.stories.ts
@@ -80,6 +80,7 @@ const mockObjectMetadataItem: EnrichedObjectMetadataItem = {
isSearchable: true,
labelIdentifierFieldMetadataId: '1',
indexMetadatas: [],
+ searchFieldMetadatas: [],
fields: fields,
readableFields: fields,
updatableFields: fields,
diff --git a/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationPermissionsTab.tsx b/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationPermissionsTab.tsx
index 6e4a61389c..cd495ae1f5 100644
--- a/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationPermissionsTab.tsx
+++ b/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationPermissionsTab.tsx
@@ -254,6 +254,7 @@ const buildObjectMetadataItemsFromMarketplaceApp = (
(field) => !nonUpdatableFieldIds.has(field.id),
),
indexMetadatas: [],
+ searchFieldMetadatas: [],
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
};
diff --git a/packages/twenty-front/src/testing/mock-data/generated/metadata/objects/mock-objects-metadata.ts b/packages/twenty-front/src/testing/mock-data/generated/metadata/objects/mock-objects-metadata.ts
index 9d3394d0a4..d079a68345 100644
--- a/packages/twenty-front/src/testing/mock-data/generated/metadata/objects/mock-objects-metadata.ts
+++ b/packages/twenty-front/src/testing/mock-data/generated/metadata/objects/mock-objects-metadata.ts
@@ -43,6 +43,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"labelPlural": "Calendar events",
"description": "Calendar events",
"icon": "IconCalendar",
+ "searchFieldMetadataList": [],
"indexMetadataList": [],
"fieldsList": [
{
@@ -1043,6 +1044,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -1488,6 +1490,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -2264,6 +2267,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -2378,6 +2382,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"labelPlural": "Message Threads",
"description": "Message Thread",
"icon": "IconMessage",
+ "searchFieldMetadataList": [],
"indexMetadataList": [],
"fieldsList": [
{
@@ -3572,6 +3577,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
]
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -4388,6 +4394,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -5184,6 +5191,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -5767,6 +5775,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
]
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -6366,6 +6375,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -7179,6 +7189,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
]
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -7694,6 +7705,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -8255,6 +8267,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -8842,6 +8855,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -9493,6 +9507,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -10144,6 +10159,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -11184,6 +11200,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -12432,6 +12449,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
]
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -13080,6 +13098,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
]
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -13492,6 +13511,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -14144,6 +14164,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -14722,6 +14743,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -15937,6 +15959,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -16541,6 +16564,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
]
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -17677,6 +17701,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -18195,6 +18220,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -18723,6 +18749,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -19072,6 +19099,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
@@ -19650,6 +19678,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
"morphRelations": null
}
],
+ "searchFieldMetadataList": [],
"indexMetadataList": [
{
"__typename": "Index",
diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/2-10-workspace-command-1799000055000-sync-call-recording-standard-objects.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/2-10-workspace-command-1799000055000-sync-call-recording-standard-objects.command.ts
index a7e0dd74c2..35004336c0 100644
--- a/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/2-10-workspace-command-1799000055000-sync-call-recording-standard-objects.command.ts
+++ b/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/2-10-workspace-command-1799000055000-sync-call-recording-standard-objects.command.ts
@@ -178,6 +178,8 @@ const buildLegacyCalendarEventRecordingPreferenceFieldMetadata = ({
mainGroupByFieldMetadataViewUniversalIdentifiers: [],
viewSortIds: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataIds: [],
+ searchFieldMetadataUniversalIdentifiers: [],
universalSettings: null,
});
diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/2-16/utils/__tests__/build-search-field-metadata-backfill-operations.util.spec.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/2-16/utils/__tests__/build-search-field-metadata-backfill-operations.util.spec.ts
index 465e6ebde9..eaac4d78db 100644
--- a/packages/twenty-server/src/database/commands/upgrade-version-command/2-16/utils/__tests__/build-search-field-metadata-backfill-operations.util.spec.ts
+++ b/packages/twenty-server/src/database/commands/upgrade-version-command/2-16/utils/__tests__/build-search-field-metadata-backfill-operations.util.spec.ts
@@ -5,6 +5,7 @@ import { buildSearchFieldMetadataBackfillOperations } from 'src/database/command
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
import { getFlatFieldMetadataMock } from 'src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
+import { SEARCH_VECTOR_FIELD } from 'src/engine/metadata-modules/search-field-metadata/constants/search-vector-field.constants';
import {
getFlatObjectMetadataMock,
getStandardFlatObjectMetadataMock,
@@ -100,6 +101,8 @@ const buildSearchFieldMetadata = ({
fieldMetadataUniversalIdentifier,
applicationUniversalIdentifier,
position = 0,
+ tsVectorFieldMetadataId = 'ts-vector-field-metadata-id',
+ tsVectorFieldMetadataUniversalIdentifier = 'ts-vector-field-metadata-universal-identifier',
}: {
id: string;
universalIdentifier: string;
@@ -109,6 +112,8 @@ const buildSearchFieldMetadata = ({
fieldMetadataUniversalIdentifier: string;
applicationUniversalIdentifier: string;
position?: number;
+ tsVectorFieldMetadataId?: string;
+ tsVectorFieldMetadataUniversalIdentifier?: string;
}): FlatSearchFieldMetadata => {
const createdAt = '2024-01-01T00:00:00.000Z';
@@ -119,6 +124,8 @@ const buildSearchFieldMetadata = ({
fieldMetadataId,
objectMetadataUniversalIdentifier,
fieldMetadataUniversalIdentifier,
+ tsVectorFieldMetadataId,
+ tsVectorFieldMetadataUniversalIdentifier,
applicationId: 'unused-application-id',
applicationUniversalIdentifier,
position,
@@ -128,6 +135,25 @@ const buildSearchFieldMetadata = ({
};
};
+const buildSearchVectorField = ({
+ objectMetadataId,
+ objectMetadataUniversalIdentifier,
+ applicationUniversalIdentifier,
+}: {
+ objectMetadataId: string;
+ objectMetadataUniversalIdentifier: string;
+ applicationUniversalIdentifier: string;
+}): FlatFieldMetadata =>
+ getFlatFieldMetadataMock({
+ id: `${objectMetadataId}-search-vector-field-id`,
+ universalIdentifier: `${objectMetadataUniversalIdentifier}-search-vector-field-uid`,
+ objectMetadataId,
+ objectMetadataUniversalIdentifier,
+ type: FieldMetadataType.TS_VECTOR,
+ name: SEARCH_VECTOR_FIELD.name,
+ applicationUniversalIdentifier,
+ });
+
// Custom object with a searchable `name` field plus a TEXT field whose name
// overlaps it by prefix (name / nameDescription). Only the `name` field should
// produce a row; the exact-name match makes the prefix overlap irrelevant. This
@@ -158,6 +184,12 @@ const buildCustomObjectFixture = () => {
applicationUniversalIdentifier: CUSTOM_APPLICATION_UNIVERSAL_IDENTIFIER,
});
+ const searchVectorField = buildSearchVectorField({
+ objectMetadataId: customObjectId,
+ objectMetadataUniversalIdentifier: customObjectUniversalIdentifier,
+ applicationUniversalIdentifier: CUSTOM_APPLICATION_UNIVERSAL_IDENTIFIER,
+ });
+
const customObject = getFlatObjectMetadataMock({
id: customObjectId,
universalIdentifier: customObjectUniversalIdentifier,
@@ -168,15 +200,16 @@ const buildCustomObjectFixture = () => {
fieldUniversalIdentifiers: [
nameField.universalIdentifier,
nameDescriptionField.universalIdentifier,
+ searchVectorField.universalIdentifier,
],
});
- return { customObject, nameField, nameDescriptionField };
+ return { customObject, nameField, nameDescriptionField, searchVectorField };
};
describe('buildSearchFieldMetadataBackfillOperations', () => {
it('selects only the name field for a custom object, ignoring a prefix-overlapping field name', () => {
- const { customObject, nameField, nameDescriptionField } =
+ const { customObject, nameField, nameDescriptionField, searchVectorField } =
buildCustomObjectFixture();
const { flatSearchFieldMetadatasToCreateByApplicationUniversalIdentifier } =
@@ -185,6 +218,7 @@ describe('buildSearchFieldMetadataBackfillOperations', () => {
flatFieldMetadataMaps: buildFlatFieldMetadataMaps([
nameField,
nameDescriptionField,
+ searchVectorField,
]),
flatSearchFieldMetadataMaps: buildFlatSearchFieldMetadataMaps([]),
standardFlatSearchFieldMetadataMaps:
@@ -204,6 +238,10 @@ describe('buildSearchFieldMetadataBackfillOperations', () => {
expect(customApplicationRows?.[0].objectMetadataUniversalIdentifier).toBe(
customObject.universalIdentifier,
);
+ // The row points at the object's searchVector field via the new FK.
+ expect(
+ customApplicationRows?.[0].tsVectorFieldMetadataUniversalIdentifier,
+ ).toBe(searchVectorField.universalIdentifier);
// Custom object name field is seeded at position 0.
expect(customApplicationRows?.[0].position).toBe(0);
// No spurious row for the prefix-overlapping `nameDescription` field.
@@ -263,7 +301,7 @@ describe('buildSearchFieldMetadataBackfillOperations', () => {
});
it('groups rows per application: standard-object rows under the standard application, custom-object rows under the custom application', () => {
- const { customObject, nameField, nameDescriptionField } =
+ const { customObject, nameField, nameDescriptionField, searchVectorField } =
buildCustomObjectFixture();
const standardObjectId = 'standard-object-id';
@@ -282,12 +320,23 @@ describe('buildSearchFieldMetadataBackfillOperations', () => {
TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER,
});
+ const standardSearchVectorField = buildSearchVectorField({
+ objectMetadataId: standardObjectId,
+ objectMetadataUniversalIdentifier: standardObjectUniversalIdentifier,
+ applicationUniversalIdentifier:
+ TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER,
+ });
+
const standardObject = getStandardFlatObjectMetadataMock({
id: standardObjectId,
universalIdentifier: standardObjectUniversalIdentifier,
isSearchable: true,
labelIdentifierFieldMetadataId: standardFieldId,
fieldIds: [standardFieldId],
+ fieldUniversalIdentifiers: [
+ standardFieldUniversalIdentifier,
+ standardSearchVectorField.universalIdentifier,
+ ],
});
const standardSearchFieldMetadata = buildSearchFieldMetadata({
@@ -310,7 +359,9 @@ describe('buildSearchFieldMetadataBackfillOperations', () => {
flatFieldMetadataMaps: buildFlatFieldMetadataMaps([
nameField,
nameDescriptionField,
+ searchVectorField,
standardField,
+ standardSearchVectorField,
]),
flatSearchFieldMetadataMaps: buildFlatSearchFieldMetadataMaps([]),
standardFlatSearchFieldMetadataMaps: buildFlatSearchFieldMetadataMaps([
@@ -339,6 +390,9 @@ describe('buildSearchFieldMetadataBackfillOperations', () => {
expect(standardApplicationRows?.[0].fieldMetadataUniversalIdentifier).toBe(
standardFieldUniversalIdentifier,
);
+ expect(
+ standardApplicationRows?.[0].tsVectorFieldMetadataUniversalIdentifier,
+ ).toBe(standardSearchVectorField.universalIdentifier);
const customApplicationRows =
flatSearchFieldMetadatasToCreateByApplicationUniversalIdentifier[
@@ -349,6 +403,9 @@ describe('buildSearchFieldMetadataBackfillOperations', () => {
expect(customApplicationRows?.[0].fieldMetadataUniversalIdentifier).toBe(
nameField.universalIdentifier,
);
+ expect(
+ customApplicationRows?.[0].tsVectorFieldMetadataUniversalIdentifier,
+ ).toBe(searchVectorField.universalIdentifier);
});
it('selects only the standard-set field on a standard object, never a prefix-overlapping sibling (phone vs phoneNumber)', () => {
@@ -386,12 +443,24 @@ describe('buildSearchFieldMetadataBackfillOperations', () => {
TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER,
});
+ const standardSearchVectorField = buildSearchVectorField({
+ objectMetadataId: standardObjectId,
+ objectMetadataUniversalIdentifier: standardObjectUniversalIdentifier,
+ applicationUniversalIdentifier:
+ TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER,
+ });
+
const standardObject = getStandardFlatObjectMetadataMock({
id: standardObjectId,
universalIdentifier: standardObjectUniversalIdentifier,
isSearchable: true,
labelIdentifierFieldMetadataId: phoneFieldId,
fieldIds: [phoneFieldId, phoneNumberFieldId],
+ fieldUniversalIdentifiers: [
+ phoneFieldUniversalIdentifier,
+ phoneNumberFieldUniversalIdentifier,
+ standardSearchVectorField.universalIdentifier,
+ ],
});
const phoneSearchFieldMetadata = buildSearchFieldMetadata({
@@ -411,6 +480,7 @@ describe('buildSearchFieldMetadataBackfillOperations', () => {
flatFieldMetadataMaps: buildFlatFieldMetadataMaps([
phoneField,
phoneNumberField,
+ standardSearchVectorField,
]),
flatSearchFieldMetadataMaps: buildFlatSearchFieldMetadataMaps([]),
standardFlatSearchFieldMetadataMaps: buildFlatSearchFieldMetadataMaps([
@@ -455,12 +525,23 @@ describe('buildSearchFieldMetadataBackfillOperations', () => {
TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER,
});
+ const standardSearchVectorField = buildSearchVectorField({
+ objectMetadataId: standardObjectId,
+ objectMetadataUniversalIdentifier: standardObjectUniversalIdentifier,
+ applicationUniversalIdentifier:
+ TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER,
+ });
+
const standardObject = getStandardFlatObjectMetadataMock({
id: standardObjectId,
universalIdentifier: standardObjectUniversalIdentifier,
isSearchable: true,
labelIdentifierFieldMetadataId: emailsFieldId,
fieldIds: [emailsFieldId],
+ fieldUniversalIdentifiers: [
+ emailsFieldUniversalIdentifier,
+ standardSearchVectorField.universalIdentifier,
+ ],
});
// The standard maps row sits at position 3 (e.g. SEARCH_FIELDS_FOR_PERSON order);
@@ -480,7 +561,10 @@ describe('buildSearchFieldMetadataBackfillOperations', () => {
const { flatSearchFieldMetadatasToCreateByApplicationUniversalIdentifier } =
buildSearchFieldMetadataBackfillOperations({
flatObjectMetadataMaps: buildFlatObjectMetadataMaps([standardObject]),
- flatFieldMetadataMaps: buildFlatFieldMetadataMaps([emailsField]),
+ flatFieldMetadataMaps: buildFlatFieldMetadataMaps([
+ emailsField,
+ standardSearchVectorField,
+ ]),
flatSearchFieldMetadataMaps: buildFlatSearchFieldMetadataMaps([]),
standardFlatSearchFieldMetadataMaps: buildFlatSearchFieldMetadataMaps([
standardSearchFieldMetadata,
diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/2-16/utils/build-search-field-metadata-backfill-operations.util.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/2-16/utils/build-search-field-metadata-backfill-operations.util.ts
index e8259a249a..41220b32e6 100644
--- a/packages/twenty-server/src/database/commands/upgrade-version-command/2-16/utils/build-search-field-metadata-backfill-operations.util.ts
+++ b/packages/twenty-server/src/database/commands/upgrade-version-command/2-16/utils/build-search-field-metadata-backfill-operations.util.ts
@@ -10,6 +10,7 @@ import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-m
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
import { type FlatSearchFieldMetadata } from 'src/engine/metadata-modules/flat-search-field-metadata/types/flat-search-field-metadata.type';
import { buildFlatSearchFieldMetadataForField } from 'src/engine/metadata-modules/flat-search-field-metadata/utils/build-flat-search-field-metadata-for-field.util';
+import { findTsVectorFlatFieldMetadataForObject } from 'src/engine/metadata-modules/flat-search-field-metadata/utils/find-ts-vector-flat-field-metadata-for-object.util';
import { DEFAULT_LABEL_IDENTIFIER_FIELD_NAME } from 'src/engine/metadata-modules/object-metadata/constants/object-metadata.constants';
import { type UniversalFlatSearchFieldMetadata } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-search-field-metadata.type';
@@ -84,12 +85,22 @@ export const buildSearchFieldMetadataBackfillOperations = ({
return;
}
+ const tsVectorFlatFieldMetadata = findTsVectorFlatFieldMetadataForObject({
+ fieldUniversalIdentifiers: flatObjectMetadata.fieldUniversalIdentifiers,
+ flatFieldMetadataMaps,
+ });
+
+ if (!isDefined(tsVectorFlatFieldMetadata)) {
+ return;
+ }
+
candidateSearchFieldMetadataKeys.add(searchFieldMetadataKey);
flatSearchFieldMetadatasToCreate.push(
buildFlatSearchFieldMetadataForField({
flatObjectMetadata,
flatFieldMetadata,
+ tsVectorFlatFieldMetadata,
position,
}),
);
diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/2-18/2-18-instance-command-fast-1810000001000-add-ts-vector-field-metadata-id-to-search-field-metadata.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/2-18/2-18-instance-command-fast-1810000001000-add-ts-vector-field-metadata-id-to-search-field-metadata.ts
new file mode 100644
index 0000000000..24e693f85f
--- /dev/null
+++ b/packages/twenty-server/src/database/commands/upgrade-version-command/2-18/2-18-instance-command-fast-1810000001000-add-ts-vector-field-metadata-id-to-search-field-metadata.ts
@@ -0,0 +1,53 @@
+import { QueryRunner } from 'typeorm';
+
+import { RegisteredInstanceCommand } from 'src/engine/core-modules/upgrade/decorators/registered-instance-command.decorator';
+import { FastInstanceCommand } from 'src/engine/core-modules/upgrade/interfaces/fast-instance-command.interface';
+
+@RegisteredInstanceCommand('2.18.0', 1810000001000)
+export class AddTsVectorFieldMetadataIdToSearchFieldMetadataFastInstanceCommand implements FastInstanceCommand {
+ public async up(queryRunner: QueryRunner): Promise {
+ await queryRunner.query(
+ 'ALTER TABLE "core"."searchFieldMetadata" ADD "tsVectorFieldMetadataId" uuid',
+ );
+ await queryRunner.query(
+ 'ALTER TABLE "core"."searchFieldMetadata" ADD CONSTRAINT "FK_31102b31f7338b6a298fc22996a" FOREIGN KEY ("tsVectorFieldMetadataId") REFERENCES "core"."fieldMetadata"("id") ON DELETE CASCADE ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED',
+ );
+
+ await queryRunner.query(
+ 'ALTER TABLE "core"."searchFieldMetadata" DROP CONSTRAINT IF EXISTS "FK_1b78544eb06f82059a2a01013a3"',
+ );
+ await queryRunner.query(
+ 'ALTER TABLE "core"."searchFieldMetadata" ADD CONSTRAINT "FK_1b78544eb06f82059a2a01013a3" FOREIGN KEY ("objectMetadataId") REFERENCES "core"."objectMetadata"("id") ON DELETE CASCADE ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED',
+ );
+
+ await queryRunner.query(
+ 'ALTER TABLE "core"."searchFieldMetadata" DROP CONSTRAINT IF EXISTS "FK_6d5c6922bfd1578b1eff2abb9d6"',
+ );
+ await queryRunner.query(
+ 'ALTER TABLE "core"."searchFieldMetadata" ADD CONSTRAINT "FK_6d5c6922bfd1578b1eff2abb9d6" FOREIGN KEY ("fieldMetadataId") REFERENCES "core"."fieldMetadata"("id") ON DELETE CASCADE ON UPDATE NO ACTION DEFERRABLE INITIALLY DEFERRED',
+ );
+ }
+
+ public async down(queryRunner: QueryRunner): Promise {
+ await queryRunner.query(
+ 'ALTER TABLE "core"."searchFieldMetadata" DROP CONSTRAINT IF EXISTS "FK_6d5c6922bfd1578b1eff2abb9d6"',
+ );
+ await queryRunner.query(
+ 'ALTER TABLE "core"."searchFieldMetadata" ADD CONSTRAINT "FK_6d5c6922bfd1578b1eff2abb9d6" FOREIGN KEY ("fieldMetadataId") REFERENCES "core"."fieldMetadata"("id") ON DELETE CASCADE ON UPDATE NO ACTION',
+ );
+
+ await queryRunner.query(
+ 'ALTER TABLE "core"."searchFieldMetadata" DROP CONSTRAINT IF EXISTS "FK_1b78544eb06f82059a2a01013a3"',
+ );
+ await queryRunner.query(
+ 'ALTER TABLE "core"."searchFieldMetadata" ADD CONSTRAINT "FK_1b78544eb06f82059a2a01013a3" FOREIGN KEY ("objectMetadataId") REFERENCES "core"."objectMetadata"("id") ON DELETE CASCADE ON UPDATE NO ACTION',
+ );
+
+ await queryRunner.query(
+ 'ALTER TABLE "core"."searchFieldMetadata" DROP CONSTRAINT "FK_31102b31f7338b6a298fc22996a"',
+ );
+ await queryRunner.query(
+ 'ALTER TABLE "core"."searchFieldMetadata" DROP COLUMN "tsVectorFieldMetadataId"',
+ );
+ }
+}
diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/2-18/2-18-instance-command-slow-1810000003000-backfill-ts-vector-field-metadata-id-on-search-field-metadata.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/2-18/2-18-instance-command-slow-1810000003000-backfill-ts-vector-field-metadata-id-on-search-field-metadata.ts
new file mode 100644
index 0000000000..ec627aa8c3
--- /dev/null
+++ b/packages/twenty-server/src/database/commands/upgrade-version-command/2-18/2-18-instance-command-slow-1810000003000-backfill-ts-vector-field-metadata-id-on-search-field-metadata.ts
@@ -0,0 +1,51 @@
+import { DataSource, QueryRunner } from 'typeorm';
+
+import { RegisteredInstanceCommand } from 'src/engine/core-modules/upgrade/decorators/registered-instance-command.decorator';
+import { SlowInstanceCommand } from 'src/engine/core-modules/upgrade/interfaces/slow-instance-command.interface';
+
+// Backfills the tsVectorFieldMetadataId FK by pointing every existing
+// searchFieldMetadata row at its object's system searchVector (TS_VECTOR) field,
+// then enforces NOT NULL. Runs after the fast command that adds the column (and makes
+// the FKs deferrable). Any row left without a resolvable searchVector
+// aborts the upgrade rather than silently relaxing the NOT NULL guarantee.
+@RegisteredInstanceCommand('2.18.0', 1810000003000, { type: 'slow' })
+export class BackfillTsVectorFieldMetadataIdOnSearchFieldMetadataSlowInstanceCommand
+ implements SlowInstanceCommand
+{
+ async runDataMigration(dataSource: DataSource): Promise {
+ await dataSource.query(
+ `UPDATE "core"."searchFieldMetadata" "searchFieldMetadata"
+ SET "tsVectorFieldMetadataId" = "fieldMetadata"."id"
+ FROM "core"."fieldMetadata" "fieldMetadata"
+ WHERE "fieldMetadata"."objectMetadataId" = "searchFieldMetadata"."objectMetadataId"
+ AND "fieldMetadata"."type" = 'TS_VECTOR'
+ AND "fieldMetadata"."name" = 'searchVector'
+ AND "searchFieldMetadata"."tsVectorFieldMetadataId" IS NULL`,
+ );
+
+ const unresolvedRows: { count: string }[] = await dataSource.query(
+ `SELECT COUNT(*) AS "count" FROM "core"."searchFieldMetadata"
+ WHERE "tsVectorFieldMetadataId" IS NULL`,
+ );
+
+ const unresolvedCount = Number(unresolvedRows[0]?.count ?? 0);
+
+ if (unresolvedCount > 0) {
+ throw new Error(
+ `Cannot enforce searchFieldMetadata.tsVectorFieldMetadataId NOT NULL: ${unresolvedCount} row(s) reference an object without a searchVector (TS_VECTOR) field`,
+ );
+ }
+ }
+
+ public async up(queryRunner: QueryRunner): Promise {
+ await queryRunner.query(
+ 'ALTER TABLE "core"."searchFieldMetadata" ALTER COLUMN "tsVectorFieldMetadataId" SET NOT NULL',
+ );
+ }
+
+ public async down(queryRunner: QueryRunner): Promise {
+ await queryRunner.query(
+ 'ALTER TABLE "core"."searchFieldMetadata" ALTER COLUMN "tsVectorFieldMetadataId" DROP NOT NULL',
+ );
+ }
+}
diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/2-18/add-ts-vector-field-metadata-id-to-search-field-metadata-upgrade-command-name.constant.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/2-18/add-ts-vector-field-metadata-id-to-search-field-metadata-upgrade-command-name.constant.ts
new file mode 100644
index 0000000000..8c0a553b86
--- /dev/null
+++ b/packages/twenty-server/src/database/commands/upgrade-version-command/2-18/add-ts-vector-field-metadata-id-to-search-field-metadata-upgrade-command-name.constant.ts
@@ -0,0 +1,2 @@
+export const ADD_TS_VECTOR_FIELD_METADATA_ID_TO_SEARCH_FIELD_METADATA_UPGRADE_COMMAND_NAME =
+ '2.18.0_AddTsVectorFieldMetadataIdToSearchFieldMetadataFastInstanceCommand_1810000001000';
diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts
index aecc507456..a9b3e4ff64 100644
--- a/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts
+++ b/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts
@@ -34,6 +34,13 @@ import { AddIsSystemSideEffectFastInstanceCommand } from 'src/database/commands/
import { BackfillConnectionSecuritySlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-15/2-15-instance-command-slow-1781461753981-backfill-connection-security';
import { AddChannelWebhookSubscriptionFieldsFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-16/2-16-instance-command-fast-1782152096938-add-channel-webhook-subscription-fields';
import { AddUniversalIdentifierAndApplicationIdToSearchFieldMetadataFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-16/2-16-instance-command-fast-1782200000000-add-universal-identifier-and-application-id-to-search-field-metadata';
+import { AddServerTriggerSettingsToLogicFunctionFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-16/2-16-instance-command-fast-1782211913427-add-server-trigger-settings-to-logic-function';
+import { AddPrimaryPublicDomainToApplicationFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-16/2-16-instance-command-fast-1782281874768-add-primary-public-domain-to-application';
+import { MakePublicDomainApplicationIdNotNullSlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-16/2-16-instance-command-slow-1782281874769-make-public-domain-application-id-not-null';
+import { CreateDpaAgreementCoreTableFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-17/2-17-instance-command-fast-1801000020000-create-dpa-agreement-core-table';
+import { CreateApplicationTranslationCoreTableFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-17/2-17-instance-command-fast-1801000100000-create-application-translation-core-table';
+import { AddTsVectorFieldMetadataIdToSearchFieldMetadataFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-18/2-18-instance-command-fast-1810000001000-add-ts-vector-field-metadata-id-to-search-field-metadata';
+import { BackfillTsVectorFieldMetadataIdOnSearchFieldMetadataSlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-18/2-18-instance-command-slow-1810000003000-backfill-ts-vector-field-metadata-id-on-search-field-metadata';
import { AddCacheTokensToAgentChatThreadFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-2/2-2-instance-command-fast-1777455269302-add-cache-tokens-to-agent-chat-thread';
import { AddLogoToApplicationFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-2/2-2-instance-command-fast-1777539664664-add-logo-to-application';
import { AddSubFieldNameToViewSortEarlyFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-3/2-3-instance-command-fast-1747234200000-add-sub-field-name-to-view-sort';
@@ -77,11 +84,6 @@ import { EncryptNonSecretApplicationVariableSlowInstanceCommand } from 'src/data
import { MigrateAiModelPreferencesSlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-9/2-9-instance-command-slow-1799000010000-migrate-ai-model-preferences';
import { AddFolderImportToMessageFolderPendingSyncActionFastInstanceCommand } from './2-15/2-15-instance-command-fast-1781714499016-add-folder-import-to-message-folder-pending-sync-action';
import { AddViewKanbanColumnWidthFastInstanceCommand } from './2-15/2-15-instance-command-fast-1781900000000-add-view-kanban-column-width';
-import { AddPrimaryPublicDomainToApplicationFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-16/2-16-instance-command-fast-1782281874768-add-primary-public-domain-to-application';
-import { MakePublicDomainApplicationIdNotNullSlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-16/2-16-instance-command-slow-1782281874769-make-public-domain-application-id-not-null';
-import { AddServerTriggerSettingsToLogicFunctionFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-16/2-16-instance-command-fast-1782211913427-add-server-trigger-settings-to-logic-function';
-import { CreateDpaAgreementCoreTableFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-17/2-17-instance-command-fast-1801000020000-create-dpa-agreement-core-table';
-import { CreateApplicationTranslationCoreTableFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-17/2-17-instance-command-fast-1801000100000-create-application-translation-core-table';
export const INSTANCE_COMMANDS = [
AddViewFieldGroupIdIndexOnViewFieldFastInstanceCommand,
@@ -166,4 +168,6 @@ export const INSTANCE_COMMANDS = [
MakePublicDomainApplicationIdNotNullSlowInstanceCommand,
CreateDpaAgreementCoreTableFastInstanceCommand,
CreateApplicationTranslationCoreTableFastInstanceCommand,
+ AddTsVectorFieldMetadataIdToSearchFieldMetadataFastInstanceCommand,
+ BackfillTsVectorFieldMetadataIdOnSearchFieldMetadataSlowInstanceCommand,
];
diff --git a/packages/twenty-server/src/database/commands/workspace-export/utils/__tests__/generate-workspace-schema-ddl.util.spec.ts b/packages/twenty-server/src/database/commands/workspace-export/utils/__tests__/generate-workspace-schema-ddl.util.spec.ts
new file mode 100644
index 0000000000..a319f5dfc3
--- /dev/null
+++ b/packages/twenty-server/src/database/commands/workspace-export/utils/__tests__/generate-workspace-schema-ddl.util.spec.ts
@@ -0,0 +1,114 @@
+import { FieldMetadataType } from 'twenty-shared/types';
+
+import { type FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
+import { getFlatFieldMetadataMock } from 'src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock';
+import { getFlatObjectMetadataMock } from 'src/engine/metadata-modules/flat-object-metadata/__mocks__/get-flat-object-metadata.mock';
+import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
+import { type SearchFieldMetadataEntity } from 'src/engine/metadata-modules/search-field-metadata/search-field-metadata.entity';
+import { generateWorkspaceSchemaDdl } from 'src/database/commands/workspace-export/utils/generate-workspace-schema-ddl.util';
+
+describe('generateWorkspaceSchemaDdl', () => {
+ const workspaceId = '20202020-1c25-4d02-bf25-6aeccf7ea419';
+ const objectMetadataId = '20202020-object-id';
+ const nameFieldId = '20202020-name-field-id';
+ const searchVectorFieldId = '20202020-search-vector-field-id';
+
+ const objectMetadata = {
+ ...getFlatObjectMetadataMock({
+ universalIdentifier: 'person',
+ id: objectMetadataId,
+ nameSingular: 'person',
+ namePlural: 'persons',
+ }),
+ isActive: true,
+ } as unknown as ObjectMetadataEntity;
+
+ const nameField = getFlatFieldMetadataMock({
+ universalIdentifier: 'name',
+ id: nameFieldId,
+ objectMetadataId,
+ type: FieldMetadataType.TEXT,
+ name: 'name',
+ }) as unknown as FieldMetadataEntity;
+
+ const searchVectorField = getFlatFieldMetadataMock({
+ universalIdentifier: 'searchVector',
+ id: searchVectorFieldId,
+ objectMetadataId,
+ type: FieldMetadataType.TS_VECTOR,
+ name: 'searchVector',
+ }) as unknown as FieldMetadataEntity;
+
+ const fieldsByObjectId = new Map([
+ [objectMetadataId, [nameField, searchVectorField]],
+ ]);
+
+ const buildSearchFieldMetadata = (
+ overrides: Partial = {},
+ ): SearchFieldMetadataEntity =>
+ ({
+ universalIdentifier: 'search-name',
+ objectMetadataId,
+ fieldMetadataId: nameFieldId,
+ tsVectorFieldMetadataId: searchVectorFieldId,
+ position: 0,
+ ...overrides,
+ }) as SearchFieldMetadataEntity;
+
+ const generateSearchVectorColumnSql = (
+ searchFieldMetadatasByObjectId: Map,
+ ): string => {
+ const statements = generateWorkspaceSchemaDdl(
+ workspaceId,
+ 'workspace_schema',
+ [objectMetadata],
+ fieldsByObjectId,
+ searchFieldMetadatasByObjectId,
+ );
+
+ const createTableStatement = statements.find((statement) =>
+ statement.includes('"searchVector"'),
+ );
+
+ expect(createTableStatement).toBeDefined();
+
+ return createTableStatement as string;
+ };
+
+ it('should emit the searchVector column as a STORED generated column derived from searchFieldMetadata', () => {
+ const createTableStatement = generateSearchVectorColumnSql(
+ new Map([[objectMetadataId, [buildSearchFieldMetadata()]]]),
+ );
+
+ expect(createTableStatement).toContain(
+ `"searchVector" tsvector GENERATED ALWAYS AS (to_tsvector('simple', COALESCE(public.unaccent_immutable("name"), ''))) STORED`,
+ );
+ });
+
+ it('should tolerate a legacy NULL tsVectorFieldMetadataId row (pre-2.18 backfill)', () => {
+ const createTableStatement = generateSearchVectorColumnSql(
+ new Map([
+ [
+ objectMetadataId,
+ [
+ buildSearchFieldMetadata({
+ tsVectorFieldMetadataId: null as never,
+ }),
+ ],
+ ],
+ ]),
+ );
+
+ expect(createTableStatement).toContain(
+ `GENERATED ALWAYS AS (to_tsvector('simple', COALESCE(public.unaccent_immutable("name"), ''))) STORED`,
+ );
+ });
+
+ it('should still emit a valid STORED generated column when no searchFieldMetadata rows exist', () => {
+ const createTableStatement = generateSearchVectorColumnSql(new Map());
+
+ expect(createTableStatement).toContain(
+ `"searchVector" tsvector GENERATED ALWAYS AS (to_tsvector('simple', NULL)) STORED`,
+ );
+ });
+});
diff --git a/packages/twenty-server/src/database/commands/workspace-export/utils/generate-workspace-schema-ddl.util.ts b/packages/twenty-server/src/database/commands/workspace-export/utils/generate-workspace-schema-ddl.util.ts
index 96f804c38c..5d6eb18b3d 100644
--- a/packages/twenty-server/src/database/commands/workspace-export/utils/generate-workspace-schema-ddl.util.ts
+++ b/packages/twenty-server/src/database/commands/workspace-export/utils/generate-workspace-schema-ddl.util.ts
@@ -1,26 +1,82 @@
+import { FieldMetadataType } from 'twenty-shared/types';
+
import { type FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
+import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
+import { isFlatFieldMetadataOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util';
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
+import { type FlatSearchFieldMetadata } from 'src/engine/metadata-modules/flat-search-field-metadata/types/flat-search-field-metadata.type';
+import { deriveSearchVectorAsExpressionForTsVectorField } from 'src/engine/metadata-modules/flat-search-field-metadata/utils/derive-search-vector-as-expression-for-ts-vector-field.util';
import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
+import { SEARCH_VECTOR_FIELD } from 'src/engine/metadata-modules/search-field-metadata/constants/search-vector-field.constants';
+import { type SearchFieldMetadataEntity } from 'src/engine/metadata-modules/search-field-metadata/search-field-metadata.entity';
import { buildSqlColumnDefinition } from 'src/engine/twenty-orm/workspace-schema-manager/utils/build-sql-column-definition.util';
import { computeTableName } from 'src/engine/utils/compute-table-name.util';
+import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications';
import {
escapeIdentifier,
escapeLiteral,
} from 'src/engine/workspace-manager/workspace-migration/utils/remove-sql-injection.util';
import { generateColumnDefinitions } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/generate-column-definitions.util';
-import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications';
import {
type CreateEnumOperationSpec,
EnumOperation,
collectEnumOperationsForObject,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/workspace-schema-enum-operations.util';
+const buildSearchFieldMetadataDerivationInputs = ({
+ fieldMetadatas,
+ objectSearchFieldMetadatas,
+}: {
+ fieldMetadatas: FieldMetadataEntity[];
+ objectSearchFieldMetadatas: SearchFieldMetadataEntity[];
+}): {
+ indexedFieldById: ReadonlyMap<
+ string,
+ { name: string; type: FieldMetadataType }
+ >;
+ flatSearchFieldMetadataMaps: FlatEntityMaps;
+} => {
+ const indexedFieldById = new Map(
+ fieldMetadatas.map((fieldMetadata) => [
+ fieldMetadata.id,
+ { name: fieldMetadata.name, type: fieldMetadata.type },
+ ]),
+ );
+
+ const searchVectorFieldId = fieldMetadatas.find(
+ (fieldMetadata) =>
+ fieldMetadata.type === FieldMetadataType.TS_VECTOR &&
+ fieldMetadata.name === SEARCH_VECTOR_FIELD.name,
+ )?.id;
+
+ const byUniversalIdentifier = Object.fromEntries(
+ objectSearchFieldMetadatas.map((searchFieldMetadata) => [
+ searchFieldMetadata.universalIdentifier,
+ {
+ ...searchFieldMetadata,
+ tsVectorFieldMetadataId:
+ searchFieldMetadata.tsVectorFieldMetadataId ?? searchVectorFieldId,
+ } as unknown as FlatSearchFieldMetadata,
+ ]),
+ );
+
+ return {
+ indexedFieldById,
+ flatSearchFieldMetadataMaps: {
+ byUniversalIdentifier,
+ universalIdentifierById: {},
+ universalIdentifiersByApplicationId: {},
+ },
+ };
+};
+
export const generateWorkspaceSchemaDdl = (
workspaceId: string,
schemaName: string,
objectMetadatas: ObjectMetadataEntity[],
fieldsByObjectId: Map,
+ searchFieldMetadatasByObjectId: Map,
): string[] => {
const statements: string[] = [];
@@ -37,6 +93,13 @@ export const generateWorkspaceSchemaDdl = (
const flatFieldMetadatas = fieldMetadatas as unknown as FlatFieldMetadata[];
const flatObjectMetadata = objectMetadata as unknown as FlatObjectMetadata;
+ const { indexedFieldById, flatSearchFieldMetadataMaps } =
+ buildSearchFieldMetadataDerivationInputs({
+ fieldMetadatas,
+ objectSearchFieldMetadatas:
+ searchFieldMetadatasByObjectId.get(objectMetadata.id) ?? [],
+ });
+
const enumOperations = collectEnumOperationsForObject({
tableName,
operation: EnumOperation.CREATE,
@@ -57,6 +120,16 @@ export const generateWorkspaceSchemaDdl = (
flatFieldMetadata,
flatObjectMetadata,
workspaceId,
+ searchVectorAsExpression: isFlatFieldMetadataOfType(
+ flatFieldMetadata,
+ FieldMetadataType.TS_VECTOR,
+ )
+ ? deriveSearchVectorAsExpressionForTsVectorField({
+ tsVectorFieldMetadataId: flatFieldMetadata.id,
+ flatSearchFieldMetadataMaps,
+ indexedFieldById,
+ })
+ : undefined,
}),
);
diff --git a/packages/twenty-server/src/database/commands/workspace-export/workspace-export.module.ts b/packages/twenty-server/src/database/commands/workspace-export/workspace-export.module.ts
index 14b41af2b9..eda25e34a4 100644
--- a/packages/twenty-server/src/database/commands/workspace-export/workspace-export.module.ts
+++ b/packages/twenty-server/src/database/commands/workspace-export/workspace-export.module.ts
@@ -5,10 +5,15 @@ import { WorkspaceExportCommand } from 'src/database/commands/workspace-export/w
import { WorkspaceExportService } from 'src/database/commands/workspace-export/workspace-export.service';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
+import { SearchFieldMetadataEntity } from 'src/engine/metadata-modules/search-field-metadata/search-field-metadata.entity';
@Module({
imports: [
- TypeOrmModule.forFeature([ObjectMetadataEntity, FieldMetadataEntity]),
+ TypeOrmModule.forFeature([
+ ObjectMetadataEntity,
+ FieldMetadataEntity,
+ SearchFieldMetadataEntity,
+ ]),
],
providers: [WorkspaceExportCommand, WorkspaceExportService],
})
diff --git a/packages/twenty-server/src/database/commands/workspace-export/workspace-export.service.ts b/packages/twenty-server/src/database/commands/workspace-export/workspace-export.service.ts
index 85078c842b..13d4fdcdc5 100644
--- a/packages/twenty-server/src/database/commands/workspace-export/workspace-export.service.ts
+++ b/packages/twenty-server/src/database/commands/workspace-export/workspace-export.service.ts
@@ -11,20 +11,21 @@ import {
Repository,
} from 'typeorm';
-import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
-import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
-import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
-import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications';
-import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util';
-import { computeTableName } from 'src/engine/utils/compute-table-name.util';
-import { escapeIdentifier } from 'src/engine/workspace-manager/workspace-migration/utils/remove-sql-injection.util';
-import { getCoreEntityMetadatasWithWorkspaceId } from 'src/database/commands/workspace-export/utils/get-core-entity-metadatas-with-workspace-id.util';
-import { generateWorkspaceSchemaDdl } from 'src/database/commands/workspace-export/utils/generate-workspace-schema-ddl.util';
import { buildInsertPrefix } from 'src/database/commands/workspace-export/utils/build-insert-prefix.util';
import { buildWorkspaceTableColumnSets } from 'src/database/commands/workspace-export/utils/build-workspace-table-column-sets.util';
import { formatSqlValue } from 'src/database/commands/workspace-export/utils/format-sql-value.util';
-import { formatPgCopyField } from './utils/format-pg-copy-value.util';
+import { generateWorkspaceSchemaDdl } from 'src/database/commands/workspace-export/utils/generate-workspace-schema-ddl.util';
+import { getCoreEntityMetadatasWithWorkspaceId } from 'src/database/commands/workspace-export/utils/get-core-entity-metadatas-with-workspace-id.util';
+import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
+import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
+import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
+import { SearchFieldMetadataEntity } from 'src/engine/metadata-modules/search-field-metadata/search-field-metadata.entity';
+import { computeTableName } from 'src/engine/utils/compute-table-name.util';
+import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util';
+import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications';
+import { escapeIdentifier } from 'src/engine/workspace-manager/workspace-migration/utils/remove-sql-injection.util';
import { isNonEmptyArray } from 'twenty-shared/utils';
+import { formatPgCopyField } from './utils/format-pg-copy-value.util';
const BATCH_SIZE = 10_000;
@@ -57,6 +58,9 @@ export class WorkspaceExportService {
private readonly objectMetadataRepository: Repository,
@InjectRepository(FieldMetadataEntity)
private readonly fieldMetadataRepository: Repository,
+ // eslint-disable-next-line twenty/prefer-workspace-scoped-repository -- Ignored
+ @InjectRepository(SearchFieldMetadataEntity)
+ private readonly searchFieldMetadataRepository: Repository,
) {}
async exportWorkspace({
@@ -95,6 +99,28 @@ export class WorkspaceExportService {
fieldsByObjectId.set(fieldMetadata.objectMetadataId, objectFields);
}
+ const searchFieldMetadatas = await this.searchFieldMetadataRepository.find({
+ where: { workspaceId },
+ });
+
+ const searchFieldMetadatasByObjectId = new Map<
+ string,
+ SearchFieldMetadataEntity[]
+ >();
+
+ for (const searchFieldMetadata of searchFieldMetadatas) {
+ const objectSearchFieldMetadatas =
+ searchFieldMetadatasByObjectId.get(
+ searchFieldMetadata.objectMetadataId,
+ ) ?? [];
+
+ objectSearchFieldMetadatas.push(searchFieldMetadata);
+ searchFieldMetadatasByObjectId.set(
+ searchFieldMetadata.objectMetadataId,
+ objectSearchFieldMetadatas,
+ );
+ }
+
mkdirSync(outputPath, { recursive: true });
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
@@ -117,6 +143,7 @@ export class WorkspaceExportService {
schemaName,
objectMetadatas,
fieldsByObjectId,
+ searchFieldMetadatasByObjectId,
stream,
);
@@ -327,6 +354,7 @@ export class WorkspaceExportService {
schemaName: string,
objectMetadatas: ObjectMetadataEntity[],
fieldsByObjectId: Map,
+ searchFieldMetadatasByObjectId: Map,
stream: WriteStream,
): void {
this.logger.log('Generating workspace schema DDL from metadata...');
@@ -336,6 +364,7 @@ export class WorkspaceExportService {
schemaName,
objectMetadatas,
fieldsByObjectId,
+ searchFieldMetadatasByObjectId,
);
this.logger.log(` ${ddlStatements.length} DDL statements`);
diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-field-manifest-to-universal-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-field-manifest-to-universal-flat-field-metadata.util.ts
index a1b6b877e6..f18c97cf73 100644
--- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-field-manifest-to-universal-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-field-manifest-to-universal-flat-field-metadata.util.ts
@@ -114,6 +114,7 @@ export const fromFieldManifestToUniversalFlatFieldMetadata = ({
calendarViewUniversalIdentifiers: [],
mainGroupByFieldMetadataViewUniversalIdentifiers: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataUniversalIdentifiers: [],
createdAt: now,
updatedAt: now,
};
diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/services/compute-application-manifest-all-universal-flat-entity-maps.service.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/services/compute-application-manifest-all-universal-flat-entity-maps.service.ts
index 123ba1cbde..abdb91758f 100644
--- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/services/compute-application-manifest-all-universal-flat-entity-maps.service.ts
+++ b/packages/twenty-server/src/engine/core-modules/application/application-manifest/services/compute-application-manifest-all-universal-flat-entity-maps.service.ts
@@ -2,7 +2,6 @@ import { Injectable } from '@nestjs/common';
import { type Manifest } from 'twenty-shared/application';
import { MAX_CUSTOM_INDEXES_PER_OBJECT } from 'twenty-shared/constants';
-import { FieldMetadataType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { fromApplicationVariableManifestToUniversalFlatApplicationVariable } from 'src/engine/core-modules/application/application-manifest/converters/from-application-variable-manifest-to-universal-flat-application-variable.util';
@@ -25,7 +24,6 @@ import { fromRoleManifestToUniversalFlatRole } from 'src/engine/core-modules/app
import { fromRowLevelPermissionPredicateGroupManifestToUniversalFlatRowLevelPermissionPredicateGroup } from 'src/engine/core-modules/application/application-manifest/converters/from-row-level-permission-predicate-group-manifest-to-universal-flat-row-level-permission-predicate-group.util';
import { fromRowLevelPermissionPredicateManifestToUniversalFlatRowLevelPermissionPredicate } from 'src/engine/core-modules/application/application-manifest/converters/from-row-level-permission-predicate-manifest-to-universal-flat-row-level-permission-predicate.util';
import { fromSkillManifestToUniversalFlatSkill } from 'src/engine/core-modules/application/application-manifest/converters/from-skill-manifest-to-universal-flat-skill.util';
-import { computeSearchVectorUniversalSettingsFromObjectManifest } from 'src/engine/core-modules/application/application-manifest/utils/compute-search-vector-universal-settings-from-object-manifest.util';
import { fromViewFieldGroupManifestToUniversalFlatViewFieldGroup } from 'src/engine/core-modules/application/application-manifest/converters/from-view-field-group-manifest-to-universal-flat-view-field-group.util';
import { fromViewFieldManifestToUniversalFlatViewField } from 'src/engine/core-modules/application/application-manifest/converters/from-view-field-manifest-to-universal-flat-view-field.util';
import { fromViewFilterGroupManifestToUniversalFlatViewFilterGroup } from 'src/engine/core-modules/application/application-manifest/converters/from-view-filter-group-manifest-to-universal-flat-view-filter-group.util';
@@ -95,21 +93,10 @@ export class ComputeApplicationManifestAllUniversalFlatEntityMapsService {
});
for (const fieldManifest of objectManifest.fields) {
- const enrichedFieldManifest =
- fieldManifest.type === FieldMetadataType.TS_VECTOR &&
- !isDefined(fieldManifest.universalSettings)
- ? {
- ...fieldManifest,
- objectUniversalIdentifier: objectManifest.universalIdentifier,
- universalSettings:
- computeSearchVectorUniversalSettingsFromObjectManifest({
- objectManifest,
- }),
- }
- : {
- ...fieldManifest,
- objectUniversalIdentifier: objectManifest.universalIdentifier,
- };
+ const enrichedFieldManifest = {
+ ...fieldManifest,
+ objectUniversalIdentifier: objectManifest.universalIdentifier,
+ };
const flatFieldMetadata = fromFieldManifestToUniversalFlatFieldMetadata(
{
diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/utils/__tests__/compute-search-vector-universal-settings-from-object-manifest.util.spec.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/utils/__tests__/compute-search-vector-universal-settings-from-object-manifest.util.spec.ts
deleted file mode 100644
index 66bcb2ad11..0000000000
--- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/utils/__tests__/compute-search-vector-universal-settings-from-object-manifest.util.spec.ts
+++ /dev/null
@@ -1,149 +0,0 @@
-import { type ObjectManifest } from 'twenty-shared/application';
-import { FieldMetadataType } from 'twenty-shared/types';
-
-import { computeSearchVectorUniversalSettingsFromObjectManifest } from 'src/engine/core-modules/application/application-manifest/utils/compute-search-vector-universal-settings-from-object-manifest.util';
-
-const buildObjectManifest = (
- overrides: Partial & {
- fields: ObjectManifest['fields'];
- labelIdentifierFieldMetadataUniversalIdentifier: string;
- },
-): ObjectManifest => ({
- universalIdentifier: 'obj-uuid-1',
- nameSingular: 'testObject',
- namePlural: 'testObjects',
- labelSingular: 'Test Object',
- labelPlural: 'Test Objects',
- ...overrides,
-});
-
-describe('computeSearchVectorUniversalSettingsFromObjectManifest', () => {
- it('should return asExpression and generatedType for a TEXT label identifier field', () => {
- const result = computeSearchVectorUniversalSettingsFromObjectManifest({
- objectManifest: buildObjectManifest({
- labelIdentifierFieldMetadataUniversalIdentifier: 'field-uuid-name',
- fields: [
- {
- universalIdentifier: 'field-uuid-name',
- name: 'name',
- label: 'Name',
- type: FieldMetadataType.TEXT,
- },
- ],
- }),
- });
-
- expect(result?.generatedType).toBe('STORED');
- expect(result?.asExpression).toContain("to_tsvector('simple'");
- expect(result?.asExpression).toContain('"name"');
- });
-
- it('should return asExpression for a FULL_NAME label identifier field', () => {
- const result = computeSearchVectorUniversalSettingsFromObjectManifest({
- objectManifest: buildObjectManifest({
- labelIdentifierFieldMetadataUniversalIdentifier: 'field-uuid-name',
- fields: [
- {
- universalIdentifier: 'field-uuid-name',
- name: 'name',
- label: 'Name',
- type: FieldMetadataType.FULL_NAME,
- },
- ],
- }),
- });
-
- expect(result?.generatedType).toBe('STORED');
- expect(result?.asExpression).toContain("to_tsvector('simple'");
- expect(result?.asExpression).toContain('"nameFirstName"');
- expect(result?.asExpression).toContain('"nameLastName"');
- });
-
- it('should return asExpression for an EMAILS label identifier field', () => {
- const result = computeSearchVectorUniversalSettingsFromObjectManifest({
- objectManifest: buildObjectManifest({
- labelIdentifierFieldMetadataUniversalIdentifier: 'field-uuid-email',
- fields: [
- {
- universalIdentifier: 'field-uuid-email',
- name: 'email',
- label: 'Email',
- type: FieldMetadataType.EMAILS,
- },
- ],
- }),
- });
-
- expect(result?.generatedType).toBe('STORED');
- expect(result?.asExpression).toContain("to_tsvector('simple'");
- expect(result?.asExpression).toContain('"emailPrimaryEmail"');
- });
-
- it('should return asExpression for a UUID label identifier field', () => {
- const result = computeSearchVectorUniversalSettingsFromObjectManifest({
- objectManifest: buildObjectManifest({
- labelIdentifierFieldMetadataUniversalIdentifier: 'field-uuid-id',
- fields: [
- {
- universalIdentifier: 'field-uuid-id',
- name: 'externalId',
- label: 'External ID',
- type: FieldMetadataType.UUID,
- },
- ],
- }),
- });
-
- expect(result?.generatedType).toBe('STORED');
- expect(result?.asExpression).toContain("to_tsvector('simple'");
- expect(result?.asExpression).toContain('"externalId"');
- });
-
- it('should return null when label identifier field is not found in fields', () => {
- const result = computeSearchVectorUniversalSettingsFromObjectManifest({
- objectManifest: buildObjectManifest({
- labelIdentifierFieldMetadataUniversalIdentifier:
- 'non-existent-field-uuid',
- fields: [
- {
- universalIdentifier: 'field-uuid-name',
- name: 'name',
- label: 'Name',
- type: FieldMetadataType.TEXT,
- },
- ],
- }),
- });
-
- expect(result).toBeNull();
- });
-
- it('should return null when label identifier field has a non-searchable type', () => {
- const result = computeSearchVectorUniversalSettingsFromObjectManifest({
- objectManifest: buildObjectManifest({
- labelIdentifierFieldMetadataUniversalIdentifier: 'field-uuid-number',
- fields: [
- {
- universalIdentifier: 'field-uuid-number',
- name: 'amount',
- label: 'Amount',
- type: FieldMetadataType.NUMBER,
- },
- ],
- }),
- });
-
- expect(result).toBeNull();
- });
-
- it('should return null when fields array is empty', () => {
- const result = computeSearchVectorUniversalSettingsFromObjectManifest({
- objectManifest: buildObjectManifest({
- labelIdentifierFieldMetadataUniversalIdentifier: 'field-uuid-name',
- fields: [],
- }),
- });
-
- expect(result).toBeNull();
- });
-});
diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/utils/compute-search-vector-universal-settings-from-object-manifest.util.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/utils/compute-search-vector-universal-settings-from-object-manifest.util.ts
deleted file mode 100644
index 6354b9a745..0000000000
--- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/utils/compute-search-vector-universal-settings-from-object-manifest.util.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { type ObjectManifest } from 'twenty-shared/application';
-import {
- type FieldMetadataUniversalSettings,
- FieldMetadataType,
-} from 'twenty-shared/types';
-
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { isDefined, isSearchableFieldType } from 'twenty-shared/utils';
-
-export const computeSearchVectorUniversalSettingsFromObjectManifest = ({
- objectManifest,
-}: {
- objectManifest: ObjectManifest;
-}): FieldMetadataUniversalSettings => {
- const labelIdentifierField = objectManifest.fields.find(
- (field) =>
- field.universalIdentifier ===
- objectManifest.labelIdentifierFieldMetadataUniversalIdentifier,
- );
-
- if (
- !isDefined(labelIdentifierField) ||
- !isSearchableFieldType(labelIdentifierField.type)
- ) {
- return null;
- }
-
- return {
- asExpression: getTsVectorColumnExpressionFromFields([
- {
- name: labelIdentifierField.name,
- type: labelIdentifierField.type,
- },
- ]),
- generatedType: 'STORED',
- };
-};
diff --git a/packages/twenty-server/src/engine/dataloaders/dataloader.interface.ts b/packages/twenty-server/src/engine/dataloaders/dataloader.interface.ts
index e79094ae21..8290e5143b 100644
--- a/packages/twenty-server/src/engine/dataloaders/dataloader.interface.ts
+++ b/packages/twenty-server/src/engine/dataloaders/dataloader.interface.ts
@@ -5,6 +5,7 @@ import {
type FieldMetadataLoaderPayload,
type IndexFieldMetadataLoaderPayload,
type IndexMetadataLoaderPayload,
+ type SearchFieldMetadataLoaderPayload,
type IsConfiguredLoaderPayload,
type MorphRelationLoaderPayload,
type StandardApplicationIdLoaderPayload,
@@ -23,6 +24,7 @@ import { type RelationDTO } from 'src/engine/metadata-modules/field-metadata/dto
import { type IndexFieldMetadataDTO } from 'src/engine/metadata-modules/index-metadata/dtos/index-field-metadata.dto';
import { type IndexMetadataDTO } from 'src/engine/metadata-modules/index-metadata/dtos/index-metadata.dto';
import { type ObjectMetadataDTO } from 'src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto';
+import { type SearchFieldMetadataDTO } from 'src/engine/metadata-modules/search-field-metadata/dtos/search-field-metadata.dto';
import { type ViewFieldGroupDTO } from 'src/engine/metadata-modules/view-field-group/dtos/view-field-group.dto';
import { type ViewFieldDTO } from 'src/engine/metadata-modules/view-field/dtos/view-field.dto';
import { type ViewFilterGroupDTO } from 'src/engine/metadata-modules/view-filter-group/dtos/view-filter-group.dto';
@@ -53,6 +55,11 @@ export interface IDataloaders {
IndexFieldMetadataDTO[]
>;
+ searchFieldMetadataLoader: DataLoader<
+ SearchFieldMetadataLoaderPayload,
+ SearchFieldMetadataDTO[]
+ >;
+
objectMetadataLoader: DataLoader<
ObjectMetadataLoaderPayload,
ObjectMetadataDTO | null
diff --git a/packages/twenty-server/src/engine/dataloaders/dataloader.service.ts b/packages/twenty-server/src/engine/dataloaders/dataloader.service.ts
index 268e46197e..495daedb5b 100644
--- a/packages/twenty-server/src/engine/dataloaders/dataloader.service.ts
+++ b/packages/twenty-server/src/engine/dataloaders/dataloader.service.ts
@@ -31,6 +31,7 @@ import { resolveMorphRelationsFromFlatFieldMetadata } from 'src/engine/metadata-
import { resolveRelationFromFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/resolve-relation-from-flat-field-metadata.util';
import { fromFlatObjectMetadataToObjectMetadataDto } from 'src/engine/metadata-modules/flat-object-metadata/utils/from-flat-object-metadata-to-object-metadata-dto.util';
import { getMorphNameFromMorphFieldMetadataName } from 'src/engine/metadata-modules/flat-object-metadata/utils/get-morph-name-from-morph-field-metadata-name.util';
+import { fromFlatSearchFieldMetadataToSearchFieldMetadataDto } from 'src/engine/metadata-modules/flat-search-field-metadata/utils/from-flat-search-field-metadata-to-search-field-metadata-dto.util';
import { fromFlatViewFieldGroupToViewFieldGroupDto } from 'src/engine/metadata-modules/view-field-group/utils/from-flat-view-field-group-to-view-field-group-dto.util';
import { fromFlatViewFieldToViewFieldDto } from 'src/engine/metadata-modules/view-field/utils/from-flat-view-field-to-view-field-dto.util';
import { fromFlatViewFilterToViewFilterDto } from 'src/engine/metadata-modules/view-filter/utils/from-flat-view-filter-to-view-filter-dto.util';
@@ -41,6 +42,7 @@ import { type IndexFieldMetadataDTO } from 'src/engine/metadata-modules/index-me
import { type IndexMetadataDTO } from 'src/engine/metadata-modules/index-metadata/dtos/index-metadata.dto';
import { ObjectMetadataDTO } from 'src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto';
import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
+import { type SearchFieldMetadataDTO } from 'src/engine/metadata-modules/search-field-metadata/dtos/search-field-metadata.dto';
export type RelationMetadataLoaderPayload = {
workspaceId: string;
@@ -76,6 +78,11 @@ export type IndexFieldMetadataLoaderPayload = {
indexMetadata: Pick;
};
+export type SearchFieldMetadataLoaderPayload = {
+ workspaceId: string;
+ objectMetadata: Pick;
+};
+
export type ObjectMetadataLoaderPayload = {
workspaceId: string;
objectMetadataId: string;
@@ -145,6 +152,7 @@ export class DataloaderService {
const fieldMetadataLoader = this.createFieldMetadataLoader();
const indexMetadataLoader = this.createIndexMetadataLoader();
const indexFieldMetadataLoader = this.createIndexFieldMetadataLoader();
+ const searchFieldMetadataLoader = this.createSearchFieldMetadataLoader();
const objectMetadataLoader = this.createObjectMetadataLoader();
const viewFieldGroupsByViewIdLoader =
this.createViewFieldGroupsByViewIdLoader();
@@ -168,6 +176,7 @@ export class DataloaderService {
fieldMetadataLoader,
indexMetadataLoader,
indexFieldMetadataLoader,
+ searchFieldMetadataLoader,
objectMetadataLoader,
viewFieldGroupsByViewIdLoader,
viewFieldsByViewFieldGroupIdLoader,
@@ -306,6 +315,46 @@ export class DataloaderService {
);
}
+ private createSearchFieldMetadataLoader() {
+ return new DataLoader<
+ SearchFieldMetadataLoaderPayload,
+ SearchFieldMetadataDTO[]
+ >(async (dataLoaderParams: SearchFieldMetadataLoaderPayload[]) => {
+ const workspaceId = dataLoaderParams[0].workspaceId;
+ const objectMetadataIds = dataLoaderParams.map(
+ (dataLoaderParam) => dataLoaderParam.objectMetadata.id,
+ );
+
+ const { flatSearchFieldMetadataMaps, flatObjectMetadataMaps } =
+ await this.flatEntityMapsCacheService.getOrRecomputeManyOrAllFlatEntityMaps(
+ {
+ workspaceId,
+ flatMapsKeys: [
+ 'flatSearchFieldMetadataMaps',
+ 'flatObjectMetadataMaps',
+ ],
+ },
+ );
+
+ return objectMetadataIds.map((objectMetadataId) => {
+ const flatObjectMetadata = findFlatEntityByIdInFlatEntityMapsOrThrow({
+ flatEntityId: objectMetadataId,
+ flatEntityMaps: flatObjectMetadataMaps,
+ });
+
+ const searchFieldMetadatas =
+ findManyFlatEntityByIdInFlatEntityMapsOrThrow({
+ flatEntityIds: flatObjectMetadata.searchFieldMetadataIds,
+ flatEntityMaps: flatSearchFieldMetadataMaps,
+ });
+
+ return searchFieldMetadatas.map(
+ fromFlatSearchFieldMetadataToSearchFieldMetadataDto,
+ );
+ });
+ });
+ }
+
private createFieldMetadataLoader() {
return new DataLoader(
async (dataLoaderParams: FieldMetadataLoaderPayload[]) => {
diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts
index 45b1a069f3..7a735ddc53 100644
--- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts
@@ -30,6 +30,7 @@ import { AssignTypeIfIsMorphOrRelationFieldMetadataType } from 'src/engine/metad
import { IndexFieldMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-field-metadata.entity';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { FieldPermissionEntity } from 'src/engine/metadata-modules/object-permission/field-permission/field-permission.entity';
+import { SearchFieldMetadataEntity } from 'src/engine/metadata-modules/search-field-metadata/search-field-metadata.entity';
import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity';
import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity';
import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity';
@@ -238,4 +239,10 @@ export class FieldMetadataEntity<
@OneToMany(() => ViewSortEntity, (viewSort) => viewSort.fieldMetadata)
viewSorts: Relation;
+
+ @OneToMany(
+ () => SearchFieldMetadataEntity,
+ (searchFieldMetadata) => searchFieldMetadata.fieldMetadata,
+ )
+ searchFieldMetadatas: Relation;
}
diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts
index 60454fdce7..4b147bc02e 100644
--- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts
@@ -16,7 +16,6 @@ import {
FieldMetadataExceptionCode,
} from 'src/engine/metadata-modules/field-metadata/field-metadata.exception';
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
-import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
import { findFlatEntityByUniversalIdentifierOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier-or-throw.util';
import { findFlatEntityByUniversalIdentifier } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier.util';
import { findManyFlatEntityByUniversalIdentifierInUniversalFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-universal-identifier-in-universal-flat-entity-maps-or-throw.util';
@@ -114,7 +113,6 @@ export class FieldMetadataService extends TypeOrmQueryService
>,
@@ -43,6 +45,7 @@ type Assertions = [
| 'calendarViews'
| 'mainGroupByFieldMetadataViews'
| 'viewSorts'
+ | 'searchFieldMetadatas'
>
>,
];
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/__tests__/extract-entity-related-entity-properties.type-test.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/__tests__/extract-entity-related-entity-properties.type-test.ts
index af3a029bf1..ef1dd4dd48 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/__tests__/extract-entity-related-entity-properties.type-test.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/__tests__/extract-entity-related-entity-properties.type-test.ts
@@ -10,7 +10,7 @@ type FieldMetadataRelatedProperties =
type Assertions = [
// FieldMetadataEntity has both ManyToOne and OneToMany relations
// ManyToOne: object, workspace, application, relationTargetFieldMetadata, relationTargetObjectMetadata
- // OneToMany: indexFieldMetadatas, fieldPermissions, viewFields, viewFilters, kanbanAggregateOperationViews, calendarViews, mainGroupByFieldMetadataViews, viewSorts
+ // OneToMany: indexFieldMetadatas, fieldPermissions, viewFields, viewFilters, kanbanAggregateOperationViews, calendarViews, mainGroupByFieldMetadataViews, viewSorts, searchFieldMetadatas
Expect<
Equal<
FieldMetadataRelatedProperties,
@@ -27,6 +27,7 @@ type Assertions = [
| 'calendarViews'
| 'mainGroupByFieldMetadataViews'
| 'viewSorts'
+ | 'searchFieldMetadatas'
>
>,
];
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/__tests__/__snapshots__/get-metadata-related-metadata-names.util.spec.ts.snap b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/__tests__/__snapshots__/get-metadata-related-metadata-names.util.spec.ts.snap
index 8da7ded374..8e94550d7e 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/__tests__/__snapshots__/get-metadata-related-metadata-names.util.spec.ts.snap
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/__tests__/__snapshots__/get-metadata-related-metadata-names.util.spec.ts.snap
@@ -23,6 +23,7 @@ exports[`getMetadataRelatedMetadataNames should return related metadata names fo
"viewField",
"viewFilter",
"view",
+ "searchFieldMetadata",
]
`;
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/__tests__/__snapshots__/sort-metadata-names-children-first.util.spec.ts.snap b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/__tests__/__snapshots__/sort-metadata-names-children-first.util.spec.ts.snap
index c9a96a1c58..ffda9ae514 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/__tests__/__snapshots__/sort-metadata-names-children-first.util.spec.ts.snap
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/__tests__/__snapshots__/sort-metadata-names-children-first.util.spec.ts.snap
@@ -7,11 +7,11 @@ exports[`sortMetadataNamesChildrenFirst should return metadata names sorted with
"viewFilter",
"commandMenuItem",
"fieldPermission",
+ "searchFieldMetadata",
"viewField",
"objectPermission",
"pageLayoutWidget",
"rolePermissionFlag",
- "searchFieldMetadata",
"viewSort",
"index",
"pageLayout",
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-and-related-entity-maps-through-mutation-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-and-related-entity-maps-through-mutation-or-throw.util.ts
index 9475eb6659..0291e9a643 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-and-related-entity-maps-through-mutation-or-throw.util.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-and-related-entity-maps-through-mutation-or-throw.util.ts
@@ -12,6 +12,7 @@ import { type MetadataFlatEntity } from 'src/engine/metadata-modules/flat-entity
import { type MetadataRelatedFlatEntityMapsKeys } from 'src/engine/metadata-modules/flat-entity/types/metadata-related-flat-entity-maps-keys.type';
import { type MetadataFlatEntityAndRelatedFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/metadata-related-types.type';
import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
+import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
import { getMetadataFlatEntityMapsKey } from 'src/engine/metadata-modules/flat-entity/utils/get-metadata-flat-entity-maps-key.util';
import { addUniversalFlatEntityToUniversalFlatEntityAndRelatedEntityMapsThroughMutationOrThrow } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/add-universal-flat-entity-to-universal-flat-entity-and-related-entity-maps-through-mutation-or-throw.util';
import { replaceFlatEntityInFlatEntityMapsThroughMutationOrThrow } from 'src/engine/workspace-manager/workspace-migration/utils/replace-flat-entity-in-flat-entity-maps-through-mutation-or-throw.util';
@@ -22,6 +23,7 @@ type AddFlatEntityToFlatEntityAndRelatedEntityMapsThroughMutationOrThrowArgs<
metadataName: T;
flatEntity: MetadataFlatEntity;
flatEntityAndRelatedMapsToMutate: MetadataFlatEntityAndRelatedFlatEntityMaps;
+ skipMissingRelatedEntities?: boolean;
};
export const addFlatEntityToFlatEntityAndRelatedEntityMapsThroughMutationOrThrow =
@@ -29,6 +31,7 @@ export const addFlatEntityToFlatEntityAndRelatedEntityMapsThroughMutationOrThrow
metadataName,
flatEntity,
flatEntityAndRelatedMapsToMutate,
+ skipMissingRelatedEntities = false,
}: AddFlatEntityToFlatEntityAndRelatedEntityMapsThroughMutationOrThrowArgs) => {
addUniversalFlatEntityToUniversalFlatEntityAndRelatedEntityMapsThroughMutationOrThrow(
{
@@ -36,6 +39,7 @@ export const addFlatEntityToFlatEntityAndRelatedEntityMapsThroughMutationOrThrow
universalFlatEntity: flatEntity,
universalFlatEntityAndRelatedMapsToMutate:
flatEntityAndRelatedMapsToMutate,
+ skipMissingRelatedEntities,
},
);
@@ -101,6 +105,17 @@ export const addFlatEntityToFlatEntityAndRelatedEntityMapsThroughMutationOrThrow
continue;
}
+ if (skipMissingRelatedEntities) {
+ const maybeRelatedFlatEntity = findFlatEntityByIdInFlatEntityMaps({
+ flatEntityId: flatEntityRelatedEntityForeignKeyValue,
+ flatEntityMaps: relatedFlatEntityMetadataMaps,
+ });
+
+ if (!isDefined(maybeRelatedFlatEntity)) {
+ continue;
+ }
+ }
+
const relatedFlatEntity = findFlatEntityByIdInFlatEntityMapsOrThrow({
flatEntityId: flatEntityRelatedEntityForeignKeyValue,
flatEntityMaps: relatedFlatEntityMetadataMaps,
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock.ts
index d5c5156176..0c761b42a3 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock.ts
@@ -57,6 +57,8 @@ export const getFlatFieldMetadataMock = (
mainGroupByFieldMetadataViewUniversalIdentifiers: [],
viewSortIds: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataIds: [],
+ searchFieldMetadataUniversalIdentifiers: [],
universalSettings: null,
...overrides,
};
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-morph-or-relation-target-flat-field-metadata-mock.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-morph-or-relation-target-flat-field-metadata-mock.ts
index f2f640ffe0..6b784b1164 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-morph-or-relation-target-flat-field-metadata-mock.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-morph-or-relation-target-flat-field-metadata-mock.ts
@@ -77,6 +77,8 @@ export const getRelationTargetFlatFieldMetadataMock = ({
mainGroupByFieldMetadataViewUniversalIdentifiers: [],
viewSortIds: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataIds: [],
+ searchFieldMetadataUniversalIdentifiers: [],
universalSettings: settings,
};
};
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/__snapshots__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts.snap b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/__snapshots__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts.snap
index 231e563869..3edb98de37 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/__snapshots__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts.snap
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/__snapshots__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts.snap
@@ -139,6 +139,7 @@ exports[`fromCreateFieldInputToFlatFieldMetadatasToCreate MORPH_RELATION test su
"options": null,
"relationTargetFieldMetadataUniversalIdentifier": Any,
"relationTargetObjectMetadataUniversalIdentifier": Any,
+ "searchFieldMetadataUniversalIdentifiers": [],
"standardOverrides": null,
"type": "MORPH_RELATION",
"universalIdentifier": Any,
@@ -174,6 +175,7 @@ exports[`fromCreateFieldInputToFlatFieldMetadatasToCreate MORPH_RELATION test su
"options": null,
"relationTargetFieldMetadataUniversalIdentifier": Any,
"relationTargetObjectMetadataUniversalIdentifier": Any,
+ "searchFieldMetadataUniversalIdentifiers": [],
"standardOverrides": null,
"type": "RELATION",
"universalIdentifier": Any,
@@ -211,6 +213,7 @@ exports[`fromCreateFieldInputToFlatFieldMetadatasToCreate MORPH_RELATION test su
"options": null,
"relationTargetFieldMetadataUniversalIdentifier": Any,
"relationTargetObjectMetadataUniversalIdentifier": Any,
+ "searchFieldMetadataUniversalIdentifiers": [],
"standardOverrides": null,
"type": "MORPH_RELATION",
"universalIdentifier": Any,
@@ -246,6 +249,7 @@ exports[`fromCreateFieldInputToFlatFieldMetadatasToCreate MORPH_RELATION test su
"options": null,
"relationTargetFieldMetadataUniversalIdentifier": Any,
"relationTargetObjectMetadataUniversalIdentifier": Any,
+ "searchFieldMetadataUniversalIdentifiers": [],
"standardOverrides": null,
"type": "RELATION",
"universalIdentifier": Any,
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/workspace-flat-field-metadata-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/workspace-flat-field-metadata-map-cache.service.ts
index dadff176d8..94e82c7fe2 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/workspace-flat-field-metadata-map-cache.service.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/workspace-flat-field-metadata-map-cache.service.ts
@@ -14,6 +14,7 @@ import { fromFieldMetadataEntityToFlatFieldMetadata } from 'src/engine/metadata-
import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity';
import { computeUniqueFieldMetadataIdsFromIndexEntities } from 'src/engine/metadata-modules/index-metadata/utils/compute-unique-field-metadata-ids-from-index-entities.util';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
+import { SearchFieldMetadataEntity } from 'src/engine/metadata-modules/search-field-metadata/search-field-metadata.entity';
import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity';
import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity';
import { ViewGroupEntity } from 'src/engine/metadata-modules/view-group/entities/view-group.entity';
@@ -50,6 +51,8 @@ export class WorkspaceFlatFieldMetadataMapCacheService extends WorkspaceCachePro
private readonly viewSortRepository: WorkspaceScopedRepository,
@InjectWorkspaceScopedRepository(ViewEntity)
private readonly viewRepository: WorkspaceScopedRepository,
+ @InjectWorkspaceScopedRepository(SearchFieldMetadataEntity)
+ private readonly searchFieldMetadataRepository: WorkspaceScopedRepository,
) {
super();
}
@@ -66,6 +69,7 @@ export class WorkspaceFlatFieldMetadataMapCacheService extends WorkspaceCachePro
viewFilters,
viewSorts,
views,
+ searchFieldMetadatas,
] = await Promise.all([
this.fieldMetadataRepository.find({
where: { workspaceId },
@@ -108,6 +112,9 @@ export class WorkspaceFlatFieldMetadataMapCacheService extends WorkspaceCachePro
],
withDeleted: true,
}),
+ this.searchFieldMetadataRepository.find(workspaceId, {
+ select: ['id', 'universalIdentifier', 'fieldMetadataId'],
+ }),
]);
const [
@@ -117,6 +124,7 @@ export class WorkspaceFlatFieldMetadataMapCacheService extends WorkspaceCachePro
kanbanViewsByFieldId,
mainGroupByFieldMetadataViewsByFieldId,
viewSortsByFieldId,
+ searchFieldMetadatasByFieldId,
] = (
[
{
@@ -143,6 +151,10 @@ export class WorkspaceFlatFieldMetadataMapCacheService extends WorkspaceCachePro
entities: viewSorts,
foreignKey: 'fieldMetadataId',
},
+ {
+ entities: searchFieldMetadatas,
+ foreignKey: 'fieldMetadataId',
+ },
] as const
).map(regroupEntitiesByRelatedEntityId);
@@ -173,6 +185,8 @@ export class WorkspaceFlatFieldMetadataMapCacheService extends WorkspaceCachePro
fieldMetadataEntity.id,
) || [],
viewSorts: viewSortsByFieldId.get(fieldMetadataEntity.id) || [],
+ searchFieldMetadatas:
+ searchFieldMetadatasByFieldId.get(fieldMetadataEntity.id) || [],
},
fieldMetadataIdToUniversalIdentifierMap,
objectMetadataIdToUniversalIdentifierMap,
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compute-search-field-metadata-deletion-for-deleted-fields.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compute-search-field-metadata-deletion-for-deleted-fields.util.ts
index eba5d0722d..19bbedb87c 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compute-search-field-metadata-deletion-for-deleted-fields.util.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compute-search-field-metadata-deletion-for-deleted-fields.util.ts
@@ -1,29 +1,23 @@
-import { type FieldMetadataType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type';
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
-import { recomputeSearchVectorFieldFromSearchFieldMetadatas } from 'src/engine/metadata-modules/flat-object-metadata/utils/recompute-search-vector-field-from-search-field-metadatas.util';
import { type FlatSearchFieldMetadata } from 'src/engine/metadata-modules/flat-search-field-metadata/types/flat-search-field-metadata.type';
import { type UniversalFlatSearchFieldMetadata } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-search-field-metadata.type';
export const computeSearchFieldMetadataDeletionForDeletedFields = ({
flatFieldMetadatasToDelete,
flatObjectMetadataMaps,
- flatFieldMetadataMaps,
flatSearchFieldMetadataMaps,
}: {
flatFieldMetadatasToDelete: FlatFieldMetadata[];
} & Pick<
AllFlatEntityMaps,
- | 'flatObjectMetadataMaps'
- | 'flatFieldMetadataMaps'
- | 'flatSearchFieldMetadataMaps'
+ 'flatObjectMetadataMaps' | 'flatSearchFieldMetadataMaps'
>): {
searchFieldMetadatasToDelete: UniversalFlatSearchFieldMetadata[];
- flatSearchVectorFieldsToUpdate: FlatFieldMetadata[];
} => {
const deletedFieldIds = new Set(
flatFieldMetadatasToDelete.map((flatFieldMetadata) => flatFieldMetadata.id),
@@ -35,8 +29,6 @@ export const computeSearchFieldMetadataDeletionForDeletedFields = ({
);
const searchFieldMetadatasToDelete: UniversalFlatSearchFieldMetadata[] = [];
- const flatSearchVectorFieldsToUpdate: FlatFieldMetadata[] =
- [];
for (const objectMetadataId of affectedObjectMetadataIds) {
const flatObjectMetadata = findFlatEntityByIdInFlatEntityMaps({
@@ -59,31 +51,10 @@ export const computeSearchFieldMetadataDeletionForDeletedFields = ({
deletedFieldIds.has(searchFieldMetadata.fieldMetadataId),
);
- if (rowsToDelete.length === 0) {
- continue;
- }
-
searchFieldMetadatasToDelete.push(...rowsToDelete);
-
- const remainingSearchFieldMetadatas = objectSearchFieldMetadatas.filter(
- (searchFieldMetadata) =>
- !deletedFieldIds.has(searchFieldMetadata.fieldMetadataId),
- );
-
- const flatSearchVectorFieldToUpdate =
- recomputeSearchVectorFieldFromSearchFieldMetadatas({
- flatObjectMetadata,
- flatFieldMetadataMaps,
- searchFieldMetadatas: remainingSearchFieldMetadatas,
- });
-
- if (isDefined(flatSearchVectorFieldToUpdate)) {
- flatSearchVectorFieldsToUpdate.push(flatSearchVectorFieldToUpdate);
- }
}
return {
searchFieldMetadatasToDelete,
- flatSearchVectorFieldsToUpdate,
};
};
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-delete-field-input-to-flat-field-metadatas-to-delete.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-delete-field-input-to-flat-field-metadatas-to-delete.util.ts
index 6777c01e6b..11f5609e9e 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-delete-field-input-to-flat-field-metadatas-to-delete.util.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-delete-field-input-to-flat-field-metadatas-to-delete.util.ts
@@ -1,4 +1,3 @@
-import { type FieldMetadataType } from 'twenty-shared/types';
import {
isDefined,
trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties,
@@ -13,7 +12,6 @@ import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
import { findFlatEntityByUniversalIdentifierOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier-or-throw.util';
import { findManyFlatEntityByUniversalIdentifierInUniversalFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-universal-identifier-in-universal-flat-entity-maps-or-throw.util';
-import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { computeFlatFieldMetadataRelatedFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/compute-flat-field-metadata-related-flat-field-metadata.util';
import { computeSearchFieldMetadataDeletionForDeletedFields } from 'src/engine/metadata-modules/flat-field-metadata/utils/compute-search-field-metadata-deletion-for-deleted-fields.util';
import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type';
@@ -44,7 +42,6 @@ export const fromDeleteFieldInputToFlatFieldMetadatasToDelete = ({
flatIndexesToUpdate: UniversalFlatIndexMetadata[];
flatIndexesToDelete: UniversalFlatIndexMetadata[];
searchFieldMetadatasToDelete: UniversalFlatSearchFieldMetadata[];
- flatSearchVectorFieldsToUpdate: FlatFieldMetadata[];
} => {
const { id: fieldMetadataToDeleteId } =
trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties(
@@ -187,11 +184,10 @@ export const fromDeleteFieldInputToFlatFieldMetadatasToDelete = ({
},
);
- const { searchFieldMetadatasToDelete, flatSearchVectorFieldsToUpdate } =
+ const { searchFieldMetadatasToDelete } =
computeSearchFieldMetadataDeletionForDeletedFields({
flatFieldMetadatasToDelete,
flatObjectMetadataMaps: existingFlatObjectMetadataMaps,
- flatFieldMetadataMaps: existingFlatFieldMetadataMaps,
flatSearchFieldMetadataMaps: existingFlatSearchFieldMetadataMaps,
});
@@ -200,6 +196,5 @@ export const fromDeleteFieldInputToFlatFieldMetadatasToDelete = ({
flatIndexesToDelete,
flatIndexesToUpdate,
searchFieldMetadatasToDelete,
- flatSearchVectorFieldsToUpdate,
};
};
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-field-metadata-entity-to-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-field-metadata-entity-to-flat-field-metadata.util.ts
index c61fef38ae..9ed3168878 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-field-metadata-entity-to-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-field-metadata-entity-to-flat-field-metadata.util.ts
@@ -78,6 +78,12 @@ export const fromFieldMetadataEntityToFlatFieldMetadata = (
fieldMetadataEntity.viewSorts?.map(
({ universalIdentifier }) => universalIdentifier,
) ?? [],
+ searchFieldMetadataIds:
+ fieldMetadataEntity.searchFieldMetadatas?.map(({ id }) => id) ?? [],
+ searchFieldMetadataUniversalIdentifiers:
+ fieldMetadataEntity.searchFieldMetadatas?.map(
+ ({ universalIdentifier }) => universalIdentifier,
+ ) ?? [],
fieldPermissionUniversalIdentifiers:
fieldMetadataEntity.fieldPermissions?.map(
({ universalIdentifier }) => universalIdentifier,
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-update-field-input-to-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-update-field-input-to-flat-field-metadata.util.ts
index 73aa746b87..63abd96223 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-update-field-input-to-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-update-field-input-to-flat-field-metadata.util.ts
@@ -35,7 +35,6 @@ type FromUpdateFieldInputToFlatFieldMetadataArgs = {
| 'flatViewGroupMaps'
| 'flatViewMaps'
| 'flatViewFieldMaps'
- | 'flatSearchFieldMetadataMaps'
>;
type FlatFieldMetadataAndIndexToUpdate = {
@@ -52,7 +51,6 @@ export const fromUpdateFieldInputToFlatFieldMetadata = ({
flatViewGroupMaps,
flatViewMaps,
flatViewFieldMaps,
- flatSearchFieldMetadataMaps,
isSystemBuild,
}: FromUpdateFieldInputToFlatFieldMetadataArgs): FieldInputTranspilationResult => {
const updateFieldInputInformalProperties =
@@ -152,7 +150,6 @@ export const fromUpdateFieldInputToFlatFieldMetadata = ({
toFlatFieldMetadata,
flatViewMaps,
flatViewFieldMaps,
- flatSearchFieldMetadataMaps,
flatApplication,
});
@@ -175,14 +172,12 @@ export const fromUpdateFieldInputToFlatFieldMetadata = ({
flatViewsToDelete,
flatViewFieldsToDelete,
flatViewsToUpdate,
- flatFieldMetadatasToUpdate: flatFieldMetadatasToUpdateFromSideEffect,
} = sideEffectResult.result;
return {
flatFieldMetadatasToUpdate: [
...accumulator.flatFieldMetadatasToUpdate,
toFlatFieldMetadata,
- ...flatFieldMetadatasToUpdateFromSideEffect,
],
flatIndexMetadatasToUpdate: [
...accumulator.flatIndexMetadatasToUpdate,
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/get-default-flat-field-metadata-from-create-field-input.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/get-default-flat-field-metadata-from-create-field-input.util.ts
index 63aabbf5cc..bc6a4fe4a4 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/get-default-flat-field-metadata-from-create-field-input.util.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/get-default-flat-field-metadata-from-create-field-input.util.ts
@@ -77,5 +77,6 @@ export const getDefaultFlatFieldMetadata = ({
mainGroupByFieldMetadataViewUniversalIdentifiers: [],
universalSettings: settings ?? null,
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataUniversalIdentifiers: [],
} as const satisfies UniversalFlatFieldMetadata;
};
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/handle-flat-field-metadata-update-side-effect.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/handle-flat-field-metadata-update-side-effect.util.ts
index 2c84d6603e..7022ff4070 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/handle-flat-field-metadata-update-side-effect.util.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/handle-flat-field-metadata-update-side-effect.util.ts
@@ -1,9 +1,7 @@
import { type FromTo } from 'twenty-shared/types';
-import { isDefined } from 'twenty-shared/utils';
import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type';
import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type';
-import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
import { type FieldInputTranspilationResult } from 'src/engine/metadata-modules/flat-field-metadata/types/field-input-transpilation-result.type';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { handleEnumFlatFieldMetadataUpdateSideEffects } from 'src/engine/metadata-modules/flat-field-metadata/utils/handle-enum-flat-field-metadata-update-side-effects.util';
@@ -16,7 +14,6 @@ import {
handleIndexChangesDuringFieldUpdate,
} from 'src/engine/metadata-modules/flat-field-metadata/utils/handle-index-changes-during-field-update.util';
import { isEnumFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-enum-flat-field-metadata.util';
-import { recomputeSearchVectorOnFieldRename } from 'src/engine/metadata-modules/flat-field-metadata/utils/recompute-search-vector-on-field-rename.util';
import { type FlatViewFiltersToDeleteAndUpdate } from 'src/engine/metadata-modules/flat-field-metadata/utils/recompute-view-filters-on-flat-field-metadata-options-update.util';
import { type FlatViewGroupsToDeleteUpdateAndCreate } from 'src/engine/metadata-modules/flat-field-metadata/utils/recompute-view-groups-on-flat-field-metadata-options-update.util';
@@ -24,9 +21,7 @@ export type FlatFieldMetadataUpdateSideEffects =
FlatViewFiltersToDeleteAndUpdate &
FlatViewGroupsToDeleteUpdateAndCreate &
FieldMetadataUpdateIndexSideEffect &
- FieldMetadataDeactivationSideEffect & {
- flatFieldMetadatasToUpdate: FlatFieldMetadata[];
- };
+ FieldMetadataDeactivationSideEffect;
type HandleFlatFieldMetadataUpdateSideEffectArgs = FromTo<
FlatFieldMetadata,
@@ -41,7 +36,6 @@ type HandleFlatFieldMetadataUpdateSideEffectArgs = FromTo<
| 'flatViewGroupMaps'
| 'flatViewMaps'
| 'flatViewFieldMaps'
- | 'flatSearchFieldMetadataMaps'
> & {
flatApplication: FlatApplication;
};
@@ -59,7 +53,6 @@ export const FLAT_FIELD_METADATA_UPDATE_EMPTY_SIDE_EFFECTS: FlatFieldMetadataUpd
flatViewsToDelete: [],
flatViewFieldsToDelete: [],
flatViewsToUpdate: [],
- flatFieldMetadatasToUpdate: [],
};
export const handleFlatFieldMetadataUpdateSideEffect = ({
@@ -72,7 +65,6 @@ export const handleFlatFieldMetadataUpdateSideEffect = ({
flatViewGroupMaps,
flatViewMaps,
flatViewFieldMaps,
- flatSearchFieldMetadataMaps,
flatApplication,
}: HandleFlatFieldMetadataUpdateSideEffectArgs): FieldInputTranspilationResult => {
const sideEffectResult = structuredClone(
@@ -140,25 +132,6 @@ export const handleFlatFieldMetadataUpdateSideEffect = ({
return indexChangesSideEffectResult;
}
- const flatObjectMetadata = findFlatEntityByIdInFlatEntityMapsOrThrow({
- flatEntityMaps: flatObjectMetadataMaps,
- flatEntityId: fromFlatFieldMetadata.objectMetadataId,
- });
-
- const { flatSearchVectorFieldToUpdate } = recomputeSearchVectorOnFieldRename({
- fromFlatFieldMetadata,
- toFlatFieldMetadata,
- flatObjectMetadata,
- flatFieldMetadataMaps,
- flatSearchFieldMetadataMaps,
- });
-
- if (isDefined(flatSearchVectorFieldToUpdate)) {
- sideEffectResult.flatFieldMetadatasToUpdate.push(
- flatSearchVectorFieldToUpdate,
- );
- }
-
const {
flatIndexMetadatasToUpdate,
flatIndexMetadatasToCreate,
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-search-vector-on-field-rename.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-search-vector-on-field-rename.util.ts
deleted file mode 100644
index f6691ad6db..0000000000
--- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-search-vector-on-field-rename.util.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import { type FieldMetadataType, type FromTo } from 'twenty-shared/types';
-
-import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type';
-import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
-import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
-import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
-import { recomputeSearchVectorFieldFromSearchFieldMetadatas } from 'src/engine/metadata-modules/flat-object-metadata/utils/recompute-search-vector-field-from-search-field-metadatas.util';
-import { type FlatSearchFieldMetadata } from 'src/engine/metadata-modules/flat-search-field-metadata/types/flat-search-field-metadata.type';
-
-export type FieldMetadataUpdateSearchVectorSideEffect = {
- flatSearchVectorFieldToUpdate:
- | FlatFieldMetadata
- | undefined;
-};
-
-type RecomputeSearchVectorOnFieldRenameArgs = {
- flatObjectMetadata: FlatObjectMetadata;
-} & FromTo &
- Pick<
- AllFlatEntityMaps,
- 'flatFieldMetadataMaps' | 'flatSearchFieldMetadataMaps'
- >;
-
-const EMPTY_SIDE_EFFECT: FieldMetadataUpdateSearchVectorSideEffect = {
- flatSearchVectorFieldToUpdate: undefined,
-};
-
-export const recomputeSearchVectorOnFieldRename = ({
- fromFlatFieldMetadata,
- toFlatFieldMetadata,
- flatObjectMetadata,
- flatFieldMetadataMaps,
- flatSearchFieldMetadataMaps,
-}: RecomputeSearchVectorOnFieldRenameArgs): FieldMetadataUpdateSearchVectorSideEffect => {
- if (!flatObjectMetadata.isSearchable) {
- return EMPTY_SIDE_EFFECT;
- }
-
- const objectSearchFieldMetadatas =
- findManyFlatEntityByIdInFlatEntityMapsOrThrow({
- flatEntityMaps: flatSearchFieldMetadataMaps,
- flatEntityIds: flatObjectMetadata.searchFieldMetadataIds,
- });
-
- const isIndexedField = objectSearchFieldMetadatas.some(
- (searchFieldMetadata) =>
- searchFieldMetadata.fieldMetadataId === toFlatFieldMetadata.id,
- );
-
- const hasNameChanged =
- fromFlatFieldMetadata.name !== toFlatFieldMetadata.name;
-
- if (!isIndexedField || !hasNameChanged) {
- return EMPTY_SIDE_EFFECT;
- }
-
- return {
- flatSearchVectorFieldToUpdate:
- recomputeSearchVectorFieldFromSearchFieldMetadatas({
- flatObjectMetadata,
- flatFieldMetadataMaps,
- searchFieldMetadatas: objectSearchFieldMetadatas,
- overrideFlatFieldMetadataById: new Map([
- [toFlatFieldMetadata.id, toFlatFieldMetadata],
- ]),
- }),
- };
-};
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-ts-vector-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-ts-vector-flat-field-metadata.util.ts
index 3cca34acee..cd8e14a623 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-ts-vector-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-ts-vector-flat-field-metadata.util.ts
@@ -1,11 +1,9 @@
import { msg } from '@lingui/core/macro';
-import { isNonEmptyString } from '@sniptt/guards';
import { type FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataExceptionCode } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception';
import { type FlatFieldMetadataTypeValidationArgs } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-type-validator.type';
import { type FlatFieldMetadataValidationError } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-validation-error.type';
-import { isSafeTsVectorExpression } from 'src/engine/workspace-manager/workspace-migration/utils/remove-sql-injection.util';
export const validateTsVectorFlatFieldMetadata = ({
flatEntityToValidate,
@@ -30,22 +28,5 @@ export const validateTsVectorFlatFieldMetadata = ({
});
}
- const asExpression = flatEntityToValidate.universalSettings?.asExpression;
-
- if (!isNonEmptyString(asExpression)) {
- errors.push({
- code: FieldMetadataExceptionCode.INVALID_FIELD_INPUT,
- message:
- 'Field type TS_VECTOR must have an expression. This may have failed to be built because record identifier field does not exist or is not of a searchable type.',
- userFriendlyMessage: msg`Field type TS_VECTOR must have an expression. This may have failed to be built because record identifier field does not exist or is not of a searchable type.`,
- });
- } else if (!isSafeTsVectorExpression(asExpression)) {
- errors.push({
- code: FieldMetadataExceptionCode.INVALID_FIELD_INPUT,
- message: 'Field type TS_VECTOR expression is invalid',
- userFriendlyMessage: msg`The search field expression is invalid.`,
- });
- }
-
return errors;
};
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-search-vector-on-label-identifier-update.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/compute-search-field-metadata-to-create-on-label-identifier-update.util.ts
similarity index 68%
rename from packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-search-vector-on-label-identifier-update.util.ts
rename to packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/compute-search-field-metadata-to-create-on-label-identifier-update.util.ts
index e33cbf60dc..fca60403a2 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-search-vector-on-label-identifier-update.util.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/compute-search-field-metadata-to-create-on-label-identifier-update.util.ts
@@ -1,24 +1,20 @@
-import { type FieldMetadataType, type FromTo } from 'twenty-shared/types';
+import { type FromTo } from 'twenty-shared/types';
import { isDefined, isSearchableFieldType } from 'twenty-shared/utils';
import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type';
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
-import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
-import { recomputeSearchVectorFieldFromSearchFieldMetadatas } from 'src/engine/metadata-modules/flat-object-metadata/utils/recompute-search-vector-field-from-search-field-metadatas.util';
import { type FlatSearchFieldMetadata } from 'src/engine/metadata-modules/flat-search-field-metadata/types/flat-search-field-metadata.type';
import { buildFlatSearchFieldMetadataForField } from 'src/engine/metadata-modules/flat-search-field-metadata/utils/build-flat-search-field-metadata-for-field.util';
+import { findTsVectorFlatFieldMetadataForObject } from 'src/engine/metadata-modules/flat-search-field-metadata/utils/find-ts-vector-flat-field-metadata-for-object.util';
import { type UniversalFlatSearchFieldMetadata } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-search-field-metadata.type';
-export type LabelIdentifierUpdateSearchVectorSideEffect = {
- flatSearchVectorFieldToUpdate:
- | FlatFieldMetadata
- | undefined;
+export type LabelIdentifierUpdateSearchFieldMetadataSideEffect = {
searchFieldMetadatasToCreate: UniversalFlatSearchFieldMetadata[];
};
-type RecomputeSearchVectorOnLabelIdentifierUpdateArgs = FromTo<
+type ComputeSearchFieldMetadataToCreateOnLabelIdentifierUpdateArgs = FromTo<
FlatObjectMetadata,
'flatObjectMetadata'
> &
@@ -27,21 +23,20 @@ type RecomputeSearchVectorOnLabelIdentifierUpdateArgs = FromTo<
'flatFieldMetadataMaps' | 'flatSearchFieldMetadataMaps'
>;
-const EMPTY_SIDE_EFFECT: LabelIdentifierUpdateSearchVectorSideEffect = {
- flatSearchVectorFieldToUpdate: undefined,
+const EMPTY_SIDE_EFFECT: LabelIdentifierUpdateSearchFieldMetadataSideEffect = {
searchFieldMetadatasToCreate: [],
};
// Relabeling is additive: it indexes the new label identifier field while preserving the
// existing search surface (e.g. the provisioned name row). We never drop a row here so the
-// previous label identifier stays searchable. Removal of fields from the search surface is
-// deferred to a follow-up PR.
-export const recomputeSearchVectorOnLabelIdentifierUpdate = ({
+// previous label identifier stays searchable. The searchVector column itself is rebuilt
+// from the resulting rows by the rebuildSearchVector marker in the migration runner.
+export const computeSearchFieldMetadataToCreateOnLabelIdentifierUpdate = ({
fromFlatObjectMetadata,
toFlatObjectMetadata,
flatFieldMetadataMaps,
flatSearchFieldMetadataMaps,
-}: RecomputeSearchVectorOnLabelIdentifierUpdateArgs): LabelIdentifierUpdateSearchVectorSideEffect => {
+}: ComputeSearchFieldMetadataToCreateOnLabelIdentifierUpdateArgs): LabelIdentifierUpdateSearchFieldMetadataSideEffect => {
const newLabelIdentifierFieldMetadataId =
toFlatObjectMetadata.labelIdentifierFieldMetadataId;
@@ -79,6 +74,15 @@ export const recomputeSearchVectorOnLabelIdentifierUpdate = ({
return EMPTY_SIDE_EFFECT;
}
+ const tsVectorFlatFieldMetadata = findTsVectorFlatFieldMetadataForObject({
+ fieldUniversalIdentifiers: fromFlatObjectMetadata.fieldUniversalIdentifiers,
+ flatFieldMetadataMaps,
+ });
+
+ if (!isDefined(tsVectorFlatFieldMetadata)) {
+ return EMPTY_SIDE_EFFECT;
+ }
+
const newLabelIdentifierPosition =
existingSearchFieldMetadatas.reduce(
(maxPosition, searchFieldMetadata) =>
@@ -89,25 +93,11 @@ export const recomputeSearchVectorOnLabelIdentifierUpdate = ({
const newSearchFieldMetadata = buildFlatSearchFieldMetadataForField({
flatObjectMetadata: fromFlatObjectMetadata,
flatFieldMetadata: newLabelIdentifierField,
+ tsVectorFlatFieldMetadata,
position: newLabelIdentifierPosition,
});
- const nextSearchFieldMetadatas = [
- ...existingSearchFieldMetadatas,
- {
- fieldMetadataId: newLabelIdentifierFieldMetadataId,
- position: newLabelIdentifierPosition,
- universalIdentifier: newSearchFieldMetadata.universalIdentifier,
- },
- ];
-
return {
- flatSearchVectorFieldToUpdate:
- recomputeSearchVectorFieldFromSearchFieldMetadatas({
- flatObjectMetadata: fromFlatObjectMetadata,
- flatFieldMetadataMaps,
- searchFieldMetadatas: nextSearchFieldMetadatas,
- }),
searchFieldMetadatasToCreate: [newSearchFieldMetadata],
};
};
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-update-object-input-to-flat-object-metadata-and-related-flat-entities.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-update-object-input-to-flat-object-metadata-and-related-flat-entities.util.ts
index bbff2b9ac0..44b74d7de6 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-update-object-input-to-flat-object-metadata-and-related-flat-entities.util.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-update-object-input-to-flat-object-metadata-and-related-flat-entities.util.ts
@@ -102,7 +102,6 @@ export const fromUpdateObjectInputToFlatObjectMetadataAndRelatedFlatEntities =
flatViewFieldsToCreate,
flatViewFieldsToUpdate,
otherObjectFlatFieldMetadatasToUpdate,
- sameObjectFlatFieldMetadatasToUpdate,
searchFieldMetadatasToCreate,
} = handleFlatObjectMetadataUpdateSideEffect({
fromFlatObjectMetadata: existingFlatObjectMetadata,
@@ -121,7 +120,6 @@ export const fromUpdateObjectInputToFlatObjectMetadataAndRelatedFlatEntities =
flatViewFieldsToCreate,
flatViewFieldsToUpdate,
otherObjectFlatFieldMetadatasToUpdate,
- sameObjectFlatFieldMetadatasToUpdate,
searchFieldMetadatasToCreate,
};
};
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/handle-flat-object-metadata-update-side-effect.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/handle-flat-object-metadata-update-side-effect.util.ts
index 7bd20b0beb..e90294edd1 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/handle-flat-object-metadata-update-side-effect.util.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/handle-flat-object-metadata-update-side-effect.util.ts
@@ -2,10 +2,9 @@ import { type FromTo } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type';
-import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
+import { computeSearchFieldMetadataToCreateOnLabelIdentifierUpdate } from 'src/engine/metadata-modules/flat-object-metadata/utils/compute-search-field-metadata-to-create-on-label-identifier-update.util';
import { recomputeIndexAfterFlatObjectMetadataSingularNameUpdate } from 'src/engine/metadata-modules/flat-object-metadata/utils/recompute-index-after-flat-object-metadata-singular-name-update.util';
-import { recomputeSearchVectorOnLabelIdentifierUpdate } from 'src/engine/metadata-modules/flat-object-metadata/utils/recompute-search-vector-on-label-identifier-update.util';
import { recomputeViewFieldIdentifierAfterFlatObjectIdentifierUpdate } from 'src/engine/metadata-modules/flat-object-metadata/utils/recompute-view-field-identifier-after-flat-object-identifier-update.util';
import { renameRelatedMorphFieldOnObjectNamesUpdate } from 'src/engine/metadata-modules/flat-object-metadata/utils/rename-related-morph-field-on-object-names-update.util';
import { type UniversalFlatFieldMetadata } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-field-metadata.type';
@@ -15,7 +14,6 @@ import { type UniversalFlatViewField } from 'src/engine/workspace-manager/worksp
export type FlatObjectMetadataUpdateSideEffects = {
otherObjectFlatFieldMetadatasToUpdate: UniversalFlatFieldMetadata[];
- sameObjectFlatFieldMetadatasToUpdate: UniversalFlatFieldMetadata[];
flatViewFieldsToUpdate: UniversalFlatViewField[];
flatViewFieldsToCreate: UniversalFlatViewField[];
flatIndexMetadatasToUpdate: UniversalFlatIndexMetadata[];
@@ -89,20 +87,14 @@ export const handleFlatObjectMetadataUpdateSideEffect = ({
flatViewFieldsToUpdate: [],
};
- const sameObjectFlatFieldMetadatasToUpdate: FlatFieldMetadata[] = [];
-
- const { flatSearchVectorFieldToUpdate, searchFieldMetadatasToCreate } =
- recomputeSearchVectorOnLabelIdentifierUpdate({
+ const { searchFieldMetadatasToCreate } =
+ computeSearchFieldMetadataToCreateOnLabelIdentifierUpdate({
fromFlatObjectMetadata,
toFlatObjectMetadata,
flatFieldMetadataMaps,
flatSearchFieldMetadataMaps,
});
- if (isDefined(flatSearchVectorFieldToUpdate)) {
- sameObjectFlatFieldMetadatasToUpdate.push(flatSearchVectorFieldToUpdate);
- }
-
return {
flatIndexMetadatasToUpdate: [
...morphRelatedFlatIndexesToUpdate,
@@ -111,7 +103,6 @@ export const handleFlatObjectMetadataUpdateSideEffect = ({
flatViewFieldsToCreate,
flatViewFieldsToUpdate,
otherObjectFlatFieldMetadatasToUpdate: morphFlatFieldMetadatasToUpdate,
- sameObjectFlatFieldMetadatasToUpdate,
searchFieldMetadatasToCreate,
};
};
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-search-vector-field-from-search-field-metadatas.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-search-vector-field-from-search-field-metadatas.util.ts
deleted file mode 100644
index 14f7eebcb0..0000000000
--- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-search-vector-field-from-search-field-metadatas.util.ts
+++ /dev/null
@@ -1,112 +0,0 @@
-import { FieldMetadataType } from 'twenty-shared/types';
-import { isDefined } from 'twenty-shared/utils';
-
-import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type';
-import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
-import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
-import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
-import { isFlatFieldMetadataOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util';
-import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
-import { type FlatSearchFieldMetadata } from 'src/engine/metadata-modules/flat-search-field-metadata/types/flat-search-field-metadata.type';
-import {
- ObjectMetadataException,
- ObjectMetadataExceptionCode,
-} from 'src/engine/metadata-modules/object-metadata/object-metadata.exception';
-import {
- buildSearchVectorTargetField,
- computeSearchVectorAsExpressionFromSearchFieldMetadatas,
-} from 'src/engine/metadata-modules/flat-search-field-metadata/utils/compute-search-vector-as-expression-from-search-field-metadatas.util';
-import { SEARCH_VECTOR_FIELD } from 'src/engine/metadata-modules/search-field-metadata/constants/search-vector-field.constants';
-
-type RecomputeSearchVectorFieldFromSearchFieldMetadatasArgs = {
- flatObjectMetadata: FlatObjectMetadata;
- // Post-change searchFieldMetadata rows for the object, carrying the field id and the
- // per-object position that drives the deterministic asExpression order.
- searchFieldMetadatas: Pick<
- FlatSearchFieldMetadata,
- 'fieldMetadataId' | 'position' | 'universalIdentifier'
- >[];
- // Takes precedence over the flat maps when resolving an id — for a field created or
- // renamed in the same migration, whose maps entry is absent or stale.
- overrideFlatFieldMetadataById?: Map;
-} & Pick;
-
-export const recomputeSearchVectorFieldFromSearchFieldMetadatas = ({
- flatObjectMetadata,
- flatFieldMetadataMaps,
- searchFieldMetadatas,
- overrideFlatFieldMetadataById,
-}: RecomputeSearchVectorFieldFromSearchFieldMetadatasArgs):
- | FlatFieldMetadata
- | undefined => {
- const objectFlatFieldMetadatas =
- findManyFlatEntityByIdInFlatEntityMapsOrThrow({
- flatEntityMaps: flatFieldMetadataMaps,
- flatEntityIds: flatObjectMetadata.fieldIds,
- });
-
- const searchVectorField = objectFlatFieldMetadatas.find(
- (field) => field.name === SEARCH_VECTOR_FIELD.name,
- );
-
- if (
- !isDefined(searchVectorField) ||
- !isFlatFieldMetadataOfType(searchVectorField, FieldMetadataType.TS_VECTOR)
- ) {
- throw new ObjectMetadataException(
- `Search vector field not found for object metadata ${flatObjectMetadata.id}`,
- ObjectMetadataExceptionCode.INVALID_OBJECT_INPUT,
- );
- }
-
- const targetSearchableFields = searchFieldMetadatas.map(
- (searchFieldMetadata) => {
- const { fieldMetadataId, position, universalIdentifier } =
- searchFieldMetadata;
-
- const overriddenFlatFieldMetadata =
- overrideFlatFieldMetadataById?.get(fieldMetadataId);
-
- const flatFieldMetadata =
- overriddenFlatFieldMetadata ??
- findFlatEntityByIdInFlatEntityMaps({
- flatEntityId: fieldMetadataId,
- flatEntityMaps: flatFieldMetadataMaps,
- });
-
- if (!isDefined(flatFieldMetadata)) {
- throw new ObjectMetadataException(
- `Field metadata ${fieldMetadataId} referenced by searchFieldMetadata not found for object metadata ${flatObjectMetadata.id}`,
- ObjectMetadataExceptionCode.INVALID_OBJECT_INPUT,
- );
- }
-
- return buildSearchVectorTargetField(
- flatFieldMetadata,
- position,
- universalIdentifier,
- );
- },
- );
-
- try {
- const newAsExpression =
- computeSearchVectorAsExpressionFromSearchFieldMetadatas(
- targetSearchableFields,
- );
-
- return {
- ...searchVectorField,
- universalSettings: {
- ...searchVectorField.universalSettings,
- asExpression: newAsExpression,
- generatedType: 'STORED',
- },
- };
- } catch (error) {
- throw new ObjectMetadataException(
- `Failed to compute search vector column expression for object metadata ${flatObjectMetadata.id}: ${error instanceof Error ? error.message : String(error)}`,
- ObjectMetadataExceptionCode.INVALID_OBJECT_INPUT,
- );
- }
-};
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/services/workspace-flat-search-field-metadata-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/services/workspace-flat-search-field-metadata-map-cache.service.ts
index 2618f7ce39..48cc387ae4 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/services/workspace-flat-search-field-metadata-map-cache.service.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/services/workspace-flat-search-field-metadata-map-cache.service.ts
@@ -1,6 +1,8 @@
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
+import { FieldMetadataType } from 'twenty-shared/types';
+import { isDefined } from 'twenty-shared/utils';
import { Repository } from 'typeorm';
import { WorkspaceCacheProvider } from 'src/engine/workspace-cache/interfaces/workspace-cache-provider.service';
@@ -11,6 +13,7 @@ import { createEmptyFlatEntityMaps } from 'src/engine/metadata-modules/flat-enti
import { FlatSearchFieldMetadataMaps } from 'src/engine/metadata-modules/flat-search-field-metadata/types/flat-search-field-metadata-maps.type';
import { fromSearchFieldMetadataEntityToFlatSearchFieldMetadata } from 'src/engine/metadata-modules/flat-search-field-metadata/utils/from-search-field-metadata-entity-to-flat-search-field-metadata.util';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
+import { SEARCH_VECTOR_FIELD } from 'src/engine/metadata-modules/search-field-metadata/constants/search-vector-field.constants';
import { SearchFieldMetadataEntity } from 'src/engine/metadata-modules/search-field-metadata/search-field-metadata.entity';
import { InjectWorkspaceScopedRepository } from 'src/engine/twenty-orm/workspace-scoped-repository/inject-workspace-scoped-repository.decorator';
import { WorkspaceScopedRepository } from 'src/engine/twenty-orm/workspace-scoped-repository/workspace-scoped-repository';
@@ -56,7 +59,13 @@ export class WorkspaceFlatSearchFieldMetadataMapCacheService extends WorkspaceCa
}),
this.fieldMetadataRepository.find({
where: { workspaceId },
- select: ['id', 'universalIdentifier'],
+ select: [
+ 'id',
+ 'universalIdentifier',
+ 'name',
+ 'type',
+ 'objectMetadataId',
+ ],
withDeleted: true,
}),
]);
@@ -68,12 +77,42 @@ export class WorkspaceFlatSearchFieldMetadataMapCacheService extends WorkspaceCa
const fieldMetadataIdToUniversalIdentifierMap =
createIdToUniversalIdentifierMap(fieldMetadatas);
+ // Each object's single system TS_VECTOR field, used to backfill the FK for
+ // legacy searchFieldMetadata rows still NULL before the 2.18 slow command runs.
+ // TODO: remove this fallback (and the searchVector map) once the minimum
+ // cross-upgrade supported version is past 2.18 — at which point no instance can
+ // still have NULL tsVectorFieldMetadataId rows.
+ const searchVectorFieldIdByObjectMetadataId = new Map();
+
+ for (const fieldMetadata of fieldMetadatas) {
+ if (
+ fieldMetadata.type === FieldMetadataType.TS_VECTOR &&
+ fieldMetadata.name === SEARCH_VECTOR_FIELD.name
+ ) {
+ searchVectorFieldIdByObjectMetadataId.set(
+ fieldMetadata.objectMetadataId,
+ fieldMetadata.id,
+ );
+ }
+ }
+
const flatSearchFieldMetadataMaps = createEmptyFlatEntityMaps();
for (const searchFieldMetadata of existingSearchFieldMetadatas) {
+ const resolvedTsVectorFieldMetadataId =
+ (searchFieldMetadata.tsVectorFieldMetadataId as string | null) ??
+ searchVectorFieldIdByObjectMetadataId.get(
+ searchFieldMetadata.objectMetadataId,
+ );
+
const flatSearchFieldMetadata =
fromSearchFieldMetadataEntityToFlatSearchFieldMetadata({
- entity: searchFieldMetadata,
+ entity: isDefined(resolvedTsVectorFieldMetadataId)
+ ? {
+ ...searchFieldMetadata,
+ tsVectorFieldMetadataId: resolvedTsVectorFieldMetadataId,
+ }
+ : searchFieldMetadata,
applicationIdToUniversalIdentifierMap,
objectMetadataIdToUniversalIdentifierMap,
fieldMetadataIdToUniversalIdentifierMap,
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/build-flat-search-field-metadata-for-field.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/build-flat-search-field-metadata-for-field.util.ts
index 51250533d7..eef9ff9192 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/build-flat-search-field-metadata-for-field.util.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/build-flat-search-field-metadata-for-field.util.ts
@@ -6,6 +6,7 @@ import { type UniversalFlatSearchFieldMetadata } from 'src/engine/workspace-mana
export const buildFlatSearchFieldMetadataForField = ({
flatObjectMetadata,
flatFieldMetadata,
+ tsVectorFlatFieldMetadata,
position,
}: {
flatObjectMetadata: Pick<
@@ -13,6 +14,7 @@ export const buildFlatSearchFieldMetadataForField = ({
'applicationUniversalIdentifier' | 'universalIdentifier'
>;
flatFieldMetadata: { universalIdentifier: string };
+ tsVectorFlatFieldMetadata: { universalIdentifier: string };
position: number;
}): UniversalFlatSearchFieldMetadata => {
const createdAt = new Date().toISOString();
@@ -26,5 +28,7 @@ export const buildFlatSearchFieldMetadataForField = ({
flatObjectMetadata.applicationUniversalIdentifier,
objectMetadataUniversalIdentifier: flatObjectMetadata.universalIdentifier,
fieldMetadataUniversalIdentifier: flatFieldMetadata.universalIdentifier,
+ tsVectorFieldMetadataUniversalIdentifier:
+ tsVectorFlatFieldMetadata.universalIdentifier,
};
};
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/compute-search-vector-as-expression-from-search-field-metadatas.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/compute-search-vector-as-expression-from-search-field-metadatas.util.ts
index 89e7407ee7..eb2a94dcec 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/compute-search-vector-as-expression-from-search-field-metadatas.util.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/compute-search-vector-as-expression-from-search-field-metadatas.util.ts
@@ -15,11 +15,15 @@ export type SearchVectorTargetField = {
sortKey: string;
};
-export const buildSearchVectorTargetField = (
- field: { name: string; type: FieldMetadataType },
- position: number,
- sortKey: string,
-): SearchVectorTargetField => ({
+export const buildSearchVectorTargetField = ({
+ field,
+ position,
+ sortKey,
+}: {
+ field: { name: string; type: FieldMetadataType };
+ position: number;
+ sortKey: string;
+}): SearchVectorTargetField => ({
name: field.name,
type: field.type,
position,
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/derive-search-vector-as-expression-for-ts-vector-field.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/derive-search-vector-as-expression-for-ts-vector-field.util.ts
new file mode 100644
index 0000000000..0208cb40d5
--- /dev/null
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/derive-search-vector-as-expression-for-ts-vector-field.util.ts
@@ -0,0 +1,53 @@
+import { type FieldMetadataType } from 'twenty-shared/types';
+import { isDefined } from 'twenty-shared/utils';
+
+import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
+import {
+ buildSearchVectorTargetField,
+ computeSearchVectorAsExpressionFromSearchFieldMetadatas,
+} from 'src/engine/metadata-modules/flat-search-field-metadata/utils/compute-search-vector-as-expression-from-search-field-metadatas.util';
+import { type FlatSearchFieldMetadata } from 'src/engine/metadata-modules/flat-search-field-metadata/types/flat-search-field-metadata.type';
+
+export const deriveSearchVectorAsExpressionForTsVectorField = ({
+ tsVectorFieldMetadataId,
+ flatSearchFieldMetadataMaps,
+ indexedFieldById,
+}: {
+ tsVectorFieldMetadataId: string;
+ flatSearchFieldMetadataMaps: FlatEntityMaps;
+ indexedFieldById: ReadonlyMap<
+ string,
+ { name: string; type: FieldMetadataType }
+ >;
+}): string => {
+ const targetSearchableFields = Object.values(
+ flatSearchFieldMetadataMaps.byUniversalIdentifier,
+ )
+ .filter(isDefined)
+ .filter(
+ (flatSearchFieldMetadata) =>
+ flatSearchFieldMetadata.tsVectorFieldMetadataId ===
+ tsVectorFieldMetadataId,
+ )
+ .flatMap((flatSearchFieldMetadata) => {
+ const indexedField = indexedFieldById.get(
+ flatSearchFieldMetadata.fieldMetadataId,
+ );
+
+ if (!isDefined(indexedField)) {
+ return [];
+ }
+
+ return [
+ buildSearchVectorTargetField({
+ field: indexedField,
+ position: flatSearchFieldMetadata.position,
+ sortKey: flatSearchFieldMetadata.universalIdentifier,
+ }),
+ ];
+ });
+
+ return computeSearchVectorAsExpressionFromSearchFieldMetadatas(
+ targetSearchableFields,
+ );
+};
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/find-ts-vector-flat-field-metadata-for-object.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/find-ts-vector-flat-field-metadata-for-object.util.ts
new file mode 100644
index 0000000000..f73ad53d30
--- /dev/null
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/find-ts-vector-flat-field-metadata-for-object.util.ts
@@ -0,0 +1,28 @@
+import { FieldMetadataType } from 'twenty-shared/types';
+import { isDefined } from 'twenty-shared/utils';
+
+import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
+import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
+import { SEARCH_VECTOR_FIELD } from 'src/engine/metadata-modules/search-field-metadata/constants/search-vector-field.constants';
+
+// Resolves the object's single system TS_VECTOR field (the 'searchVector' field) that
+// every searchFieldMetadata row contributes to.
+// Could be refactored once https://github.com/twentyhq/twenty/pull/21949 has been merged.
+export const findTsVectorFlatFieldMetadataForObject = ({
+ fieldUniversalIdentifiers,
+ flatFieldMetadataMaps,
+}: {
+ fieldUniversalIdentifiers: string[];
+ flatFieldMetadataMaps: FlatEntityMaps;
+}): FlatFieldMetadata | undefined =>
+ fieldUniversalIdentifiers
+ .map(
+ (fieldUniversalIdentifier) =>
+ flatFieldMetadataMaps.byUniversalIdentifier[fieldUniversalIdentifier],
+ )
+ .find(
+ (flatFieldMetadata) =>
+ isDefined(flatFieldMetadata) &&
+ flatFieldMetadata.type === FieldMetadataType.TS_VECTOR &&
+ flatFieldMetadata.name === SEARCH_VECTOR_FIELD.name,
+ );
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/from-flat-search-field-metadata-to-search-field-metadata-dto.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/from-flat-search-field-metadata-to-search-field-metadata-dto.util.ts
new file mode 100644
index 0000000000..4694365b9e
--- /dev/null
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/from-flat-search-field-metadata-to-search-field-metadata-dto.util.ts
@@ -0,0 +1,15 @@
+import { type FlatSearchFieldMetadata } from 'src/engine/metadata-modules/flat-search-field-metadata/types/flat-search-field-metadata.type';
+import { type SearchFieldMetadataDTO } from 'src/engine/metadata-modules/search-field-metadata/dtos/search-field-metadata.dto';
+
+export const fromFlatSearchFieldMetadataToSearchFieldMetadataDto = (
+ flatSearchFieldMetadata: FlatSearchFieldMetadata,
+): SearchFieldMetadataDTO => ({
+ id: flatSearchFieldMetadata.id,
+ objectMetadataId: flatSearchFieldMetadata.objectMetadataId,
+ fieldMetadataId: flatSearchFieldMetadata.fieldMetadataId,
+ tsVectorFieldMetadataId: flatSearchFieldMetadata.tsVectorFieldMetadataId,
+ position: flatSearchFieldMetadata.position,
+ createdAt: new Date(flatSearchFieldMetadata.createdAt),
+ updatedAt: new Date(flatSearchFieldMetadata.updatedAt),
+ workspaceId: flatSearchFieldMetadata.workspaceId,
+});
diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/from-search-field-metadata-entity-to-flat-search-field-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/from-search-field-metadata-entity-to-flat-search-field-metadata.util.ts
index 54d54ad237..6a696e0770 100644
--- a/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/from-search-field-metadata-entity-to-flat-search-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/flat-search-field-metadata/utils/from-search-field-metadata-entity-to-flat-search-field-metadata.util.ts
@@ -55,6 +55,18 @@ export const fromSearchFieldMetadataEntityToFlatSearchFieldMetadata = ({
);
}
+ const tsVectorFieldMetadataUniversalIdentifier =
+ fieldMetadataIdToUniversalIdentifierMap.get(
+ searchFieldMetadataEntity.tsVectorFieldMetadataId,
+ );
+
+ if (!isDefined(tsVectorFieldMetadataUniversalIdentifier)) {
+ throw new FlatEntityMapsException(
+ `TS_VECTOR field metadata with id ${searchFieldMetadataEntity.tsVectorFieldMetadataId} not found for searchFieldMetadata ${searchFieldMetadataEntity.id}`,
+ FlatEntityMapsExceptionCode.ENTITY_NOT_FOUND,
+ );
+ }
+
return {
...searchFieldMetadataEntityWithoutRelations,
createdAt: searchFieldMetadataEntity.createdAt.toISOString(),
@@ -64,5 +76,6 @@ export const fromSearchFieldMetadataEntityToFlatSearchFieldMetadata = ({
applicationUniversalIdentifier,
objectMetadataUniversalIdentifier,
fieldMetadataUniversalIdentifier,
+ tsVectorFieldMetadataUniversalIdentifier,
};
};
diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/constants/partial-system-flat-field-metadatas.constant.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/constants/partial-system-flat-field-metadatas.constant.ts
index ddb79529ff..b793b9b6e4 100644
--- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/constants/partial-system-flat-field-metadatas.constant.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/constants/partial-system-flat-field-metadatas.constant.ts
@@ -40,6 +40,7 @@ const PARTIAL_ID_FIELD = {
mainGroupByFieldMetadataViewUniversalIdentifiers: [],
fieldPermissionUniversalIdentifiers: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataUniversalIdentifiers: [],
} as const satisfies PartialSystemFlatFieldMetadata;
const PARTIAL_CREATED_AT_FIELD = {
@@ -69,6 +70,7 @@ const PARTIAL_CREATED_AT_FIELD = {
mainGroupByFieldMetadataViewUniversalIdentifiers: [],
fieldPermissionUniversalIdentifiers: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataUniversalIdentifiers: [],
} as const satisfies PartialSystemFlatFieldMetadata;
const PARTIAL_UPDATED_AT_FIELD = {
@@ -98,6 +100,7 @@ const PARTIAL_UPDATED_AT_FIELD = {
mainGroupByFieldMetadataViewUniversalIdentifiers: [],
fieldPermissionUniversalIdentifiers: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataUniversalIdentifiers: [],
} as const satisfies PartialSystemFlatFieldMetadata;
const PARTIAL_DELETED_AT_FIELD = {
@@ -127,6 +130,7 @@ const PARTIAL_DELETED_AT_FIELD = {
mainGroupByFieldMetadataViewUniversalIdentifiers: [],
fieldPermissionUniversalIdentifiers: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataUniversalIdentifiers: [],
} as const satisfies PartialSystemFlatFieldMetadata;
const PARTIAL_CREATED_BY_FIELD = {
@@ -156,6 +160,7 @@ const PARTIAL_CREATED_BY_FIELD = {
mainGroupByFieldMetadataViewUniversalIdentifiers: [],
fieldPermissionUniversalIdentifiers: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataUniversalIdentifiers: [],
} as const satisfies PartialSystemFlatFieldMetadata;
const PARTIAL_UPDATED_BY_FIELD = {
@@ -185,6 +190,7 @@ const PARTIAL_UPDATED_BY_FIELD = {
mainGroupByFieldMetadataViewUniversalIdentifiers: [],
fieldPermissionUniversalIdentifiers: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataUniversalIdentifiers: [],
} as const satisfies PartialSystemFlatFieldMetadata;
const PARTIAL_POSITION_FIELD = {
@@ -214,6 +220,7 @@ const PARTIAL_POSITION_FIELD = {
mainGroupByFieldMetadataViewUniversalIdentifiers: [],
fieldPermissionUniversalIdentifiers: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataUniversalIdentifiers: [],
} as const satisfies PartialSystemFlatFieldMetadata;
const PARTIAL_SEARCH_VECTOR_FIELD = {
@@ -245,6 +252,7 @@ const PARTIAL_SEARCH_VECTOR_FIELD = {
mainGroupByFieldMetadataViewUniversalIdentifiers: [],
fieldPermissionUniversalIdentifiers: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataUniversalIdentifiers: [],
} as const satisfies PartialSystemFlatFieldMetadata;
export const PARTIAL_SYSTEM_FLAT_FIELD_METADATAS = {
diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.resolver.ts
index c498025ba1..4685a82ba0 100644
--- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.resolver.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.resolver.ts
@@ -30,6 +30,7 @@ import { ObjectRecordCountDTO } from 'src/engine/metadata-modules/object-metadat
import { UpdateOneObjectInput } from 'src/engine/metadata-modules/object-metadata/dtos/update-object.input';
import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service';
import { ObjectRecordCountService } from 'src/engine/metadata-modules/object-metadata/object-record-count.service';
+import { SearchFieldMetadataDTO } from 'src/engine/metadata-modules/search-field-metadata/dtos/search-field-metadata.dto';
import { objectMetadataGraphqlApiExceptionHandler } from 'src/engine/metadata-modules/object-metadata/utils/object-metadata-graphql-api-exception-handler.util';
import { resolveObjectMetadataStandardOverride } from 'src/engine/metadata-modules/object-metadata/utils/resolve-object-metadata-standard-override.util';
import { PermissionsGraphqlApiExceptionFilter } from 'src/engine/metadata-modules/permissions/utils/permissions-graphql-api-exception.filter';
@@ -273,4 +274,25 @@ export class ObjectMetadataResolver {
return [];
}
}
+
+ @ResolveField(() => [SearchFieldMetadataDTO], { nullable: false })
+ async searchFieldMetadataList(
+ @AuthWorkspace() workspace: WorkspaceEntity,
+ @Parent() objectMetadata: ObjectMetadataDTO,
+ @Context() context: { loaders: IDataloaders },
+ ): Promise {
+ try {
+ const searchFieldMetadataItems =
+ await context.loaders.searchFieldMetadataLoader.load({
+ objectMetadata,
+ workspaceId: workspace.id,
+ });
+
+ return searchFieldMetadataItems;
+ } catch (error) {
+ objectMetadataGraphqlApiExceptionHandler(error);
+
+ return [];
+ }
+ }
}
diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts
index 74f76c5201..09536993d4 100644
--- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts
@@ -107,7 +107,6 @@ export class ObjectMetadataService extends TypeOrmQueryService['universalSettings'] =
- {
- asExpression: getTsVectorColumnExpressionFromFields(
- nameField ? [nameField] : [],
- ),
- generatedType: 'STORED',
- };
+ null;
return {
fields: {
diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-search-field-metadatas-for-custom-object.util.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-search-field-metadatas-for-custom-object.util.ts
index d32890f410..157c64bf65 100644
--- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-search-field-metadatas-for-custom-object.util.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-search-field-metadatas-for-custom-object.util.ts
@@ -27,6 +27,8 @@ export const buildDefaultSearchFieldMetadatasForCustomObject = ({
const nameSearchFieldMetadata = buildFlatSearchFieldMetadataForField({
flatObjectMetadata,
flatFieldMetadata: nameField,
+ tsVectorFlatFieldMetadata:
+ defaultFlatFieldForCustomObjectMaps.fields.searchVector,
position: 0,
});
diff --git a/packages/twenty-server/src/engine/metadata-modules/search-field-metadata/dtos/search-field-metadata.dto.ts b/packages/twenty-server/src/engine/metadata-modules/search-field-metadata/dtos/search-field-metadata.dto.ts
new file mode 100644
index 0000000000..9510c9ceb2
--- /dev/null
+++ b/packages/twenty-server/src/engine/metadata-modules/search-field-metadata/dtos/search-field-metadata.dto.ts
@@ -0,0 +1,57 @@
+import { Field, HideField, ObjectType } from '@nestjs/graphql';
+
+import {
+ Authorize,
+ IDField,
+ QueryOptions,
+} from '@ptc-org/nestjs-query-graphql';
+import { IsDateString, IsNotEmpty, IsNumber, IsUUID } from 'class-validator';
+
+import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
+
+@ObjectType('SearchField')
+@Authorize({
+ // oxlint-disable-next-line typescript/no-explicit-any
+ authorize: (context: any) => ({
+ workspaceId: { eq: context?.req?.workspace?.id },
+ }),
+})
+@QueryOptions({
+ defaultResultSize: 10,
+ disableSort: true,
+ maxResultsSize: 1000,
+})
+export class SearchFieldMetadataDTO {
+ @IsUUID()
+ @IsNotEmpty()
+ @IDField(() => UUIDScalarType)
+ id: string;
+
+ objectMetadataId: string;
+
+ @IsUUID()
+ @IsNotEmpty()
+ @Field(() => UUIDScalarType)
+ fieldMetadataId: string;
+
+ @IsUUID()
+ @IsNotEmpty()
+ @Field(() => UUIDScalarType)
+ tsVectorFieldMetadataId: string;
+
+ @IsNumber()
+ @IsNotEmpty()
+ @Field()
+ position: number;
+
+ @IsDateString()
+ @Field()
+ createdAt: Date;
+
+ @IsDateString()
+ @Field()
+ updatedAt: Date;
+
+ @HideField()
+ workspaceId: string;
+}
diff --git a/packages/twenty-server/src/engine/metadata-modules/search-field-metadata/exceptions/search-field-metadata.exception.ts b/packages/twenty-server/src/engine/metadata-modules/search-field-metadata/exceptions/search-field-metadata.exception.ts
index c7b87bfd4c..65a6830bfd 100644
--- a/packages/twenty-server/src/engine/metadata-modules/search-field-metadata/exceptions/search-field-metadata.exception.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/search-field-metadata/exceptions/search-field-metadata.exception.ts
@@ -3,4 +3,6 @@ export enum SearchFieldMetadataExceptionCode {
INVALID_SEARCH_FIELD_METADATA_DATA = 'INVALID_SEARCH_FIELD_METADATA_DATA',
OBJECT_METADATA_NOT_FOUND = 'OBJECT_METADATA_NOT_FOUND',
FIELD_METADATA_NOT_FOUND = 'FIELD_METADATA_NOT_FOUND',
+ TS_VECTOR_FIELD_METADATA_NOT_FOUND = 'TS_VECTOR_FIELD_METADATA_NOT_FOUND',
+ INVALID_TS_VECTOR_FIELD_METADATA = 'INVALID_TS_VECTOR_FIELD_METADATA',
}
diff --git a/packages/twenty-server/src/engine/metadata-modules/search-field-metadata/search-field-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/search-field-metadata/search-field-metadata.entity.ts
index 3145e99fb3..d7dd374a95 100644
--- a/packages/twenty-server/src/engine/metadata-modules/search-field-metadata/search-field-metadata.entity.ts
+++ b/packages/twenty-server/src/engine/metadata-modules/search-field-metadata/search-field-metadata.entity.ts
@@ -12,6 +12,7 @@ import {
} from 'typeorm';
import { ADD_UNIVERSAL_IDENTIFIER_AND_APPLICATION_ID_TO_SEARCH_FIELD_METADATA_UPGRADE_COMMAND_NAME } from 'src/database/commands/upgrade-version-command/2-16/add-universal-identifier-and-application-id-to-search-field-metadata-upgrade-command-name.constant';
+import { ADD_TS_VECTOR_FIELD_METADATA_ID_TO_SEARCH_FIELD_METADATA_UPGRADE_COMMAND_NAME } from 'src/database/commands/upgrade-version-command/2-18/add-ts-vector-field-metadata-id-to-search-field-metadata-upgrade-command-name.constant';
import { WasIntroducedInUpgrade } from 'src/engine/core-modules/upgrade/decorators/was-introduced-in-upgrade.decorator';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
@@ -46,10 +47,25 @@ export class SearchFieldMetadataEntity extends SyncableEntity {
@Column({ nullable: false, type: 'uuid' })
fieldMetadataId: string;
- @ManyToOne(() => FieldMetadataEntity, { onDelete: 'CASCADE' })
+ @ManyToOne(
+ () => FieldMetadataEntity,
+ (fieldMetadata) => fieldMetadata.searchFieldMetadatas,
+ { onDelete: 'CASCADE' },
+ )
@JoinColumn({ name: 'fieldMetadataId' })
fieldMetadata: Relation;
+ @WasIntroducedInUpgrade({
+ upgradeCommandName:
+ ADD_TS_VECTOR_FIELD_METADATA_ID_TO_SEARCH_FIELD_METADATA_UPGRADE_COMMAND_NAME,
+ })
+ @Column({ nullable: false, type: 'uuid' })
+ tsVectorFieldMetadataId: string;
+
+ @ManyToOne(() => FieldMetadataEntity, { onDelete: 'CASCADE' })
+ @JoinColumn({ name: 'tsVectorFieldMetadataId' })
+ tsVectorFieldMetadata: Relation;
+
@Column({ nullable: false, type: 'float' })
position: number;
diff --git a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts
index cb697ae7ba..83a7659eee 100644
--- a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts
+++ b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts
@@ -186,6 +186,8 @@ describe('WorkspaceEntityManager', () => {
fieldPermissionUniversalIdentifiers: [],
viewSortIds: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataIds: [],
+ searchFieldMetadataUniversalIdentifiers: [],
universalSettings: null,
};
diff --git a/packages/twenty-server/src/engine/twenty-orm/repository/__tests__/workspace.repository.spec.ts b/packages/twenty-server/src/engine/twenty-orm/repository/__tests__/workspace.repository.spec.ts
index 6043b62cd6..de118c815b 100644
--- a/packages/twenty-server/src/engine/twenty-orm/repository/__tests__/workspace.repository.spec.ts
+++ b/packages/twenty-server/src/engine/twenty-orm/repository/__tests__/workspace.repository.spec.ts
@@ -109,6 +109,8 @@ describe('WorkspaceRepository', () => {
fieldPermissionUniversalIdentifiers: [],
viewSortIds: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataIds: [],
+ searchFieldMetadataUniversalIdentifiers: [],
universalSettings: null,
};
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-attachment-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-attachment-standard-flat-field-metadata.util.ts
index 7515cf344f..0dcf590095 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-attachment-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-attachment-standard-flat-field-metadata.util.ts
@@ -15,9 +15,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildAttachmentStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -327,12 +324,6 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-blocklist-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-blocklist-standard-flat-field-metadata.util.ts
index 771365c2ac..4443abd92d 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-blocklist-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-blocklist-standard-flat-field-metadata.util.ts
@@ -14,9 +14,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildBlocklistStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -190,12 +187,6 @@ export const buildBlocklistStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-channel-event-association-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-channel-event-association-standard-flat-field-metadata.util.ts
index c28d1d8fb0..8e0716d8be 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-channel-event-association-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-channel-event-association-standard-flat-field-metadata.util.ts
@@ -14,9 +14,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildCalendarChannelEventAssociationStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -188,12 +185,6 @@ export const buildCalendarChannelEventAssociationStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-participant-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-participant-standard-flat-field-metadata.util.ts
index c5594a5e82..03362a3408 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-participant-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-participant-standard-flat-field-metadata.util.ts
@@ -14,9 +14,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildCalendarEventParticipantStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -186,12 +183,6 @@ export const buildCalendarEventParticipantStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-standard-flat-field-metadata.util.ts
index 59faf1ceb1..05b9d69ab7 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-calendar-event-standard-flat-field-metadata.util.ts
@@ -13,9 +13,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildCalendarEventStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -182,12 +179,6 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-call-recording-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-call-recording-standard-flat-field-metadata.util.ts
index b92246fedc..a6728f6065 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-call-recording-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-call-recording-standard-flat-field-metadata.util.ts
@@ -14,10 +14,8 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
import { CallRecordingRequestStatus } from 'src/modules/call-recording/common/enums/call-recording-request-status.enum';
import { CallRecordingStatus } from 'src/modules/call-recording/common/enums/call-recording-status.enum';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
export const buildCallRecordingStandardFlatFieldMetadatas = ({
now,
@@ -486,12 +484,6 @@ export const buildCallRecordingStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-company-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-company-standard-flat-field-metadata.util.ts
index 437b3eb0e3..a620adc168 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-company-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-company-standard-flat-field-metadata.util.ts
@@ -15,9 +15,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildCompanyStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -279,12 +276,6 @@ export const buildCompanyStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-dashboard-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-dashboard-standard-flat-field-metadata.util.ts
index 4636e2310c..f39f096c6f 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-dashboard-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-dashboard-standard-flat-field-metadata.util.ts
@@ -14,9 +14,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildDashboardStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -219,12 +216,6 @@ export const buildDashboardStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-campaign-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-campaign-standard-flat-field-metadata.util.ts
index f3c6b1c536..19120aaace 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-campaign-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-campaign-standard-flat-field-metadata.util.ts
@@ -14,9 +14,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildMessageCampaignStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -160,12 +157,6 @@ export const buildMessageCampaignStandardFlatFieldMetadatas = ({
icon: 'IconSend',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
}),
subject: createStandardFieldFlatMetadata({
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-message-association-message-folder-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-message-association-message-folder-standard-flat-field-metadata.util.ts
index 0bbc1dbdd5..aebee697d0 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-message-association-message-folder-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-message-association-message-folder-standard-flat-field-metadata.util.ts
@@ -14,9 +14,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildMessageChannelMessageAssociationMessageFolderStandardFlatFieldMetadatas =
({
now,
@@ -192,12 +189,6 @@ export const buildMessageChannelMessageAssociationMessageFolderStandardFlatField
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-message-association-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-message-association-standard-flat-field-metadata.util.ts
index 4b69d7eee2..2267bb6050 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-message-association-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-channel-message-association-standard-flat-field-metadata.util.ts
@@ -14,8 +14,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
import { MessageDirection } from 'src/modules/messaging/common/enums/message-direction.enum';
export const buildMessageChannelMessageAssociationStandardFlatFieldMetadatas =
@@ -193,12 +191,6 @@ export const buildMessageChannelMessageAssociationStandardFlatFieldMetadatas =
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-list-member-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-list-member-standard-flat-field-metadata.util.ts
index 7f6aea1fb3..fad82b2c9e 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-list-member-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-list-member-standard-flat-field-metadata.util.ts
@@ -14,9 +14,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildMessageListMemberStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -234,12 +231,6 @@ export const buildMessageListMemberStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-list-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-list-standard-flat-field-metadata.util.ts
index 8fe5f291b6..4171fcaa9a 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-list-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-list-standard-flat-field-metadata.util.ts
@@ -15,9 +15,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildMessageListStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -269,12 +266,6 @@ export const buildMessageListStandardFlatFieldMetadatas = ({
icon: 'IconUsersGroup',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-participant-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-participant-standard-flat-field-metadata.util.ts
index 381338d2f1..e21ca9aa1b 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-participant-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-participant-standard-flat-field-metadata.util.ts
@@ -15,9 +15,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildMessageParticipantStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -187,12 +184,6 @@ export const buildMessageParticipantStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-standard-flat-field-metadata.util.ts
index da68fef650..4e4c41fa64 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-standard-flat-field-metadata.util.ts
@@ -14,9 +14,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildMessageStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -183,12 +180,6 @@ export const buildMessageStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-thread-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-thread-standard-flat-field-metadata.util.ts
index c43a43152c..d320052cfe 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-thread-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-message-thread-standard-flat-field-metadata.util.ts
@@ -13,9 +13,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildMessageThreadStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -182,12 +179,6 @@ export const buildMessageThreadStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-note-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-note-standard-flat-field-metadata.util.ts
index 64d322c37c..37ada61d33 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-note-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-note-standard-flat-field-metadata.util.ts
@@ -14,9 +14,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildNoteStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -224,12 +221,6 @@ export const buildNoteStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-note-target-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-note-target-standard-flat-field-metadata.util.ts
index 1e647ddd5e..316d388ed7 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-note-target-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-note-target-standard-flat-field-metadata.util.ts
@@ -15,9 +15,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildNoteTargetStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -191,12 +188,6 @@ export const buildNoteTargetStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-opportunity-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-opportunity-standard-flat-field-metadata.util.ts
index 7f754de066..4e1a62a919 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-opportunity-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-opportunity-standard-flat-field-metadata.util.ts
@@ -15,9 +15,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildOpportunityStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -295,12 +292,6 @@ export const buildOpportunityStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-person-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-person-standard-flat-field-metadata.util.ts
index cb34da8c26..8e3773da7a 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-person-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-person-standard-flat-field-metadata.util.ts
@@ -17,9 +17,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildPersonStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -538,12 +535,6 @@ export const buildPersonStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-task-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-task-standard-flat-field-metadata.util.ts
index aabcfffbf8..98b46ebf2a 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-task-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-task-standard-flat-field-metadata.util.ts
@@ -15,9 +15,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildTaskStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -281,12 +278,6 @@ export const buildTaskStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-task-target-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-task-target-standard-flat-field-metadata.util.ts
index 3594d77574..40abc8a77d 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-task-target-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-task-target-standard-flat-field-metadata.util.ts
@@ -15,9 +15,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildTaskTargetStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -191,12 +188,6 @@ export const buildTaskTargetStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-timeline-activity-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-timeline-activity-standard-flat-field-metadata.util.ts
index 29c4f110c6..c5b20289d1 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-timeline-activity-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-timeline-activity-standard-flat-field-metadata.util.ts
@@ -15,9 +15,6 @@ import {
type CreateStandardFieldArgs,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildTimelineActivityStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -597,12 +594,6 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-automated-trigger-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-automated-trigger-standard-flat-field-metadata.util.ts
index bbf5532c24..72000f808b 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-automated-trigger-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-automated-trigger-standard-flat-field-metadata.util.ts
@@ -14,9 +14,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildWorkflowAutomatedTriggerStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -186,12 +183,6 @@ export const buildWorkflowAutomatedTriggerStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-run-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-run-standard-flat-field-metadata.util.ts
index 2218c1c1fc..6ff53f9b4d 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-run-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-run-standard-flat-field-metadata.util.ts
@@ -15,9 +15,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildWorkflowRunStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -360,12 +357,6 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({
isSystem: true,
isNullable: true,
isUIEditable: false,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-standard-flat-field-metadata.util.ts
index fc1253a334..2fbbd049d8 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-standard-flat-field-metadata.util.ts
@@ -14,9 +14,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildWorkflowStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -258,12 +255,6 @@ export const buildWorkflowStandardFlatFieldMetadatas = ({
icon: 'IconUser',
isSystem: true,
isNullable: true,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-version-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-version-standard-flat-field-metadata.util.ts
index cdaad3f307..aea3e39f54 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-version-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workflow-version-standard-flat-field-metadata.util.ts
@@ -15,9 +15,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
-
export const buildWorkflowVersionStandardFlatFieldMetadatas = ({
now,
objectName,
@@ -288,12 +285,6 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({
isSystem: true,
isNullable: true,
isUIEditable: false,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workspace-member-standard-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workspace-member-standard-flat-field-metadata.util.ts
index 2e8b069436..ddfa9cbf80 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workspace-member-standard-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/compute-workspace-member-standard-flat-field-metadata.util.ts
@@ -14,8 +14,6 @@ import {
createStandardFieldFlatMetadata,
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
import { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
-import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/utils/get-ts-vector-column-expression.util';
-import { SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/search-fields-by-standard-object-name.constant';
import { WorkspaceMemberNumberFormatEnum } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity';
export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({
@@ -457,12 +455,6 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({
isSystem: true,
isNullable: true,
isUIEditable: false,
- settings: {
- generatedType: 'STORED',
- asExpression: getTsVectorColumnExpressionFromFields(
- SEARCH_FIELDS_BY_STANDARD_OBJECT_NAME[objectName],
- ),
- },
},
standardObjectMetadataRelatedEntityIds,
dependencyFlatEntityMaps,
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util.ts
index 5c34ebb817..6ca8aef187 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util.ts
@@ -117,6 +117,8 @@ export const createStandardFieldFlatMetadata = <
mainGroupByFieldMetadataViewUniversalIdentifiers: [],
viewSortIds: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataIds: [],
+ searchFieldMetadataUniversalIdentifiers: [],
universalSettings: settings ?? null,
};
};
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util.ts
index 4361b98271..c10d900907 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util.ts
@@ -138,6 +138,8 @@ export const createStandardRelationFieldFlatMetadata = <
mainGroupByFieldMetadataViewUniversalIdentifiers: [],
viewSortIds: [],
viewSortUniversalIdentifiers: [],
+ searchFieldMetadataIds: [],
+ searchFieldMetadataUniversalIdentifiers: [],
universalSettings: {
...settings,
...(junctionTargetFieldUniversalIdentifier && {
diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/search-field-metadata/create-standard-search-field-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/search-field-metadata/create-standard-search-field-flat-metadata.util.ts
index 1e7b62f96c..03e9254a68 100644
--- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/search-field-metadata/create-standard-search-field-flat-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/search-field-metadata/create-standard-search-field-flat-metadata.util.ts
@@ -3,6 +3,7 @@ import { v4 } from 'uuid';
import { findFlatEntityByUniversalIdentifierOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier-or-throw.util';
import { type FlatSearchFieldMetadata } from 'src/engine/metadata-modules/flat-search-field-metadata/types/flat-search-field-metadata.type';
+import { SEARCH_VECTOR_FIELD } from 'src/engine/metadata-modules/search-field-metadata/constants/search-vector-field.constants';
import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type';
import { type AllStandardObjectName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-name.type';
import { type StandardBuilderArgs } from 'src/engine/workspace-manager/twenty-standard-application/types/metadata-standard-buillder-args.type';
@@ -56,6 +57,14 @@ export const createStandardSearchFieldFlatMetadata = <
flatEntityMaps: flatFieldMetadataMaps,
});
+ const tsVectorFieldMetadataId =
+ standardObjectMetadataRelatedEntityIds[objectName].fields[
+ SEARCH_VECTOR_FIELD.name as AllStandardObjectFieldName
+ ].id;
+ const tsVectorFieldMetadataUniversalIdentifier =
+ objectFields[SEARCH_VECTOR_FIELD.name as keyof typeof objectFields]
+ .universalIdentifier;
+
return {
id: v4(),
universalIdentifier: v4(),
@@ -66,6 +75,8 @@ export const createStandardSearchFieldFlatMetadata = <
objectMetadataUniversalIdentifier: flatObjectMetadata.universalIdentifier,
fieldMetadataId,
fieldMetadataUniversalIdentifier: flatFieldMetadata.universalIdentifier,
+ tsVectorFieldMetadataId,
+ tsVectorFieldMetadataUniversalIdentifier,
position,
workspaceId,
createdAt: now,
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/utils/enrich-create-workspace-migration-action-with-ids.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/utils/enrich-create-workspace-migration-action-with-ids.util.ts
index b69ca891ab..ba090e8fcb 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/utils/enrich-create-workspace-migration-action-with-ids.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/utils/enrich-create-workspace-migration-action-with-ids.util.ts
@@ -23,15 +23,14 @@ const buildFieldIdByUniversalIdentifierForObjectAction = ({
};
for (const universalFlatFieldMetadata of action.universalFlatFieldMetadatas) {
+ const { universalIdentifier } = universalFlatFieldMetadata;
const providedFieldId =
- fieldMetadataIdByUniversalIdentifier[
- universalFlatFieldMetadata.universalIdentifier
- ];
+ fieldMetadataIdByUniversalIdentifier[universalIdentifier];
if (isDefined(providedFieldId)) {
- fieldIdByUniversalIdentifier[
- universalFlatFieldMetadata.universalIdentifier
- ] = providedFieldId;
+ fieldIdByUniversalIdentifier[universalIdentifier] = providedFieldId;
+ } else if (!isDefined(fieldIdByUniversalIdentifier[universalIdentifier])) {
+ fieldIdByUniversalIdentifier[universalIdentifier] = v4();
}
}
@@ -200,6 +199,7 @@ export const enrichCreateWorkspaceMigrationActionsWithIds = ({
if (
action.metadataName !== 'fieldMetadata' &&
+ action.metadataName !== 'objectMetadata' &&
!isDefined(idByUniversalIdentifier) &&
!isDefined(fieldMetadataIdByUniversalIdentifier) &&
!isDefined(pageLayoutTabIdByUniversalIdentifier)
@@ -209,17 +209,18 @@ export const enrichCreateWorkspaceMigrationActionsWithIds = ({
switch (action.metadataName) {
case 'objectMetadata': {
- const id = isDefined(idByUniversalIdentifier)
- ? idByUniversalIdentifier[action.flatEntity.universalIdentifier]
- : undefined;
- const objectFieldIdByUniversalIdentifier = isDefined(
- fieldMetadataIdByUniversalIdentifier,
- )
- ? buildFieldIdByUniversalIdentifierForObjectAction({
- action,
- fieldMetadataIdByUniversalIdentifier,
- })
- : undefined;
+ const id =
+ (isDefined(idByUniversalIdentifier)
+ ? idByUniversalIdentifier[action.flatEntity.universalIdentifier]
+ : undefined) ??
+ action.id ??
+ v4();
+ const objectFieldIdByUniversalIdentifier =
+ buildFieldIdByUniversalIdentifierForObjectAction({
+ action,
+ fieldMetadataIdByUniversalIdentifier:
+ fieldMetadataIdByUniversalIdentifier ?? {},
+ });
return {
...action,
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/workspace-migration-build-orchestrator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/workspace-migration-build-orchestrator.service.ts
index eb69b39ac1..46f93caac5 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/workspace-migration-build-orchestrator.service.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/services/workspace-migration-build-orchestrator.service.ts
@@ -21,6 +21,7 @@ import { AllUniversalFlatEntityMaps } from 'src/engine/workspace-manager/workspa
import { type MetadataUniversalFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/metadata-universal-flat-entity-maps.type';
import { aggregateOrchestratorActionsReport } from 'src/engine/workspace-manager/workspace-migration/utils/aggregate-orchestrator-actions-report.util';
import { computeOrderedMigrationActions } from 'src/engine/workspace-manager/workspace-migration/utils/compute-ordered-migration-actions.util';
+import { computeSearchVectorRebuildTargetUniversalIdentifiers } from 'src/engine/workspace-manager/workspace-migration/utils/compute-search-vector-rebuild-target-universal-identifiers.util';
import { crossEntityTransversalValidation } from 'src/engine/workspace-manager/workspace-migration/utils/cross-entity-transversal-validation.util';
import { mergeOrchestratorFailureReports } from 'src/engine/workspace-manager/workspace-migration/utils/merge-orchestrator-failure-reports.util';
import { WorkspaceMigrationAgentActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/agent/workspace-migration-agent-actions-builder.service';
@@ -390,11 +391,23 @@ export class WorkspaceMigrationBuildOrchestratorService {
};
}
+ const searchVectorUniversalIdentifiersToRebuild =
+ computeSearchVectorRebuildTargetUniversalIdentifiers({
+ orchestratorActionsReport,
+ fromFlatSearchFieldMetadataMaps:
+ fromToAllFlatEntityMaps.flatSearchFieldMetadataMaps?.from,
+ toFlatSearchFieldMetadataMaps:
+ optimisticAllFlatEntityMaps.flatSearchFieldMetadataMaps,
+ toFlatFieldMetadataMaps:
+ optimisticAllFlatEntityMaps.flatFieldMetadataMaps,
+ });
+
const { aggregatedOrchestratorActionsReport } =
aggregateOrchestratorActionsReport({
orchestratorActionsReport,
flatFieldMetadataMaps:
optimisticAllFlatEntityMaps.flatFieldMetadataMaps,
+ searchVectorUniversalIdentifiersToRebuild,
});
return {
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/types/workspace-migration-aggregate-orchestrator-actions-report-args.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/types/workspace-migration-aggregate-orchestrator-actions-report-args.type.ts
index f01c039078..38a650c36d 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/types/workspace-migration-aggregate-orchestrator-actions-report-args.type.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/types/workspace-migration-aggregate-orchestrator-actions-report-args.type.ts
@@ -4,4 +4,5 @@ import { type MetadataUniversalFlatEntityMaps } from 'src/engine/workspace-manag
export type AggregateOrchestratorActionsReportArgs = {
orchestratorActionsReport: OrchestratorActionsReport;
flatFieldMetadataMaps?: MetadataUniversalFlatEntityMaps<'fieldMetadata'>;
+ searchVectorUniversalIdentifiersToRebuild?: Set;
};
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/constants/__tests__/__snapshots__/all-universal-flat-entity-foreign-key-aggregator-properties.constant.spec.ts.snap b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/constants/__tests__/__snapshots__/all-universal-flat-entity-foreign-key-aggregator-properties.constant.spec.ts.snap
index 9afcfe8106..27a4580941 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/constants/__tests__/__snapshots__/all-universal-flat-entity-foreign-key-aggregator-properties.constant.spec.ts.snap
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/constants/__tests__/__snapshots__/all-universal-flat-entity-foreign-key-aggregator-properties.constant.spec.ts.snap
@@ -14,6 +14,7 @@ exports[`ALL_UNIVERSAL_FLAT_ENTITY_FOREIGN_KEY_AGGREGATOR_PROPERTIES should matc
"kanbanAggregateOperationViewUniversalIdentifiers",
"calendarViewUniversalIdentifiers",
"mainGroupByFieldMetadataViewUniversalIdentifiers",
+ "searchFieldMetadataUniversalIdentifiers",
],
"fieldPermission": [],
"frontComponent": [],
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/__tests__/__snapshots__/universal-flat-entity-deleted-created-updated-matrix-dispatcher.util.spec.ts.snap b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/__tests__/__snapshots__/universal-flat-entity-deleted-created-updated-matrix-dispatcher.util.spec.ts.snap
index cf9ffe3584..c88d38c613 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/__tests__/__snapshots__/universal-flat-entity-deleted-created-updated-matrix-dispatcher.util.spec.ts.snap
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/__tests__/__snapshots__/universal-flat-entity-deleted-created-updated-matrix-dispatcher.util.spec.ts.snap
@@ -37,6 +37,8 @@ exports[`flatEntityDeletedCreatedUpdatedMatrixDispatcher It should detect a crea
"relationTargetFieldMetadataUniversalIdentifier": null,
"relationTargetObjectMetadataId": null,
"relationTargetObjectMetadataUniversalIdentifier": null,
+ "searchFieldMetadataIds": [],
+ "searchFieldMetadataUniversalIdentifiers": [],
"settings": null,
"standardOverrides": null,
"type": "TEXT",
@@ -102,6 +104,8 @@ exports[`flatEntityDeletedCreatedUpdatedMatrixDispatcher It should detect a dele
"relationTargetFieldMetadataUniversalIdentifier": null,
"relationTargetObjectMetadataId": null,
"relationTargetObjectMetadataUniversalIdentifier": null,
+ "searchFieldMetadataIds": [],
+ "searchFieldMetadataUniversalIdentifiers": [],
"settings": null,
"standardOverrides": null,
"type": "TEXT",
@@ -181,6 +185,8 @@ exports[`flatEntityDeletedCreatedUpdatedMatrixDispatcher It should detect create
"relationTargetFieldMetadataUniversalIdentifier": null,
"relationTargetObjectMetadataId": null,
"relationTargetObjectMetadataUniversalIdentifier": null,
+ "searchFieldMetadataIds": [],
+ "searchFieldMetadataUniversalIdentifiers": [],
"settings": null,
"standardOverrides": null,
"type": "TEXT",
@@ -232,6 +238,8 @@ exports[`flatEntityDeletedCreatedUpdatedMatrixDispatcher It should detect create
"relationTargetFieldMetadataUniversalIdentifier": null,
"relationTargetObjectMetadataId": null,
"relationTargetObjectMetadataUniversalIdentifier": null,
+ "searchFieldMetadataIds": [],
+ "searchFieldMetadataUniversalIdentifiers": [],
"settings": null,
"standardOverrides": null,
"type": "TEXT",
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/add-universal-flat-entity-to-universal-flat-entity-and-related-entity-maps-through-mutation-or-throw.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/add-universal-flat-entity-to-universal-flat-entity-and-related-entity-maps-through-mutation-or-throw.util.ts
index 0e822604b9..2b864ba942 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/add-universal-flat-entity-to-universal-flat-entity-and-related-entity-maps-through-mutation-or-throw.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/add-universal-flat-entity-to-universal-flat-entity-and-related-entity-maps-through-mutation-or-throw.util.ts
@@ -11,6 +11,7 @@ import { type MetadataRelatedFlatEntityMapsKeys } from 'src/engine/metadata-modu
import { type MetadataUniversalFlatEntityAndRelatedUniversalFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/metadata-related-types.type';
import { type MetadataUniversalFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-universal-flat-entity.type';
import { findFlatEntityByUniversalIdentifierOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier-or-throw.util';
+import { findFlatEntityByUniversalIdentifier } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier.util';
import { getMetadataFlatEntityMapsKey } from 'src/engine/metadata-modules/flat-entity/utils/get-metadata-flat-entity-maps-key.util';
import { type UniversalFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-maps.type';
import { addUniversalFlatEntityToUniversalFlatEntityMapsThroughMutationOrThrow } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/add-universal-flat-entity-to-universal-flat-entity-maps-through-mutation-or-throw.util';
@@ -22,6 +23,7 @@ type AddUniversalFlatEntityToUniversalFlatEntityAndRelatedEntityMapsThroughMutat
metadataName: T;
universalFlatEntity: MetadataUniversalFlatEntity;
universalFlatEntityAndRelatedMapsToMutate: MetadataUniversalFlatEntityAndRelatedUniversalFlatEntityMaps;
+ skipMissingRelatedEntities?: boolean;
};
export const addUniversalFlatEntityToUniversalFlatEntityAndRelatedEntityMapsThroughMutationOrThrow =
@@ -29,6 +31,7 @@ export const addUniversalFlatEntityToUniversalFlatEntityAndRelatedEntityMapsThro
metadataName,
universalFlatEntity,
universalFlatEntityAndRelatedMapsToMutate,
+ skipMissingRelatedEntities = false,
}: AddUniversalFlatEntityToUniversalFlatEntityAndRelatedEntityMapsThroughMutationOrThrowArgs) => {
const flatEntityMapsKey = getMetadataFlatEntityMapsKey(metadataName);
@@ -96,6 +99,18 @@ export const addUniversalFlatEntityToUniversalFlatEntityAndRelatedEntityMapsThro
continue;
}
+ if (skipMissingRelatedEntities) {
+ const maybeRelatedUniversalFlatEntity =
+ findFlatEntityByUniversalIdentifier({
+ universalIdentifier: universalForeignKeyValue,
+ flatEntityMaps: relatedUniversalFlatEntityMaps,
+ });
+
+ if (!isDefined(maybeRelatedUniversalFlatEntity)) {
+ continue;
+ }
+ }
+
const relatedUniversalFlatEntity =
findFlatEntityByUniversalIdentifierOrThrow({
universalIdentifier: universalForeignKeyValue,
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util.ts
index 17c809330a..7f98e375f8 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util.ts
@@ -13,6 +13,10 @@ import { type MetadataToFlatEntityMapsKey } from 'src/engine/metadata-modules/fl
import { findFlatEntityByUniversalIdentifier } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier.util';
import { getMetadataFlatEntityMapsKey } from 'src/engine/metadata-modules/flat-entity/utils/get-metadata-flat-entity-maps-key.util';
+export type PreallocatedIdByUniversalIdentifierByMetadataName = Partial<
+ Record>
+>;
+
type ManyToOneRelationsConfig =
(typeof ALL_MANY_TO_ONE_METADATA_RELATIONS)[T];
@@ -74,6 +78,7 @@ export const resolveUniversalRelationIdentifiersToIds = <
metadataName,
universalForeignKeyValues,
flatEntityMaps,
+ preallocatedIdByUniversalIdentifierByMetadataName,
}: {
metadataName: T;
universalForeignKeyValues: Record;
@@ -81,6 +86,7 @@ export const resolveUniversalRelationIdentifiersToIds = <
T,
TProvidedKeys
>;
+ preallocatedIdByUniversalIdentifierByMetadataName?: PreallocatedIdByUniversalIdentifierByMetadataName;
}): ResolvedForeignKeyIds => {
const relationEntries = ALL_MANY_TO_ONE_METADATA_RELATIONS[metadataName];
const result: Record = {};
@@ -131,6 +137,18 @@ export const resolveUniversalRelationIdentifiersToIds = <
continue;
}
+ const preallocatedId = isDefined(universalIdentifierValue)
+ ? preallocatedIdByUniversalIdentifierByMetadataName?.[
+ targetMetadataName
+ ]?.[universalIdentifierValue]
+ : undefined;
+
+ if (isDefined(preallocatedId)) {
+ result[foreignKey] = preallocatedId;
+
+ continue;
+ }
+
const targetEntity = findFlatEntityByUniversalIdentifier<
MetadataFlatEntity
>({
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/aggregate-orchestrator-actions-report-deprioritize-search-vector-update-field-actions.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/aggregate-orchestrator-actions-report-deprioritize-search-vector-update-field-actions.util.ts
index 147e2d61c4..864c16740a 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/aggregate-orchestrator-actions-report-deprioritize-search-vector-update-field-actions.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/aggregate-orchestrator-actions-report-deprioritize-search-vector-update-field-actions.util.ts
@@ -4,15 +4,22 @@ import { findFlatEntityByUniversalIdentifierOrThrow } from 'src/engine/metadata-
import { SEARCH_VECTOR_FIELD } from 'src/engine/metadata-modules/search-field-metadata/constants/search-vector-field.constants';
import { type AggregateOrchestratorActionsReportArgs } from 'src/engine/workspace-manager/workspace-migration/types/workspace-migration-aggregate-orchestrator-actions-report-args.type';
import { type OrchestratorActionsReport } from 'src/engine/workspace-manager/workspace-migration/types/workspace-migration-orchestrator.type';
+import { WORKSPACE_MIGRATION_ACTION_TYPE } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/constants/workspace-migration-action-type.constant';
import { type UniversalUpdateFieldAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/field/types/workspace-migration-field-action';
export const aggregateOrchestratorActionsReportDeprioritizeSearchVectorUpdateFieldActions =
({
orchestratorActionsReport,
flatFieldMetadataMaps,
+ searchVectorUniversalIdentifiersToRebuild,
}: AggregateOrchestratorActionsReportArgs): OrchestratorActionsReport => {
assertIsDefinedOrThrow(flatFieldMetadataMaps);
+ const rebuildTargetUniversalIdentifiers =
+ searchVectorUniversalIdentifiersToRebuild ?? new Set();
+
+ const coveredVectorUniversalIdentifiers = new Set();
+
const updateFieldActions = orchestratorActionsReport.fieldMetadata.update;
const { searchVectorUpdateFieldActions, otherUpdateFieldActions } =
@@ -30,11 +37,22 @@ export const aggregateOrchestratorActionsReportDeprioritizeSearchVectorUpdateFie
flatFieldMetadata.name === SEARCH_VECTOR_FIELD.name;
if (isSearchVectorUpdateFieldAction) {
+ coveredVectorUniversalIdentifiers.add(
+ updateFieldAction.universalIdentifier,
+ );
+
+ const searchVectorUpdateFieldAction =
+ rebuildTargetUniversalIdentifiers.has(
+ updateFieldAction.universalIdentifier,
+ )
+ ? { ...updateFieldAction, rebuildSearchVector: true }
+ : updateFieldAction;
+
return {
...acc,
searchVectorUpdateFieldActions: [
...acc.searchVectorUpdateFieldActions,
- updateFieldAction,
+ searchVectorUpdateFieldAction,
],
};
}
@@ -53,11 +71,31 @@ export const aggregateOrchestratorActionsReportDeprioritizeSearchVectorUpdateFie
},
);
+ const synthesizedSearchVectorUpdateFieldActions: UniversalUpdateFieldAction[] =
+ [...rebuildTargetUniversalIdentifiers].flatMap(
+ (vectorUniversalIdentifier) =>
+ coveredVectorUniversalIdentifiers.has(vectorUniversalIdentifier)
+ ? []
+ : [
+ {
+ type: WORKSPACE_MIGRATION_ACTION_TYPE.update,
+ metadataName: 'fieldMetadata',
+ universalIdentifier: vectorUniversalIdentifier,
+ update: {},
+ rebuildSearchVector: true,
+ },
+ ],
+ );
+
return {
...orchestratorActionsReport,
fieldMetadata: {
...orchestratorActionsReport.fieldMetadata,
- update: [...otherUpdateFieldActions, ...searchVectorUpdateFieldActions],
+ update: [
+ ...otherUpdateFieldActions,
+ ...searchVectorUpdateFieldActions,
+ ...synthesizedSearchVectorUpdateFieldActions,
+ ],
},
};
};
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/aggregate-orchestrator-actions-report.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/aggregate-orchestrator-actions-report.util.ts
index ac09a621f1..bc06ce8c18 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/aggregate-orchestrator-actions-report.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/aggregate-orchestrator-actions-report.util.ts
@@ -6,6 +6,7 @@ import { aggregateRelationFieldPairs } from 'src/engine/workspace-manager/worksp
export const aggregateOrchestratorActionsReport = ({
orchestratorActionsReport,
flatFieldMetadataMaps,
+ searchVectorUniversalIdentifiersToRebuild,
}: AggregateOrchestratorActionsReportArgs) => {
const aggregatedOrchestratorActionsReport = [
aggregateNonRelationFieldsIntoObjectActions,
@@ -16,6 +17,7 @@ export const aggregateOrchestratorActionsReport = ({
aggregator({
orchestratorActionsReport: currentOrchestratorActionsReport,
flatFieldMetadataMaps,
+ searchVectorUniversalIdentifiersToRebuild,
}),
orchestratorActionsReport,
);
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/compute-ordered-migration-actions.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/compute-ordered-migration-actions.util.ts
index 6be0002d4e..4127949a6d 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/compute-ordered-migration-actions.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/compute-ordered-migration-actions.util.ts
@@ -5,8 +5,12 @@ export const computeOrderedMigrationActions = (
aggregatedOrchestratorActionsReport: OrchestratorActionsReport,
): AllUniversalWorkspaceMigrationAction[] => {
return [
- // Object and fields and indexes
...aggregatedOrchestratorActionsReport.searchFieldMetadata.delete,
+ ...aggregatedOrchestratorActionsReport.searchFieldMetadata.create,
+ ...aggregatedOrchestratorActionsReport.searchFieldMetadata.update,
+ ///
+
+ // Object and fields and indexes
...aggregatedOrchestratorActionsReport.index.delete,
...aggregatedOrchestratorActionsReport.fieldMetadata.delete,
...aggregatedOrchestratorActionsReport.objectMetadata.delete,
@@ -16,8 +20,6 @@ export const computeOrderedMigrationActions = (
...aggregatedOrchestratorActionsReport.fieldMetadata.update,
...aggregatedOrchestratorActionsReport.index.create,
...aggregatedOrchestratorActionsReport.index.update.flat(),
- ...aggregatedOrchestratorActionsReport.searchFieldMetadata.create,
- ...aggregatedOrchestratorActionsReport.searchFieldMetadata.update,
///
// Views
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/compute-search-vector-rebuild-target-universal-identifiers.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/compute-search-vector-rebuild-target-universal-identifiers.util.ts
new file mode 100644
index 0000000000..c102e461d6
--- /dev/null
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/utils/compute-search-vector-rebuild-target-universal-identifiers.util.ts
@@ -0,0 +1,91 @@
+import { isDefined } from 'twenty-shared/utils';
+
+import { findFlatEntityByUniversalIdentifier } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier.util';
+import { type OrchestratorActionsReport } from 'src/engine/workspace-manager/workspace-migration/types/workspace-migration-orchestrator.type';
+import { type MetadataUniversalFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/metadata-universal-flat-entity-maps.type';
+
+export const computeSearchVectorRebuildTargetUniversalIdentifiers = ({
+ orchestratorActionsReport,
+ fromFlatSearchFieldMetadataMaps,
+ toFlatSearchFieldMetadataMaps,
+ toFlatFieldMetadataMaps,
+}: {
+ orchestratorActionsReport: OrchestratorActionsReport;
+ fromFlatSearchFieldMetadataMaps?: MetadataUniversalFlatEntityMaps<'searchFieldMetadata'>;
+ toFlatSearchFieldMetadataMaps: MetadataUniversalFlatEntityMaps<'searchFieldMetadata'>;
+ toFlatFieldMetadataMaps: MetadataUniversalFlatEntityMaps<'fieldMetadata'>;
+}): Set => {
+ const searchFieldMetadataActions =
+ orchestratorActionsReport.searchFieldMetadata;
+
+ const emptyFlatSearchFieldMetadataMaps: MetadataUniversalFlatEntityMaps<'searchFieldMetadata'> =
+ { byUniversalIdentifier: {} };
+
+ const renamedFieldSearchFieldMetadataUniversalIdentifiers =
+ orchestratorActionsReport.fieldMetadata.update
+ .filter((updateAction) => isDefined(updateAction.update.name))
+ .flatMap(
+ (updateAction) =>
+ findFlatEntityByUniversalIdentifier({
+ flatEntityMaps: toFlatFieldMetadataMaps,
+ universalIdentifier: updateAction.universalIdentifier,
+ })?.searchFieldMetadataUniversalIdentifiers ?? [],
+ );
+
+ const candidateFieldMetadataVectorUniversalIdentifiers = new Set(
+ [
+ ...searchFieldMetadataActions.create.map(
+ (createAction) =>
+ createAction.flatEntity.tsVectorFieldMetadataUniversalIdentifier,
+ ),
+ ...searchFieldMetadataActions.update.map(
+ (updateAction) =>
+ findFlatEntityByUniversalIdentifier({
+ flatEntityMaps: toFlatSearchFieldMetadataMaps,
+ universalIdentifier: updateAction.universalIdentifier,
+ })?.tsVectorFieldMetadataUniversalIdentifier,
+ ),
+ ...searchFieldMetadataActions.delete.map(
+ (deleteAction) =>
+ findFlatEntityByUniversalIdentifier({
+ flatEntityMaps:
+ fromFlatSearchFieldMetadataMaps ??
+ emptyFlatSearchFieldMetadataMaps,
+ universalIdentifier: deleteAction.universalIdentifier,
+ })?.tsVectorFieldMetadataUniversalIdentifier,
+ ),
+ ...renamedFieldSearchFieldMetadataUniversalIdentifiers.map(
+ (searchFieldMetadataUniversalIdentifier) =>
+ findFlatEntityByUniversalIdentifier({
+ flatEntityMaps: toFlatSearchFieldMetadataMaps,
+ universalIdentifier: searchFieldMetadataUniversalIdentifier,
+ })?.tsVectorFieldMetadataUniversalIdentifier,
+ ),
+ ].filter(isDefined),
+ );
+
+ const fieldUniversalIdentifiersBeingCreatedOrDeleted = new Set([
+ ...orchestratorActionsReport.fieldMetadata.create.map(
+ (createFieldAction) => createFieldAction.flatEntity.universalIdentifier,
+ ),
+ ...orchestratorActionsReport.objectMetadata.create.flatMap(
+ (createObjectAction) =>
+ createObjectAction.universalFlatFieldMetadatas.map(
+ (universalFlatFieldMetadata) =>
+ universalFlatFieldMetadata.universalIdentifier,
+ ),
+ ),
+ ...orchestratorActionsReport.fieldMetadata.delete.map(
+ (deleteFieldAction) => deleteFieldAction.universalIdentifier,
+ ),
+ ]);
+
+ return new Set(
+ [...candidateFieldMetadataVectorUniversalIdentifiers].filter(
+ (vectorUniversalIdentifier) =>
+ !fieldUniversalIdentifiersBeingCreatedOrDeleted.has(
+ vectorUniversalIdentifier,
+ ),
+ ),
+ );
+};
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/field/types/workspace-migration-field-action.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/field/types/workspace-migration-field-action.ts
index 2f50626a66..df1e5d008e 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/field/types/workspace-migration-field-action.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/field/types/workspace-migration-field-action.ts
@@ -23,7 +23,9 @@ export type UniversalCreateFieldAction =
};
export type UniversalUpdateFieldAction =
- BaseUniversalUpdateWorkspaceMigrationAction<'fieldMetadata'>;
+ BaseUniversalUpdateWorkspaceMigrationAction<'fieldMetadata'> & {
+ rebuildSearchVector?: boolean;
+ };
export type UniversalDeleteFieldAction =
BaseUniversalDeleteWorkspaceMigrationAction<'fieldMetadata'>;
@@ -35,7 +37,9 @@ export type FlatCreateFieldAction =
};
export type FlatUpdateFieldAction =
- BaseFlatUpdateWorkspaceMigrationAction<'fieldMetadata'>;
+ BaseFlatUpdateWorkspaceMigrationAction<'fieldMetadata'> & {
+ rebuildSearchVector?: boolean;
+ };
export type FlatDeleteFieldAction =
BaseFlatDeleteWorkspaceMigrationAction<'fieldMetadata'>;
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-search-field-metadata-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-search-field-metadata-validator.service.ts
index 0dd8d06a68..f3569a277a 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-search-field-metadata-validator.service.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-search-field-metadata-validator.service.ts
@@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common';
import { msg, t } from '@lingui/core/macro';
import { ALL_METADATA_NAME } from 'twenty-shared/metadata';
+import { FieldMetadataType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { findFlatEntityByUniversalIdentifier } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier.util';
@@ -70,6 +71,39 @@ export class FlatSearchFieldMetadataValidatorService {
});
}
+ const flatTsVectorFieldMetadata = findFlatEntityByUniversalIdentifier({
+ universalIdentifier:
+ flatSearchFieldMetadataToValidate.tsVectorFieldMetadataUniversalIdentifier,
+ flatEntityMaps: flatFieldMetadataMaps,
+ });
+
+ if (!isDefined(flatTsVectorFieldMetadata)) {
+ validationResult.errors.push({
+ code: SearchFieldMetadataExceptionCode.TS_VECTOR_FIELD_METADATA_NOT_FOUND,
+ message: t`TS_VECTOR field metadata not found`,
+ userFriendlyMessage: msg`Search vector field not found`,
+ });
+ } else {
+ if (flatTsVectorFieldMetadata.type !== FieldMetadataType.TS_VECTOR) {
+ validationResult.errors.push({
+ code: SearchFieldMetadataExceptionCode.INVALID_TS_VECTOR_FIELD_METADATA,
+ message: t`TS_VECTOR field metadata must be of type TS_VECTOR`,
+ userFriendlyMessage: msg`Search vector field must be a search vector`,
+ });
+ }
+
+ if (
+ flatTsVectorFieldMetadata.objectMetadataUniversalIdentifier !==
+ flatSearchFieldMetadataToValidate.objectMetadataUniversalIdentifier
+ ) {
+ validationResult.errors.push({
+ code: SearchFieldMetadataExceptionCode.INVALID_TS_VECTOR_FIELD_METADATA,
+ message: t`TS_VECTOR field metadata must belong to the same object`,
+ userFriendlyMessage: msg`Search vector field must belong to the same object`,
+ });
+ }
+ }
+
const flatObjectMetadata = findFlatEntityByUniversalIdentifier({
universalIdentifier:
flatSearchFieldMetadataToValidate.objectMetadataUniversalIdentifier,
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/field/services/update-field-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/field/services/update-field-action-handler.service.ts
index 2eb490bf9c..fd42d0f5fc 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/field/services/update-field-action-handler.service.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/field/services/update-field-action-handler.service.ts
@@ -15,12 +15,14 @@ import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/
import { computeCompositeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util';
import { getCompositeTypeOrThrow } from 'src/engine/metadata-modules/field-metadata/utils/get-composite-type-or-throw.util';
import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
+import { findManyFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps.util';
import { findFlatEntityByUniversalIdentifierOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier-or-throw.util';
import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { isCompositeFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-composite-flat-field-metadata.util';
import { isEnumFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-enum-flat-field-metadata.util';
import { isFlatFieldMetadataOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util';
import { isMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util';
+import { deriveSearchVectorAsExpressionForTsVectorField } from 'src/engine/metadata-modules/flat-search-field-metadata/utils/derive-search-vector-as-expression-for-ts-vector-field.util';
import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service';
import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util';
@@ -124,6 +126,7 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct
metadataName: 'fieldMetadata',
entityId: flatFieldMetadata.id,
update,
+ rebuildSearchVector: action.rebuildSearchVector,
};
}
@@ -161,7 +164,11 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct
const {
flatAction,
queryRunner,
- allFlatEntityMaps: { flatObjectMetadataMaps, flatFieldMetadataMaps },
+ allFlatEntityMaps: {
+ flatObjectMetadataMaps,
+ flatFieldMetadataMaps,
+ flatSearchFieldMetadataMaps,
+ },
workspaceId,
} = context;
const { entityId, update } = flatAction;
@@ -239,49 +246,6 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct
}
if (isDefined(update.settings)) {
- // Handle asExpression/generatedType change (for TS_VECTOR fields)
- if (
- isFlatFieldMetadataOfType(
- optimisticFlatFieldMetadata,
- FieldMetadataType.TS_VECTOR,
- )
- ) {
- const fromSettings =
- optimisticFlatFieldMetadata.settings as FieldMetadataSettingsMapping['TS_VECTOR'];
- const toSettings =
- update.settings as FieldMetadataSettingsMapping['TS_VECTOR'];
-
- if (
- isDefined(toSettings?.asExpression) &&
- (toSettings.asExpression !== fromSettings?.asExpression ||
- toSettings.generatedType !== fromSettings?.generatedType)
- ) {
- await this.workspaceSchemaManagerService.columnManager.dropColumns({
- queryRunner,
- schemaName,
- tableName,
- columnNames: [optimisticFlatFieldMetadata.name],
- });
- await this.workspaceSchemaManagerService.columnManager.addColumns({
- queryRunner,
- schemaName,
- tableName,
- columnDefinitions: [
- {
- name: optimisticFlatFieldMetadata.name,
- type: 'tsvector',
- ...toSettings,
- },
- ],
- });
-
- optimisticFlatFieldMetadata = {
- ...optimisticFlatFieldMetadata,
- settings: toSettings,
- };
- }
- }
-
// Handle onDelete change (for morph/relation fields) order matters
if (isMorphOrRelationFlatFieldMetadata(optimisticFlatFieldMetadata)) {
const fromSettings = optimisticFlatFieldMetadata.settings;
@@ -357,6 +321,54 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct
}
}
}
+
+ if (
+ flatAction.rebuildSearchVector === true &&
+ isFlatFieldMetadataOfType(
+ optimisticFlatFieldMetadata,
+ FieldMetadataType.TS_VECTOR,
+ )
+ ) {
+ const indexedFieldById = new Map(
+ findManyFlatEntityByIdInFlatEntityMaps({
+ flatEntityMaps: flatFieldMetadataMaps,
+ flatEntityIds: flatObjectMetadata.fieldIds,
+ }).map((indexedFlatFieldMetadata) => [
+ indexedFlatFieldMetadata.id,
+ {
+ name: indexedFlatFieldMetadata.name,
+ type: indexedFlatFieldMetadata.type,
+ },
+ ]),
+ );
+
+ const searchVectorAsExpression =
+ deriveSearchVectorAsExpressionForTsVectorField({
+ tsVectorFieldMetadataId: optimisticFlatFieldMetadata.id,
+ flatSearchFieldMetadataMaps,
+ indexedFieldById,
+ });
+
+ const columnDefinitions = generateColumnDefinitions({
+ flatFieldMetadata: optimisticFlatFieldMetadata,
+ flatObjectMetadata,
+ workspaceId,
+ searchVectorAsExpression,
+ });
+
+ await this.workspaceSchemaManagerService.columnManager.dropColumns({
+ queryRunner,
+ schemaName,
+ tableName,
+ columnNames: [optimisticFlatFieldMetadata.name],
+ });
+ await this.workspaceSchemaManagerService.columnManager.addColumns({
+ queryRunner,
+ schemaName,
+ tableName,
+ columnDefinitions,
+ });
+ }
}
private async handleFieldNameUpdate({
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/field/services/utils/from-universal-flat-field-metadata-to-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/field/services/utils/from-universal-flat-field-metadata-to-flat-field-metadata.util.ts
index f769258bb8..7f8b8b884c 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/field/services/utils/from-universal-flat-field-metadata-to-flat-field-metadata.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/field/services/utils/from-universal-flat-field-metadata-to-flat-field-metadata.util.ts
@@ -135,6 +135,7 @@ export const fromUniversalFlatFieldMetadataToFlatFieldMetadata = ({
mainGroupByFieldMetadataViewIds: [],
kanbanAggregateOperationViewIds: [],
viewSortIds: [],
+ searchFieldMetadataIds: [],
...emptyUniversalForeignKeyAggregators,
};
};
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/object/services/create-object-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/object/services/create-object-action-handler.service.ts
index e547632a80..7531193b76 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/object/services/create-object-action-handler.service.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/object/services/create-object-action-handler.service.ts
@@ -1,5 +1,6 @@
import { Injectable } from '@nestjs/common';
+import { FieldMetadataType } from 'twenty-shared/types';
import { v4 } from 'uuid';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
@@ -7,6 +8,8 @@ import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-mana
import { ALL_METADATA_ENTITY_BY_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-entity-by-metadata-name.constant';
import { isCompositeFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-composite-flat-field-metadata.util';
import { isEnumFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-enum-flat-field-metadata.util';
+import { isFlatFieldMetadataOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util';
+import { deriveSearchVectorAsExpressionForTsVectorField } from 'src/engine/metadata-modules/flat-search-field-metadata/utils/derive-search-vector-as-expression-for-ts-vector-field.util';
import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service';
import {
FlatCreateObjectAction,
@@ -117,7 +120,7 @@ export class CreateObjectActionHandlerService extends WorkspaceMigrationRunnerAc
async executeForWorkspaceSchema(
context: WorkspaceMigrationActionRunnerContext,
): Promise {
- const { flatAction, queryRunner, workspaceId } = context;
+ const { flatAction, queryRunner, workspaceId, allFlatEntityMaps } = context;
const { flatEntity: flatObjectMetadata, flatFieldMetadatas } = flatAction;
const { schemaName, tableName } = getWorkspaceSchemaContextForMigration({
@@ -125,11 +128,29 @@ export class CreateObjectActionHandlerService extends WorkspaceMigrationRunnerAc
objectMetadata: flatObjectMetadata,
});
+ const indexedFieldById = new Map(
+ flatFieldMetadatas.map((flatFieldMetadata) => [
+ flatFieldMetadata.id,
+ { name: flatFieldMetadata.name, type: flatFieldMetadata.type },
+ ]),
+ );
+
const columnDefinitions = flatFieldMetadatas.flatMap((flatFieldMetadata) =>
generateColumnDefinitions({
flatFieldMetadata,
flatObjectMetadata,
workspaceId,
+ searchVectorAsExpression: isFlatFieldMetadataOfType(
+ flatFieldMetadata,
+ FieldMetadataType.TS_VECTOR,
+ )
+ ? deriveSearchVectorAsExpressionForTsVectorField({
+ tsVectorFieldMetadataId: flatFieldMetadata.id,
+ flatSearchFieldMetadataMaps:
+ allFlatEntityMaps.flatSearchFieldMetadataMaps,
+ indexedFieldById,
+ })
+ : undefined,
}),
);
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/search-field-metadata/services/create-search-field-metadata-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/search-field-metadata/services/create-search-field-metadata-action-handler.service.ts
index 01946b39ab..094b813f00 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/search-field-metadata/services/create-search-field-metadata-action-handler.service.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/search-field-metadata/services/create-search-field-metadata-action-handler.service.ts
@@ -4,11 +4,11 @@ import { v4 } from 'uuid';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
+import { resolveUniversalRelationIdentifiersToIds } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util';
import {
FlatCreateSearchFieldMetadataAction,
UniversalCreateSearchFieldMetadataAction,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/search-field-metadata/types/workspace-migration-search-field-metadata-action.type';
-import { resolveUniversalRelationIdentifiersToIds } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util';
import {
WorkspaceMigrationActionRunnerArgs,
WorkspaceMigrationActionRunnerContext,
@@ -24,12 +24,14 @@ export class CreateSearchFieldMetadataActionHandlerService extends WorkspaceMigr
allFlatEntityMaps,
flatApplication,
workspaceId,
+ preallocatedIdByUniversalIdentifierByMetadataName,
}: WorkspaceMigrationActionRunnerArgs): Promise {
- const { objectMetadataId, fieldMetadataId } =
+ const { objectMetadataId, fieldMetadataId, tsVectorFieldMetadataId } =
resolveUniversalRelationIdentifiersToIds({
flatEntityMaps: allFlatEntityMaps,
metadataName: action.metadataName,
universalForeignKeyValues: action.flatEntity,
+ preallocatedIdByUniversalIdentifierByMetadataName,
});
return {
@@ -38,6 +40,7 @@ export class CreateSearchFieldMetadataActionHandlerService extends WorkspaceMigr
...action.flatEntity,
objectMetadataId,
fieldMetadataId,
+ tsVectorFieldMetadataId,
id: action.id ?? v4(),
applicationId: flatApplication.id,
workspaceId,
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/services/workspace-migration-runner.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/services/workspace-migration-runner.service.ts
index a36516dba1..ba59817138 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/services/workspace-migration-runner.service.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/services/workspace-migration-runner.service.ts
@@ -23,6 +23,7 @@ import {
WorkspaceMigrationRunnerExceptionCode,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/exceptions/workspace-migration-runner.exception';
import { WorkspaceMigrationRunnerActionHandlerRegistryService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/registry/workspace-migration-runner-action-handler-registry.service';
+import { buildPreallocatedIdByUniversalIdentifierFromActions } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/build-preallocated-id-by-universal-identifier-from-actions.util';
import { type AfterCommitSideEffect } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/after-commit-side-effect.type';
import { type MetadataEvent } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/metadata-event';
@@ -281,6 +282,9 @@ export class WorkspaceMigrationRunnerService {
});
}
+ const preallocatedIdByUniversalIdentifierByMetadataName =
+ buildPreallocatedIdByUniversalIdentifierFromActions(actions);
+
this.logger.perfTime('Runner', 'Transaction execution');
await queryRunner.connect();
@@ -313,6 +317,7 @@ export class WorkspaceMigrationRunnerService {
allFlatEntityMaps,
queryRunner,
workspaceId,
+ preallocatedIdByUniversalIdentifierByMetadataName,
},
},
);
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type.ts
index 930fcd18f4..80c12593d8 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type.ts
@@ -2,6 +2,7 @@ import { type QueryRunner } from 'typeorm';
import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type';
import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type';
+import { type PreallocatedIdByUniversalIdentifierByMetadataName } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util';
import {
type AllFlatWorkspaceMigrationAction,
type AllUniversalWorkspaceMigrationAction,
@@ -15,6 +16,7 @@ export type WorkspaceMigrationActionRunnerArgs<
allFlatEntityMaps: AllFlatEntityMaps;
workspaceId: string;
flatApplication: FlatApplication;
+ preallocatedIdByUniversalIdentifierByMetadataName?: PreallocatedIdByUniversalIdentifierByMetadataName;
};
export type WorkspaceMigrationActionRunnerContext<
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/build-preallocated-id-by-universal-identifier-from-actions.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/build-preallocated-id-by-universal-identifier-from-actions.util.ts
new file mode 100644
index 0000000000..63ffd8c9bb
--- /dev/null
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/build-preallocated-id-by-universal-identifier-from-actions.util.ts
@@ -0,0 +1,57 @@
+import { isDefined } from 'twenty-shared/utils';
+
+import { type PreallocatedIdByUniversalIdentifierByMetadataName } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util';
+import { type AllUniversalWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/workspace-migration-action-common';
+
+export const buildPreallocatedIdByUniversalIdentifierFromActions = (
+ actions: AllUniversalWorkspaceMigrationAction[],
+): PreallocatedIdByUniversalIdentifierByMetadataName => {
+ const objectMetadata: Record = {};
+ const fieldMetadata: Record = {};
+
+ for (const action of actions) {
+ if (action.type !== 'create') {
+ continue;
+ }
+
+ if (action.metadataName === 'objectMetadata') {
+ if (isDefined(action.id)) {
+ objectMetadata[action.flatEntity.universalIdentifier] = action.id;
+ }
+
+ const fieldIdByUniversalIdentifier =
+ action.fieldIdByUniversalIdentifier ?? {};
+
+ for (const universalFlatFieldMetadata of action.universalFlatFieldMetadatas) {
+ const fieldId =
+ fieldIdByUniversalIdentifier[
+ universalFlatFieldMetadata.universalIdentifier
+ ];
+
+ if (isDefined(fieldId)) {
+ fieldMetadata[universalFlatFieldMetadata.universalIdentifier] =
+ fieldId;
+ }
+ }
+
+ continue;
+ }
+
+ if (action.metadataName === 'fieldMetadata') {
+ if (isDefined(action.id)) {
+ fieldMetadata[action.flatEntity.universalIdentifier] = action.id;
+ }
+
+ if (
+ isDefined(action.relatedUniversalFlatFieldMetadata) &&
+ isDefined(action.relatedFieldId)
+ ) {
+ fieldMetadata[
+ action.relatedUniversalFlatFieldMetadata.universalIdentifier
+ ] = action.relatedFieldId;
+ }
+ }
+ }
+
+ return { objectMetadata, fieldMetadata };
+};
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/generate-column-definitions.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/generate-column-definitions.util.ts
index 0e7d38da23..22b35841d5 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/generate-column-definitions.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/generate-column-definitions.util.ts
@@ -99,6 +99,7 @@ export const generateCompositeColumnDefinition = ({
const generateTsVectorColumnDefinition = (
flatFieldMetadata: FlatFieldMetadata,
+ searchVectorAsExpression?: string,
): WorkspaceSchemaColumnDefinition => {
const columnName = computeColumnName(flatFieldMetadata.name);
@@ -108,8 +109,8 @@ const generateTsVectorColumnDefinition = (
isNullable: true,
isArray: false,
default: null,
- asExpression: flatFieldMetadata.settings?.asExpression ?? undefined,
- generatedType: flatFieldMetadata.settings?.generatedType ?? undefined,
+ asExpression: searchVectorAsExpression ?? undefined,
+ generatedType: 'STORED',
isPrimary: false,
};
};
@@ -177,10 +178,12 @@ export const generateColumnDefinitions = ({
flatFieldMetadata,
flatObjectMetadata,
workspaceId,
+ searchVectorAsExpression,
}: {
flatFieldMetadata: FlatFieldMetadata;
flatObjectMetadata: FlatObjectMetadata;
workspaceId: string;
+ searchVectorAsExpression?: string;
}): WorkspaceSchemaColumnDefinition[] => {
const { tableName, schemaName } = getWorkspaceSchemaContextForMigration({
workspaceId,
@@ -203,7 +206,12 @@ export const generateColumnDefinitions = ({
if (
isFlatFieldMetadataOfType(flatFieldMetadata, FieldMetadataType.TS_VECTOR)
) {
- return [generateTsVectorColumnDefinition(flatFieldMetadata)];
+ return [
+ generateTsVectorColumnDefinition(
+ flatFieldMetadata,
+ searchVectorAsExpression,
+ ),
+ ];
}
if (isMorphOrRelationFlatFieldMetadata(flatFieldMetadata)) {
diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-create-action-on-all-flat-entity-maps.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-create-action-on-all-flat-entity-maps.util.ts
index 77d0ef6847..607085baa4 100644
--- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-create-action-on-all-flat-entity-maps.util.ts
+++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/optimistically-apply-create-action-on-all-flat-entity-maps.util.ts
@@ -47,6 +47,18 @@ export const optimisticallyApplyCreateActionOnAllFlatEntityMaps = ({
return allFlatEntityMaps;
}
+ case 'searchFieldMetadata': {
+ addFlatEntityToFlatEntityAndRelatedEntityMapsThroughMutationOrThrow({
+ flatEntity: flatAction.flatEntity,
+ flatEntityAndRelatedMapsToMutate: allFlatEntityMaps,
+ metadataName: flatAction.metadataName,
+ // searchFieldMetadata is created before its parent object/fields, which
+ // therefore aren't in the maps yet to back-link to.
+ skipMissingRelatedEntities: true,
+ });
+
+ return allFlatEntityMaps;
+ }
case 'view':
case 'viewField':
case 'viewGroup':
@@ -74,8 +86,7 @@ export const optimisticallyApplyCreateActionOnAllFlatEntityMaps = ({
case 'fieldPermission':
case 'webhook':
case 'applicationVariable':
- case 'connectionProvider':
- case 'searchFieldMetadata': {
+ case 'connectionProvider': {
addFlatEntityToFlatEntityAndRelatedEntityMapsThroughMutationOrThrow({
flatEntity: flatAction.flatEntity,
flatEntityAndRelatedMapsToMutate: allFlatEntityMaps,
diff --git a/packages/twenty-server/src/utils/__test__/get-field-metadata-entity.mock.ts b/packages/twenty-server/src/utils/__test__/get-field-metadata-entity.mock.ts
index a91f083057..59f6859bfe 100644
--- a/packages/twenty-server/src/utils/__test__/get-field-metadata-entity.mock.ts
+++ b/packages/twenty-server/src/utils/__test__/get-field-metadata-entity.mock.ts
@@ -28,6 +28,7 @@ export const getMockFieldMetadataEntity = <
viewFields: [],
kanbanAggregateOperationViews: [],
viewSorts: [],
+ searchFieldMetadatas: [],
morphId: null,
fieldPermissions: [],
icon: null,
diff --git a/packages/twenty-server/test/integration/metadata/suites/application/__snapshots__/failing-sync-application-object-system-fields.integration-spec.ts.snap b/packages/twenty-server/test/integration/metadata/suites/application/__snapshots__/failing-sync-application-object-system-fields.integration-spec.ts.snap
index 76ba10724c..04c7117dbc 100644
--- a/packages/twenty-server/test/integration/metadata/suites/application/__snapshots__/failing-sync-application-object-system-fields.integration-spec.ts.snap
+++ b/packages/twenty-server/test/integration/metadata/suites/application/__snapshots__/failing-sync-application-object-system-fields.integration-spec.ts.snap
@@ -1,4 +1,4 @@
-// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
+// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Sync application should fail due to object system fields integrity should fail when trying to delete a system field after a successful sync 1`] = `
{
@@ -79,34 +79,9 @@ exports[`Sync application should fail due to object system fields integrity when
"extensions": {
"code": "METADATA_VALIDATION_FAILED",
"errors": {
- "fieldMetadata": [
- {
- "errors": [
- {
- "code": "INVALID_FIELD_INPUT",
- "message": "Field type TS_VECTOR must have an expression. This may have failed to be built because record identifier field does not exist or is not of a searchable type.",
- "userFriendlyMessage": "Field type TS_VECTOR must have an expression. This may have failed to be built because record identifier field does not exist or is not of a searchable type.",
- },
- ],
- "flatEntityMinimalInformation": {
- "name": "searchVector",
- "objectMetadataUniversalIdentifier": Any,
- "universalIdentifier": Any,
- },
- "metadataName": "fieldMetadata",
- "status": "fail",
- "type": "create",
- },
- ],
"objectMetadata": [
{
"errors": [
- {
- "code": "MISSING_SYSTEM_FIELD",
- "message": "System field searchVector is missing",
- "userFriendlyMessage": "System field searchVector is missing",
- "value": "searchVector",
- },
{
"code": "INVALID_OBJECT_INPUT",
"message": "labelIdentifierFieldMetadataUniversalIdentifier validation failed: field type not compatible",
@@ -123,13 +98,12 @@ exports[`Sync application should fail due to object system fields integrity when
},
],
},
- "message": "Validation failed for 1 fieldMetadata, 1 objectMetadata",
+ "message": "Validation failed for 1 objectMetadata",
"summary": {
- "fieldMetadata": 1,
"objectMetadata": 1,
- "totalErrors": 2,
+ "totalErrors": 1,
},
- "userFriendlyMessage": "Many validation errors",
+ "userFriendlyMessage": "Field cannot be used as label identifier due to its type: should be of type UUID, text or full name",
},
"message": "Validation errors occurred while syncing application manifest metadata",
"name": "GraphQLError",
diff --git a/packages/twenty-server/test/integration/metadata/suites/application/__snapshots__/successful-sync-application-workspace-migration.integration-spec.ts.snap b/packages/twenty-server/test/integration/metadata/suites/application/__snapshots__/successful-sync-application-workspace-migration.integration-spec.ts.snap
index 1e02effefa..f872e20662 100644
--- a/packages/twenty-server/test/integration/metadata/suites/application/__snapshots__/successful-sync-application-workspace-migration.integration-spec.ts.snap
+++ b/packages/twenty-server/test/integration/metadata/suites/application/__snapshots__/successful-sync-application-workspace-migration.integration-spec.ts.snap
@@ -69,6 +69,7 @@ exports[`syncApplication should delete old field and create equivalent one when
"syncApplication": {
"actions": [
{
+ "fieldIdByUniversalIdentifier": Any