Refactor seed to use twenty-standard application (#16598)
# Introduction In this pull-request we introduce a service dedicated to the twenty-standard app installation, we will later be able to re-use existing logic to be more generic and allow any app installation. For the moment sticking to this usage https://github.com/twentyhq/core-team-issues/issues/1995 ## Encountered issues - We decided not to migrate deprecated fields ( also they will become custom field for any existing workspace having them in the future ) - duplicate criteria - wrong search index declaration - forgotten isSearchable - Attachement seed - Restored standardId ## Note For the moment we're still searching through standardId for code that run on both existing and new workspaces. For code running on new workspace exclusively we're searching using universalIdentifier We will standardize universalIdentifier usage later when we've migratred all the existing workspaces ## Workspace creation Will handle workspace creation the same way in another PR Related https://github.com/twentyhq/twenty/pull/15065 ## TODO - [ ] Double all frontend hardcoded queries to not refer to deprecated fields especially attachments
This commit is contained in:
@@ -9,8 +9,6 @@ export type Attachment = {
|
|||||||
fileCategory: AttachmentFileCategory;
|
fileCategory: AttachmentFileCategory;
|
||||||
companyId: string;
|
companyId: string;
|
||||||
personId: string;
|
personId: string;
|
||||||
// Deprecated: Use createdBy instead
|
|
||||||
authorId?: string;
|
|
||||||
createdBy?: {
|
createdBy?: {
|
||||||
source: string;
|
source: string;
|
||||||
workspaceMemberId: string | null;
|
workspaceMemberId: string | null;
|
||||||
|
|||||||
@@ -125,8 +125,6 @@ export const query = gql`
|
|||||||
personId
|
personId
|
||||||
companyId
|
companyId
|
||||||
id
|
id
|
||||||
authorId
|
|
||||||
type
|
|
||||||
fullPath
|
fullPath
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+22
-20
@@ -2,8 +2,6 @@ import { Injectable, Logger } from '@nestjs/common';
|
|||||||
|
|
||||||
import { parse } from 'path';
|
import { parse } from 'path';
|
||||||
|
|
||||||
import { isDefined } from 'twenty-shared/utils';
|
|
||||||
import { HTTPMethod, Sources } from 'twenty-shared/types';
|
|
||||||
import {
|
import {
|
||||||
ApplicationManifest,
|
ApplicationManifest,
|
||||||
FieldManifest,
|
FieldManifest,
|
||||||
@@ -12,6 +10,8 @@ import {
|
|||||||
ServerlessFunctionManifest,
|
ServerlessFunctionManifest,
|
||||||
ServerlessFunctionTriggerManifest,
|
ServerlessFunctionTriggerManifest,
|
||||||
} from 'twenty-shared/application';
|
} from 'twenty-shared/application';
|
||||||
|
import { HTTPMethod, Sources } from 'twenty-shared/types';
|
||||||
|
import { isDefined } from 'twenty-shared/utils';
|
||||||
|
|
||||||
import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity';
|
import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity';
|
||||||
import {
|
import {
|
||||||
@@ -29,9 +29,14 @@ import { FlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-e
|
|||||||
import { CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input';
|
import { CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input';
|
||||||
import { FieldMetadataService } from 'src/engine/metadata-modules/field-metadata/services/field-metadata.service';
|
import { FieldMetadataService } from 'src/engine/metadata-modules/field-metadata/services/field-metadata.service';
|
||||||
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
|
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
|
||||||
import { getFlatEntitiesByApplicationId } from 'src/engine/metadata-modules/flat-entity/utils/get-flat-entities-by-application-id.util';
|
import { findFlatEntitiesByApplicationId } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entities-by-application-id.util';
|
||||||
import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||||
|
import { buildObjectIdByNameMaps } from 'src/engine/metadata-modules/flat-object-metadata/utils/build-object-id-by-name-maps.util';
|
||||||
import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service';
|
import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service';
|
||||||
|
import { FieldPermissionService } from 'src/engine/metadata-modules/object-permission/field-permission/field-permission.service';
|
||||||
|
import { ObjectPermissionService } from 'src/engine/metadata-modules/object-permission/object-permission.service';
|
||||||
|
import { PermissionFlagService } from 'src/engine/metadata-modules/permission-flag/permission-flag.service';
|
||||||
|
import { RoleService } from 'src/engine/metadata-modules/role/role.service';
|
||||||
import { RouteTriggerV2Service } from 'src/engine/metadata-modules/route-trigger/services/route-trigger-v2.service';
|
import { RouteTriggerV2Service } from 'src/engine/metadata-modules/route-trigger/services/route-trigger-v2.service';
|
||||||
import { FlatRouteTrigger } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type';
|
import { FlatRouteTrigger } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type';
|
||||||
import { ServerlessFunctionLayerService } from 'src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.service';
|
import { ServerlessFunctionLayerService } from 'src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.service';
|
||||||
@@ -39,11 +44,6 @@ import { ServerlessFunctionV2Service } from 'src/engine/metadata-modules/serverl
|
|||||||
import { FlatServerlessFunction } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type';
|
import { FlatServerlessFunction } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type';
|
||||||
import { computeMetadataNameFromLabelOrThrow } from 'src/engine/metadata-modules/utils/compute-metadata-name-from-label-or-throw.util';
|
import { computeMetadataNameFromLabelOrThrow } from 'src/engine/metadata-modules/utils/compute-metadata-name-from-label-or-throw.util';
|
||||||
import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-validate-build-and-run-service';
|
import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-validate-build-and-run-service';
|
||||||
import { RoleService } from 'src/engine/metadata-modules/role/role.service';
|
|
||||||
import { ObjectPermissionService } from 'src/engine/metadata-modules/object-permission/object-permission.service';
|
|
||||||
import { PermissionFlagService } from 'src/engine/metadata-modules/permission-flag/permission-flag.service';
|
|
||||||
import { buildObjectIdByNameMaps } from 'src/engine/metadata-modules/flat-object-metadata/utils/build-object-id-by-name-maps.util';
|
|
||||||
import { FieldPermissionService } from 'src/engine/metadata-modules/object-permission/field-permission/field-permission.service';
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ApplicationSyncService {
|
export class ApplicationSyncService {
|
||||||
@@ -1172,20 +1172,22 @@ export class ApplicationSyncService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const flatObjectMetadataMapsByApplicationId =
|
const flatObjectMetadataMapsByApplicationId =
|
||||||
getFlatEntitiesByApplicationId(
|
findFlatEntitiesByApplicationId({
|
||||||
existingFlatObjectMetadataMaps,
|
flatEntityMaps: existingFlatObjectMetadataMaps,
|
||||||
application.id,
|
applicationId: application.id,
|
||||||
);
|
});
|
||||||
|
|
||||||
const flatIndexMetadataMapsByApplicationId = getFlatEntitiesByApplicationId(
|
const flatIndexMetadataMapsByApplicationId =
|
||||||
existingFlatIndexMetadataMaps,
|
findFlatEntitiesByApplicationId({
|
||||||
application.id,
|
flatEntityMaps: existingFlatIndexMetadataMaps,
|
||||||
);
|
applicationId: application.id,
|
||||||
|
});
|
||||||
|
|
||||||
const flatFieldMetadataMapsByApplicationId = getFlatEntitiesByApplicationId(
|
const flatFieldMetadataMapsByApplicationId =
|
||||||
existingFlatFieldMetadataMaps,
|
findFlatEntitiesByApplicationId({
|
||||||
application.id,
|
flatEntityMaps: existingFlatFieldMetadataMaps,
|
||||||
);
|
applicationId: application.id,
|
||||||
|
});
|
||||||
|
|
||||||
await this.workspaceMigrationValidateBuildAndRunService.validateBuildAndRunWorkspaceMigration(
|
await this.workspaceMigrationValidateBuildAndRunService.validateBuildAndRunWorkspaceMigration(
|
||||||
{
|
{
|
||||||
|
|||||||
-27
@@ -54,33 +54,6 @@ export class AiAgentRoleService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async assignStandardRoleToAgent({
|
|
||||||
workspaceId,
|
|
||||||
agentId,
|
|
||||||
standardRoleId,
|
|
||||||
}: {
|
|
||||||
workspaceId: string;
|
|
||||||
agentId: string;
|
|
||||||
standardRoleId: string;
|
|
||||||
}) {
|
|
||||||
const role = await this.roleRepository.findOne({
|
|
||||||
where: { standardId: standardRoleId, workspaceId },
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!isDefined(role)) {
|
|
||||||
throw new AgentException(
|
|
||||||
`Standard role with standard ID ${standardRoleId} not found in workspace`,
|
|
||||||
AgentExceptionCode.ROLE_NOT_FOUND,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
await this.assignRoleToAgent({
|
|
||||||
workspaceId,
|
|
||||||
agentId,
|
|
||||||
roleId: role.id,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public async removeRoleFromAgent({
|
public async removeRoleFromAgent({
|
||||||
workspaceId,
|
workspaceId,
|
||||||
agentId,
|
agentId,
|
||||||
|
|||||||
+10
-7
@@ -3,12 +3,15 @@ import { isDefined } from 'twenty-shared/utils';
|
|||||||
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
|
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
|
||||||
import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type';
|
import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type';
|
||||||
|
|
||||||
export const getFlatEntitiesByApplicationId = <T extends SyncableFlatEntity>(
|
export const findFlatEntitiesByApplicationId = <T extends SyncableFlatEntity>({
|
||||||
maps: FlatEntityMaps<T>,
|
applicationId,
|
||||||
applicationId: string,
|
flatEntityMaps,
|
||||||
): T[] => {
|
}: {
|
||||||
|
flatEntityMaps: FlatEntityMaps<T>;
|
||||||
|
applicationId: string;
|
||||||
|
}): T[] => {
|
||||||
const universalIdentifiers =
|
const universalIdentifiers =
|
||||||
maps.universalIdentifiersByApplicationId[applicationId];
|
flatEntityMaps.universalIdentifiersByApplicationId[applicationId];
|
||||||
|
|
||||||
if (!isDefined(universalIdentifiers)) {
|
if (!isDefined(universalIdentifiers)) {
|
||||||
return [];
|
return [];
|
||||||
@@ -16,13 +19,13 @@ export const getFlatEntitiesByApplicationId = <T extends SyncableFlatEntity>(
|
|||||||
|
|
||||||
return universalIdentifiers
|
return universalIdentifiers
|
||||||
.map((universalId) => {
|
.map((universalId) => {
|
||||||
const id = maps.idByUniversalIdentifier[universalId];
|
const id = flatEntityMaps.idByUniversalIdentifier[universalId];
|
||||||
|
|
||||||
if (!isDefined(id)) {
|
if (!isDefined(id)) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
const entity = maps.byId[id];
|
const entity = flatEntityMaps.byId[id];
|
||||||
|
|
||||||
if (!isDefined(entity)) {
|
if (!isDefined(entity)) {
|
||||||
return undefined;
|
return undefined;
|
||||||
+11
-7
@@ -3,17 +3,21 @@ import { isDefined } from 'twenty-shared/utils';
|
|||||||
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
|
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
|
||||||
import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type';
|
import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type';
|
||||||
|
|
||||||
export const getFlatEntityByUniversalIdentifier = <
|
export const findFlatEntityByUniversalIdentifier = <
|
||||||
T extends SyncableFlatEntity,
|
T extends SyncableFlatEntity,
|
||||||
>(
|
>({
|
||||||
maps: FlatEntityMaps<T>,
|
flatEntityMaps,
|
||||||
universalIdentifier: string,
|
universalIdentifier,
|
||||||
): T | undefined => {
|
}: {
|
||||||
const flatEntityId = maps.idByUniversalIdentifier[universalIdentifier];
|
flatEntityMaps: FlatEntityMaps<T>;
|
||||||
|
universalIdentifier: string;
|
||||||
|
}): T | undefined => {
|
||||||
|
const flatEntityId =
|
||||||
|
flatEntityMaps.idByUniversalIdentifier[universalIdentifier];
|
||||||
|
|
||||||
if (!isDefined(flatEntityId)) {
|
if (!isDefined(flatEntityId)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
return maps.byId[flatEntityId];
|
return flatEntityMaps.byId[flatEntityId];
|
||||||
};
|
};
|
||||||
+24
@@ -0,0 +1,24 @@
|
|||||||
|
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
|
||||||
|
import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type';
|
||||||
|
import { findFlatEntitiesByApplicationId } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entities-by-application-id.util';
|
||||||
|
import { getSubFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util';
|
||||||
|
|
||||||
|
export const getSubFlatEntityMapsByApplicationIdOrThrow = <
|
||||||
|
T extends SyncableFlatEntity,
|
||||||
|
>({
|
||||||
|
applicationId,
|
||||||
|
flatEntityMaps,
|
||||||
|
}: {
|
||||||
|
applicationId: string;
|
||||||
|
flatEntityMaps: FlatEntityMaps<T>;
|
||||||
|
}) => {
|
||||||
|
const allApplicationFlatEntity = findFlatEntitiesByApplicationId({
|
||||||
|
applicationId,
|
||||||
|
flatEntityMaps,
|
||||||
|
});
|
||||||
|
|
||||||
|
return getSubFlatEntityMapsOrThrow({
|
||||||
|
flatEntityIds: allApplicationFlatEntity.map((flatEntity) => flatEntity.id),
|
||||||
|
flatEntityMaps,
|
||||||
|
});
|
||||||
|
};
|
||||||
@@ -8,7 +8,7 @@ import { Repository } from 'typeorm';
|
|||||||
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
|
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||||
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
|
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 { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
|
||||||
import { getFlatEntityByUniversalIdentifier } from 'src/engine/metadata-modules/flat-entity/utils/get-flat-entities-by-universal-identifier.util';
|
import { findFlatEntityByUniversalIdentifier } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier.util';
|
||||||
import { fromCreateRoleInputToFlatRoleToCreate } from 'src/engine/metadata-modules/flat-role/utils/from-create-role-input-to-flat-role-to-create.util';
|
import { fromCreateRoleInputToFlatRoleToCreate } from 'src/engine/metadata-modules/flat-role/utils/from-create-role-input-to-flat-role-to-create.util';
|
||||||
import { fromDeleteRoleInputToFlatRoleOrThrow } from 'src/engine/metadata-modules/flat-role/utils/from-delete-role-input-to-flat-role-or-throw.util';
|
import { fromDeleteRoleInputToFlatRoleOrThrow } from 'src/engine/metadata-modules/flat-role/utils/from-delete-role-input-to-flat-role-or-throw.util';
|
||||||
import { fromUpdateRoleInputToFlatRoleToUpdateOrThrow } from 'src/engine/metadata-modules/flat-role/utils/from-update-role-input-to-flat-role-to-update-or-throw.util';
|
import { fromUpdateRoleInputToFlatRoleToUpdateOrThrow } from 'src/engine/metadata-modules/flat-role/utils/from-update-role-input-to-flat-role-to-update-or-throw.util';
|
||||||
@@ -86,10 +86,10 @@ export class RoleService {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
const flatRoleEntity = getFlatEntityByUniversalIdentifier(
|
const flatRoleEntity = findFlatEntityByUniversalIdentifier({
|
||||||
flatRoleMaps,
|
flatEntityMaps: flatRoleMaps,
|
||||||
universalIdentifier,
|
universalIdentifier,
|
||||||
);
|
});
|
||||||
|
|
||||||
return isDefined(flatRoleEntity)
|
return isDefined(flatRoleEntity)
|
||||||
? fromFlatRoleToRoleDto(flatRoleEntity)
|
? fromFlatRoleToRoleDto(flatRoleEntity)
|
||||||
|
|||||||
+27
-31
@@ -4,7 +4,7 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm';
|
|||||||
import { WorkspaceActivationStatus } from 'twenty-shared/workspace';
|
import { WorkspaceActivationStatus } from 'twenty-shared/workspace';
|
||||||
import { DataSource, Repository } from 'typeorm';
|
import { DataSource, Repository } from 'typeorm';
|
||||||
|
|
||||||
import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity';
|
import { FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type';
|
||||||
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
|
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||||
import { FieldPermissionService } from 'src/engine/metadata-modules/object-permission/field-permission/field-permission.service';
|
import { FieldPermissionService } from 'src/engine/metadata-modules/object-permission/field-permission/field-permission.service';
|
||||||
@@ -13,7 +13,6 @@ import { RoleTargetService } from 'src/engine/metadata-modules/role-target/servi
|
|||||||
import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity';
|
import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity';
|
||||||
import { RoleService } from 'src/engine/metadata-modules/role/role.service';
|
import { RoleService } from 'src/engine/metadata-modules/role/role.service';
|
||||||
import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service';
|
import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service';
|
||||||
import { WorkspaceCacheService } from 'src/engine/workspace-cache/services/workspace-cache.service';
|
|
||||||
import {
|
import {
|
||||||
SEED_APPLE_WORKSPACE_ID,
|
SEED_APPLE_WORKSPACE_ID,
|
||||||
SEED_YCOMBINATOR_WORKSPACE_ID,
|
SEED_YCOMBINATOR_WORKSPACE_ID,
|
||||||
@@ -23,7 +22,7 @@ import {
|
|||||||
USER_WORKSPACE_DATA_SEED_IDS,
|
USER_WORKSPACE_DATA_SEED_IDS,
|
||||||
} from 'src/engine/workspace-manager/dev-seeder/core/utils/seed-user-workspaces.util';
|
} from 'src/engine/workspace-manager/dev-seeder/core/utils/seed-user-workspaces.util';
|
||||||
import { API_KEY_DATA_SEED_IDS } from 'src/engine/workspace-manager/dev-seeder/data/constants/api-key-data-seeds.constant';
|
import { API_KEY_DATA_SEED_IDS } from 'src/engine/workspace-manager/dev-seeder/data/constants/api-key-data-seeds.constant';
|
||||||
import { ADMIN_ROLE } from 'src/engine/workspace-manager/workspace-sync-metadata/standard-roles/roles/admin-role';
|
import { STANDARD_ROLE } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-role.constant';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class DevSeederPermissionsService {
|
export class DevSeederPermissionsService {
|
||||||
@@ -37,7 +36,6 @@ export class DevSeederPermissionsService {
|
|||||||
private readonly objectMetadataRepository: Repository<ObjectMetadataEntity>,
|
private readonly objectMetadataRepository: Repository<ObjectMetadataEntity>,
|
||||||
@InjectRepository(RoleEntity)
|
@InjectRepository(RoleEntity)
|
||||||
private readonly roleRepository: Repository<RoleEntity>,
|
private readonly roleRepository: Repository<RoleEntity>,
|
||||||
private readonly workspaceCacheService: WorkspaceCacheService,
|
|
||||||
private readonly fieldPermissionService: FieldPermissionService,
|
private readonly fieldPermissionService: FieldPermissionService,
|
||||||
private readonly roleTargetService: RoleTargetService,
|
private readonly roleTargetService: RoleTargetService,
|
||||||
@InjectDataSource()
|
@InjectDataSource()
|
||||||
@@ -45,15 +43,15 @@ export class DevSeederPermissionsService {
|
|||||||
) {}
|
) {}
|
||||||
|
|
||||||
public async initPermissions({
|
public async initPermissions({
|
||||||
twentyStandardApplication,
|
twentyStandardFlatApplication,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
}: {
|
}: {
|
||||||
workspaceId: string;
|
workspaceId: string;
|
||||||
twentyStandardApplication: ApplicationEntity;
|
twentyStandardFlatApplication: FlatApplication;
|
||||||
}) {
|
}) {
|
||||||
const adminRole = await this.roleRepository.findOne({
|
const adminRole = await this.roleRepository.findOne({
|
||||||
where: {
|
where: {
|
||||||
standardId: ADMIN_ROLE.standardId,
|
universalIdentifier: STANDARD_ROLE.admin.universalIdentifier,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@@ -64,21 +62,15 @@ export class DevSeederPermissionsService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
await this.roleTargetService.create({
|
||||||
await this.roleTargetService.create({
|
createRoleTargetInput: {
|
||||||
createRoleTargetInput: {
|
roleId: adminRole.id,
|
||||||
roleId: adminRole.id,
|
targetId: API_KEY_DATA_SEED_IDS.ID_1,
|
||||||
targetId: API_KEY_DATA_SEED_IDS.ID_1,
|
targetMetadataForeignKey: 'apiKeyId',
|
||||||
targetMetadataForeignKey: 'apiKeyId',
|
applicationId: twentyStandardFlatApplication.id,
|
||||||
applicationId: twentyStandardApplication.id,
|
},
|
||||||
},
|
workspaceId,
|
||||||
workspaceId,
|
});
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
this.logger.error(
|
|
||||||
`Could not assign role to test API key: ${error.message}`,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
let adminUserWorkspaceId: string | undefined;
|
let adminUserWorkspaceId: string | undefined;
|
||||||
let memberUserWorkspaceIds: string[] = [];
|
let memberUserWorkspaceIds: string[] = [];
|
||||||
@@ -96,7 +88,7 @@ export class DevSeederPermissionsService {
|
|||||||
|
|
||||||
const guestRole = await this.roleService.createGuestRole({
|
const guestRole = await this.roleService.createGuestRole({
|
||||||
workspaceId,
|
workspaceId,
|
||||||
applicationId: twentyStandardApplication.id,
|
applicationId: twentyStandardFlatApplication.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
await this.userRoleService.assignRoleToManyUserWorkspace({
|
await this.userRoleService.assignRoleToManyUserWorkspace({
|
||||||
@@ -107,7 +99,7 @@ export class DevSeederPermissionsService {
|
|||||||
|
|
||||||
const limitedRole = await this.createLimitedRoleForSeedWorkspace({
|
const limitedRole = await this.createLimitedRoleForSeedWorkspace({
|
||||||
workspaceId,
|
workspaceId,
|
||||||
applicationId: twentyStandardApplication.id,
|
applicationId: twentyStandardFlatApplication.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
await this.userRoleService.assignRoleToManyUserWorkspace({
|
await this.userRoleService.assignRoleToManyUserWorkspace({
|
||||||
@@ -124,17 +116,21 @@ export class DevSeederPermissionsService {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (adminUserWorkspaceId) {
|
if (!adminUserWorkspaceId) {
|
||||||
await this.userRoleService.assignRoleToManyUserWorkspace({
|
throw new Error(
|
||||||
workspaceId,
|
'Should never occur, no eligible user workspace for admin has been found',
|
||||||
userWorkspaceIds: [adminUserWorkspaceId],
|
);
|
||||||
roleId: adminRole.id,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await this.userRoleService.assignRoleToManyUserWorkspace({
|
||||||
|
workspaceId,
|
||||||
|
userWorkspaceIds: [adminUserWorkspaceId],
|
||||||
|
roleId: adminRole.id,
|
||||||
|
});
|
||||||
|
|
||||||
const memberRole = await this.roleService.createMemberRole({
|
const memberRole = await this.roleService.createMemberRole({
|
||||||
workspaceId,
|
workspaceId,
|
||||||
applicationId: twentyStandardApplication.id,
|
applicationId: twentyStandardFlatApplication.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
await this.coreDataSource
|
await this.coreDataSource
|
||||||
|
|||||||
+4
-36
@@ -11,10 +11,7 @@ type AttachmentDataSeed = {
|
|||||||
id: string;
|
id: string;
|
||||||
name: string;
|
name: string;
|
||||||
fullPath: string;
|
fullPath: string;
|
||||||
type: string;
|
fileCategory: string;
|
||||||
fileCategory?: string;
|
|
||||||
// Deprecated: Use createdBy instead
|
|
||||||
authorId: string | null;
|
|
||||||
createdBySource: string;
|
createdBySource: string;
|
||||||
createdByWorkspaceMemberId: string;
|
createdByWorkspaceMemberId: string;
|
||||||
createdByName: string;
|
createdByName: string;
|
||||||
@@ -29,9 +26,7 @@ export const ATTACHMENT_DATA_SEED_COLUMNS: (keyof AttachmentDataSeed)[] = [
|
|||||||
'id',
|
'id',
|
||||||
'name',
|
'name',
|
||||||
'fullPath',
|
'fullPath',
|
||||||
'type',
|
|
||||||
'fileCategory',
|
'fileCategory',
|
||||||
'authorId', // Deprecated: kept for backward compatibility during migration
|
|
||||||
'createdBySource',
|
'createdBySource',
|
||||||
'createdByWorkspaceMemberId',
|
'createdByWorkspaceMemberId',
|
||||||
'createdByName',
|
'createdByName',
|
||||||
@@ -71,152 +66,128 @@ const FILE_NAME_VARIATIONS = [
|
|||||||
// Documents
|
// Documents
|
||||||
{
|
{
|
||||||
name: 'Service Agreement.pdf',
|
name: 'Service Agreement.pdf',
|
||||||
type: 'TextDocument',
|
|
||||||
fileCategory: 'TEXT_DOCUMENT',
|
fileCategory: 'TEXT_DOCUMENT',
|
||||||
pathIndex: 0,
|
pathIndex: 0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'NDA Document.pdf',
|
name: 'NDA Document.pdf',
|
||||||
type: 'TextDocument',
|
|
||||||
fileCategory: 'TEXT_DOCUMENT',
|
fileCategory: 'TEXT_DOCUMENT',
|
||||||
pathIndex: 0,
|
pathIndex: 0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Project Proposal.pdf',
|
name: 'Project Proposal.pdf',
|
||||||
type: 'TextDocument',
|
|
||||||
fileCategory: 'TEXT_DOCUMENT',
|
fileCategory: 'TEXT_DOCUMENT',
|
||||||
pathIndex: 0,
|
pathIndex: 0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Invoice Q1 2024.pdf',
|
name: 'Invoice Q1 2024.pdf',
|
||||||
type: 'TextDocument',
|
|
||||||
fileCategory: 'TEXT_DOCUMENT',
|
fileCategory: 'TEXT_DOCUMENT',
|
||||||
pathIndex: 0,
|
pathIndex: 0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Meeting Notes.pdf',
|
name: 'Meeting Notes.pdf',
|
||||||
type: 'TextDocument',
|
|
||||||
fileCategory: 'TEXT_DOCUMENT',
|
fileCategory: 'TEXT_DOCUMENT',
|
||||||
pathIndex: 0,
|
pathIndex: 0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Report Final.pdf',
|
name: 'Report Final.pdf',
|
||||||
type: 'TextDocument',
|
|
||||||
fileCategory: 'TEXT_DOCUMENT',
|
fileCategory: 'TEXT_DOCUMENT',
|
||||||
pathIndex: 0,
|
pathIndex: 0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Contract Signed.pdf',
|
name: 'Contract Signed.pdf',
|
||||||
type: 'TextDocument',
|
|
||||||
fileCategory: 'TEXT_DOCUMENT',
|
fileCategory: 'TEXT_DOCUMENT',
|
||||||
pathIndex: 0,
|
pathIndex: 0,
|
||||||
},
|
},
|
||||||
// Spreadsheets
|
// Spreadsheets
|
||||||
{
|
{
|
||||||
name: 'Financial Forecast.xlsx',
|
name: 'Financial Forecast.xlsx',
|
||||||
type: 'Spreadsheet',
|
|
||||||
fileCategory: 'SPREADSHEET',
|
fileCategory: 'SPREADSHEET',
|
||||||
pathIndex: 1,
|
pathIndex: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Sales Report Q4.xlsx',
|
name: 'Sales Report Q4.xlsx',
|
||||||
type: 'Spreadsheet',
|
|
||||||
fileCategory: 'SPREADSHEET',
|
fileCategory: 'SPREADSHEET',
|
||||||
pathIndex: 1,
|
pathIndex: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Team Roster.xlsx',
|
name: 'Team Roster.xlsx',
|
||||||
type: 'Spreadsheet',
|
|
||||||
fileCategory: 'SPREADSHEET',
|
fileCategory: 'SPREADSHEET',
|
||||||
pathIndex: 1,
|
pathIndex: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Expense Report.xlsx',
|
name: 'Expense Report.xlsx',
|
||||||
type: 'Spreadsheet',
|
|
||||||
fileCategory: 'SPREADSHEET',
|
fileCategory: 'SPREADSHEET',
|
||||||
pathIndex: 1,
|
pathIndex: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Inventory List.xlsx',
|
name: 'Inventory List.xlsx',
|
||||||
type: 'Spreadsheet',
|
|
||||||
fileCategory: 'SPREADSHEET',
|
fileCategory: 'SPREADSHEET',
|
||||||
pathIndex: 1,
|
pathIndex: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Data Export.csv',
|
name: 'Data Export.csv',
|
||||||
type: 'Spreadsheet',
|
|
||||||
fileCategory: 'SPREADSHEET',
|
fileCategory: 'SPREADSHEET',
|
||||||
pathIndex: 1,
|
pathIndex: 1,
|
||||||
},
|
},
|
||||||
// Presentations
|
// Presentations
|
||||||
{
|
{
|
||||||
name: 'Pitch Deck.pptx',
|
name: 'Pitch Deck.pptx',
|
||||||
type: 'Presentation',
|
|
||||||
fileCategory: 'PRESENTATION',
|
fileCategory: 'PRESENTATION',
|
||||||
pathIndex: 2,
|
pathIndex: 2,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Q4 Results.pptx',
|
name: 'Q4 Results.pptx',
|
||||||
type: 'Presentation',
|
|
||||||
fileCategory: 'PRESENTATION',
|
fileCategory: 'PRESENTATION',
|
||||||
pathIndex: 2,
|
pathIndex: 2,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Roadmap 2024.pptx',
|
name: 'Roadmap 2024.pptx',
|
||||||
type: 'Presentation',
|
|
||||||
fileCategory: 'PRESENTATION',
|
fileCategory: 'PRESENTATION',
|
||||||
pathIndex: 2,
|
pathIndex: 2,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Company Overview.pptx',
|
name: 'Company Overview.pptx',
|
||||||
type: 'Presentation',
|
|
||||||
fileCategory: 'PRESENTATION',
|
fileCategory: 'PRESENTATION',
|
||||||
pathIndex: 2,
|
pathIndex: 2,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Training Materials.pptx',
|
name: 'Training Materials.pptx',
|
||||||
type: 'Presentation',
|
|
||||||
fileCategory: 'PRESENTATION',
|
fileCategory: 'PRESENTATION',
|
||||||
pathIndex: 2,
|
pathIndex: 2,
|
||||||
},
|
},
|
||||||
// Images
|
// Images
|
||||||
{
|
{
|
||||||
name: 'Company Logo.png',
|
name: 'Company Logo.png',
|
||||||
type: 'Image',
|
|
||||||
fileCategory: 'IMAGE',
|
fileCategory: 'IMAGE',
|
||||||
pathIndex: 3,
|
pathIndex: 3,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Product Photo.jpg',
|
name: 'Product Photo.jpg',
|
||||||
type: 'Image',
|
|
||||||
fileCategory: 'IMAGE',
|
fileCategory: 'IMAGE',
|
||||||
pathIndex: 3,
|
pathIndex: 3,
|
||||||
},
|
},
|
||||||
{ name: 'Diagram.png', type: 'Image', fileCategory: 'IMAGE', pathIndex: 3 },
|
{ name: 'Diagram.png', fileCategory: 'IMAGE', pathIndex: 3 },
|
||||||
{ name: 'Wireframe.png', type: 'Image', fileCategory: 'IMAGE', pathIndex: 3 },
|
{ name: 'Wireframe.png', fileCategory: 'IMAGE', pathIndex: 3 },
|
||||||
{
|
{
|
||||||
name: 'Mockup Design.png',
|
name: 'Mockup Design.png',
|
||||||
type: 'Image',
|
|
||||||
fileCategory: 'IMAGE',
|
fileCategory: 'IMAGE',
|
||||||
pathIndex: 3,
|
pathIndex: 3,
|
||||||
},
|
},
|
||||||
{ name: 'Headshot.jpg', type: 'Image', fileCategory: 'IMAGE', pathIndex: 3 },
|
{ name: 'Headshot.jpg', fileCategory: 'IMAGE', pathIndex: 3 },
|
||||||
// Archives
|
// Archives
|
||||||
{
|
{
|
||||||
name: 'Project Files.zip',
|
name: 'Project Files.zip',
|
||||||
type: 'Archive',
|
|
||||||
fileCategory: 'ARCHIVE',
|
fileCategory: 'ARCHIVE',
|
||||||
pathIndex: 4,
|
pathIndex: 4,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Backup Data.zip',
|
name: 'Backup Data.zip',
|
||||||
type: 'Archive',
|
|
||||||
fileCategory: 'ARCHIVE',
|
fileCategory: 'ARCHIVE',
|
||||||
pathIndex: 4,
|
pathIndex: 4,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Source Code.zip',
|
name: 'Source Code.zip',
|
||||||
type: 'Archive',
|
|
||||||
fileCategory: 'ARCHIVE',
|
fileCategory: 'ARCHIVE',
|
||||||
pathIndex: 4,
|
pathIndex: 4,
|
||||||
},
|
},
|
||||||
@@ -276,10 +247,7 @@ const GENERATE_ATTACHMENT_SEEDS = (): AttachmentDataSeed[] => {
|
|||||||
id: ATTACHMENT_DATA_SEED_IDS[`ID_${INDEX}`],
|
id: ATTACHMENT_DATA_SEED_IDS[`ID_${INDEX}`],
|
||||||
name: NAME_VARIATION.name,
|
name: NAME_VARIATION.name,
|
||||||
fullPath: FILE_PATH,
|
fullPath: FILE_PATH,
|
||||||
type: NAME_VARIATION.type,
|
|
||||||
fileCategory: NAME_VARIATION.fileCategory,
|
fileCategory: NAME_VARIATION.fileCategory,
|
||||||
// Deprecated: Use createdBy fields instead
|
|
||||||
authorId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
|
|
||||||
createdBySource: FieldActorSource.MANUAL,
|
createdBySource: FieldActorSource.MANUAL,
|
||||||
createdByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
|
createdByWorkspaceMemberId: WORKSPACE_MEMBER_DATA_SEED_IDS.TIM,
|
||||||
createdByName: 'Tim A',
|
createdByName: 'Tim A',
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ import { DevSeederDataService } from 'src/engine/workspace-manager/dev-seeder/da
|
|||||||
import { TimelineActivitySeederService } from 'src/engine/workspace-manager/dev-seeder/data/services/timeline-activity-seeder.service';
|
import { TimelineActivitySeederService } from 'src/engine/workspace-manager/dev-seeder/data/services/timeline-activity-seeder.service';
|
||||||
import { DevSeederMetadataService } from 'src/engine/workspace-manager/dev-seeder/metadata/services/dev-seeder-metadata.service';
|
import { DevSeederMetadataService } from 'src/engine/workspace-manager/dev-seeder/metadata/services/dev-seeder-metadata.service';
|
||||||
import { DevSeederService } from 'src/engine/workspace-manager/dev-seeder/services/dev-seeder.service';
|
import { DevSeederService } from 'src/engine/workspace-manager/dev-seeder/services/dev-seeder.service';
|
||||||
import { WorkspaceSyncMetadataModule } from 'src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module';
|
import { TwentyStandardApplicationModule } from 'src/engine/workspace-manager/twenty-standard-application/twenty-standard-application.module';
|
||||||
|
import { WorkspaceMigrationV2Module } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-v2.module';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
@@ -41,11 +42,12 @@ import { WorkspaceSyncMetadataModule } from 'src/engine/workspace-manager/worksp
|
|||||||
ApplicationModule,
|
ApplicationModule,
|
||||||
FeatureFlagModule,
|
FeatureFlagModule,
|
||||||
FileStorageModule,
|
FileStorageModule,
|
||||||
WorkspaceSyncMetadataModule,
|
|
||||||
TypeOrmModule.forFeature([WorkspaceEntity, ObjectMetadataEntity]),
|
TypeOrmModule.forFeature([WorkspaceEntity, ObjectMetadataEntity]),
|
||||||
ObjectPermissionModule,
|
ObjectPermissionModule,
|
||||||
WorkspaceManyOrAllFlatEntityMapsCacheModule,
|
WorkspaceManyOrAllFlatEntityMapsCacheModule,
|
||||||
WorkspaceCacheModule,
|
WorkspaceCacheModule,
|
||||||
|
WorkspaceMigrationV2Module,
|
||||||
|
TwentyStandardApplicationModule,
|
||||||
],
|
],
|
||||||
exports: [DevSeederService],
|
exports: [DevSeederService],
|
||||||
providers: [
|
providers: [
|
||||||
|
|||||||
-47
@@ -1,10 +1,7 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import { InjectDataSource } from '@nestjs/typeorm';
|
|
||||||
|
|
||||||
import { isDefined } from 'twenty-shared/utils';
|
import { isDefined } from 'twenty-shared/utils';
|
||||||
import { DataSource } from 'typeorm';
|
|
||||||
|
|
||||||
import { FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type';
|
|
||||||
import { type DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity';
|
import { type DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity';
|
||||||
import { CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input';
|
import { CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input';
|
||||||
import { FieldMetadataService } from 'src/engine/metadata-modules/field-metadata/services/field-metadata.service';
|
import { FieldMetadataService } from 'src/engine/metadata-modules/field-metadata/services/field-metadata.service';
|
||||||
@@ -25,7 +22,6 @@ import { ROCKET_CUSTOM_OBJECT_SEED } from 'src/engine/workspace-manager/dev-seed
|
|||||||
import { SURVEY_RESULT_CUSTOM_OBJECT_SEED } from 'src/engine/workspace-manager/dev-seeder/metadata/custom-objects/constants/survey-results-object-seed.constant';
|
import { SURVEY_RESULT_CUSTOM_OBJECT_SEED } from 'src/engine/workspace-manager/dev-seeder/metadata/custom-objects/constants/survey-results-object-seed.constant';
|
||||||
import { type FieldMetadataSeed } from 'src/engine/workspace-manager/dev-seeder/metadata/types/field-metadata-seed.type';
|
import { type FieldMetadataSeed } from 'src/engine/workspace-manager/dev-seeder/metadata/types/field-metadata-seed.type';
|
||||||
import { type ObjectMetadataSeed } from 'src/engine/workspace-manager/dev-seeder/metadata/types/object-metadata-seed.type';
|
import { type ObjectMetadataSeed } from 'src/engine/workspace-manager/dev-seeder/metadata/types/object-metadata-seed.type';
|
||||||
import { prefillCoreViews } from 'src/engine/workspace-manager/standard-objects-prefill-data/prefill-core-views';
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class DevSeederMetadataService {
|
export class DevSeederMetadataService {
|
||||||
@@ -33,8 +29,6 @@ export class DevSeederMetadataService {
|
|||||||
private readonly objectMetadataService: ObjectMetadataService,
|
private readonly objectMetadataService: ObjectMetadataService,
|
||||||
private readonly fieldMetadataService: FieldMetadataService,
|
private readonly fieldMetadataService: FieldMetadataService,
|
||||||
private readonly flatEntityMapsCacheService: WorkspaceManyOrAllFlatEntityMapsCacheService,
|
private readonly flatEntityMapsCacheService: WorkspaceManyOrAllFlatEntityMapsCacheService,
|
||||||
@InjectDataSource()
|
|
||||||
private readonly coreDataSource: DataSource,
|
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
private readonly workspaceConfigs: Record<
|
private readonly workspaceConfigs: Record<
|
||||||
@@ -85,13 +79,9 @@ export class DevSeederMetadataService {
|
|||||||
public async seed({
|
public async seed({
|
||||||
dataSourceMetadata,
|
dataSourceMetadata,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
featureFlags,
|
|
||||||
twentyStandardFlatApplication,
|
|
||||||
}: {
|
}: {
|
||||||
dataSourceMetadata: DataSourceEntity;
|
dataSourceMetadata: DataSourceEntity;
|
||||||
workspaceId: string;
|
workspaceId: string;
|
||||||
twentyStandardFlatApplication: FlatApplication;
|
|
||||||
featureFlags?: Record<string, boolean>;
|
|
||||||
}) {
|
}) {
|
||||||
const config = this.workspaceConfigs[workspaceId];
|
const config = this.workspaceConfigs[workspaceId];
|
||||||
|
|
||||||
@@ -125,13 +115,6 @@ export class DevSeederMetadataService {
|
|||||||
fieldMetadataSeeds: fieldConfig.seeds,
|
fieldMetadataSeeds: fieldConfig.seeds,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.seedCoreViews({
|
|
||||||
workspaceId,
|
|
||||||
dataSourceMetadata,
|
|
||||||
featureFlags,
|
|
||||||
twentyStandardFlatApplication,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async seedCustomObject({
|
private async seedCustomObject({
|
||||||
@@ -182,36 +165,6 @@ export class DevSeederMetadataService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private async seedCoreViews({
|
|
||||||
workspaceId,
|
|
||||||
dataSourceMetadata,
|
|
||||||
featureFlags,
|
|
||||||
twentyStandardFlatApplication,
|
|
||||||
}: {
|
|
||||||
workspaceId: string;
|
|
||||||
dataSourceMetadata: DataSourceEntity;
|
|
||||||
featureFlags?: Record<string, boolean>;
|
|
||||||
twentyStandardFlatApplication: FlatApplication;
|
|
||||||
}): Promise<void> {
|
|
||||||
const { flatObjectMetadataMaps, flatFieldMetadataMaps } =
|
|
||||||
await this.flatEntityMapsCacheService.getOrRecomputeManyOrAllFlatEntityMaps(
|
|
||||||
{
|
|
||||||
workspaceId,
|
|
||||||
flatMapsKeys: ['flatObjectMetadataMaps', 'flatFieldMetadataMaps'],
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
await prefillCoreViews({
|
|
||||||
coreDataSource: this.coreDataSource,
|
|
||||||
workspaceId,
|
|
||||||
flatObjectMetadataMaps,
|
|
||||||
flatFieldMetadataMaps,
|
|
||||||
workspaceSchemaName: dataSourceMetadata.schema,
|
|
||||||
featureFlags,
|
|
||||||
twentyStandardFlatApplication,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public async seedRelations({ workspaceId }: { workspaceId: string }) {
|
public async seedRelations({ workspaceId }: { workspaceId: string }) {
|
||||||
const config = this.workspaceConfigs[workspaceId];
|
const config = this.workspaceConfigs[workspaceId];
|
||||||
|
|
||||||
|
|||||||
+9
-27
@@ -1,12 +1,10 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import { InjectDataSource } from '@nestjs/typeorm';
|
import { InjectDataSource } from '@nestjs/typeorm';
|
||||||
|
|
||||||
import { isDefined } from 'twenty-shared/utils';
|
|
||||||
import { DataSource } from 'typeorm';
|
import { DataSource } from 'typeorm';
|
||||||
|
|
||||||
import { ApplicationService } from 'src/engine/core-modules/application/application.service';
|
import { ApplicationService } from 'src/engine/core-modules/application/application.service';
|
||||||
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
|
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
|
||||||
import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service';
|
|
||||||
import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service';
|
import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service';
|
||||||
import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service';
|
import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service';
|
||||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||||
@@ -21,8 +19,7 @@ import { seedPageLayoutWidgets } from 'src/engine/workspace-manager/dev-seeder/c
|
|||||||
import { seedPageLayouts } from 'src/engine/workspace-manager/dev-seeder/core/utils/seed-page-layouts.util';
|
import { seedPageLayouts } from 'src/engine/workspace-manager/dev-seeder/core/utils/seed-page-layouts.util';
|
||||||
import { DevSeederDataService } from 'src/engine/workspace-manager/dev-seeder/data/services/dev-seeder-data.service';
|
import { DevSeederDataService } from 'src/engine/workspace-manager/dev-seeder/data/services/dev-seeder-data.service';
|
||||||
import { DevSeederMetadataService } from 'src/engine/workspace-manager/dev-seeder/metadata/services/dev-seeder-metadata.service';
|
import { DevSeederMetadataService } from 'src/engine/workspace-manager/dev-seeder/metadata/services/dev-seeder-metadata.service';
|
||||||
import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications';
|
import { TwentyStandardApplicationService } from 'src/engine/workspace-manager/twenty-standard-application/services/twenty-standard-application.service';
|
||||||
import { WorkspaceSyncMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.service';
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class DevSeederService {
|
export class DevSeederService {
|
||||||
@@ -31,8 +28,7 @@ export class DevSeederService {
|
|||||||
private readonly twentyConfigService: TwentyConfigService,
|
private readonly twentyConfigService: TwentyConfigService,
|
||||||
private readonly workspaceDataSourceService: WorkspaceDataSourceService,
|
private readonly workspaceDataSourceService: WorkspaceDataSourceService,
|
||||||
private readonly dataSourceService: DataSourceService,
|
private readonly dataSourceService: DataSourceService,
|
||||||
private readonly featureFlagService: FeatureFlagService,
|
private readonly twentyStandardApplicationService: TwentyStandardApplicationService,
|
||||||
private readonly workspaceSyncMetadataService: WorkspaceSyncMetadataService,
|
|
||||||
private readonly devSeederMetadataService: DevSeederMetadataService,
|
private readonly devSeederMetadataService: DevSeederMetadataService,
|
||||||
private readonly devSeederPermissionsService: DevSeederPermissionsService,
|
private readonly devSeederPermissionsService: DevSeederPermissionsService,
|
||||||
private readonly devSeederDataService: DevSeederDataService,
|
private readonly devSeederDataService: DevSeederDataService,
|
||||||
@@ -70,36 +66,22 @@ export class DevSeederService {
|
|||||||
schemaName,
|
schemaName,
|
||||||
);
|
);
|
||||||
|
|
||||||
const twentyStandardApplication =
|
const { workspaceCustomFlatApplication, twentyStandardFlatApplication } =
|
||||||
await this.applicationService.findByUniversalIdentifier({
|
|
||||||
workspaceId,
|
|
||||||
universalIdentifier: TWENTY_STANDARD_APPLICATION.universalIdentifier,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!isDefined(twentyStandardApplication)) {
|
|
||||||
throw new Error(
|
|
||||||
'Seeder failed to find twenty standard application, should never occur',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const { twentyStandardFlatApplication, workspaceCustomFlatApplication } =
|
|
||||||
await this.applicationService.findWorkspaceTwentyStandardAndCustomApplicationOrThrow(
|
await this.applicationService.findWorkspaceTwentyStandardAndCustomApplicationOrThrow(
|
||||||
{
|
{
|
||||||
workspaceId,
|
workspaceId,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
await this.workspaceSyncMetadataService.synchronize({
|
await this.twentyStandardApplicationService.synchronizeTwentyStandardApplicationOrThrow(
|
||||||
workspaceId: workspaceId,
|
{
|
||||||
dataSourceId: dataSourceMetadata.id,
|
workspaceId,
|
||||||
featureFlags: featureFlagsMap,
|
},
|
||||||
});
|
);
|
||||||
|
|
||||||
await this.devSeederMetadataService.seed({
|
await this.devSeederMetadataService.seed({
|
||||||
dataSourceMetadata,
|
dataSourceMetadata,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
featureFlags: featureFlagsMap,
|
|
||||||
twentyStandardFlatApplication,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
await this.devSeederMetadataService.seedRelations({
|
await this.devSeederMetadataService.seedRelations({
|
||||||
@@ -108,7 +90,7 @@ export class DevSeederService {
|
|||||||
|
|
||||||
await this.devSeederPermissionsService.initPermissions({
|
await this.devSeederPermissionsService.initPermissions({
|
||||||
workspaceId,
|
workspaceId,
|
||||||
twentyStandardApplication,
|
twentyStandardFlatApplication,
|
||||||
});
|
});
|
||||||
|
|
||||||
await seedPageLayouts(
|
await seedPageLayouts(
|
||||||
|
|||||||
+1
-17
@@ -48,14 +48,12 @@ export const STANDARD_OBJECTS = {
|
|||||||
},
|
},
|
||||||
name: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.name },
|
name: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.name },
|
||||||
fullPath: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.fullPath },
|
fullPath: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.fullPath },
|
||||||
type: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.type },
|
|
||||||
fileCategory: {
|
fileCategory: {
|
||||||
universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.fileCategory,
|
universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.fileCategory,
|
||||||
},
|
},
|
||||||
createdBy: {
|
createdBy: {
|
||||||
universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.createdBy,
|
universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.createdBy,
|
||||||
},
|
},
|
||||||
author: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.author },
|
|
||||||
task: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.task },
|
task: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.task },
|
||||||
note: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.note },
|
note: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.note },
|
||||||
person: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.person },
|
person: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.person },
|
||||||
@@ -69,9 +67,6 @@ export const STANDARD_OBJECTS = {
|
|||||||
workflow: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.workflow },
|
workflow: { universalIdentifier: ATTACHMENT_STANDARD_FIELD_IDS.workflow },
|
||||||
},
|
},
|
||||||
indexes: {
|
indexes: {
|
||||||
authorIdIndex: {
|
|
||||||
universalIdentifier: 'a7c3e8f2-9b14-4d6a-8e5f-1c2d3b4a5e6f',
|
|
||||||
},
|
|
||||||
taskIdIndex: {
|
taskIdIndex: {
|
||||||
universalIdentifier: 'b8d4f9a3-0c25-4e7b-9f6a-2d3e4c5b6f70',
|
universalIdentifier: 'b8d4f9a3-0c25-4e7b-9f6a-2d3e4c5b6f70',
|
||||||
},
|
},
|
||||||
@@ -389,9 +384,6 @@ export const STANDARD_OBJECTS = {
|
|||||||
universalIdentifier: COMPANY_STANDARD_FIELD_IDS.domainName,
|
universalIdentifier: COMPANY_STANDARD_FIELD_IDS.domainName,
|
||||||
},
|
},
|
||||||
address: { universalIdentifier: COMPANY_STANDARD_FIELD_IDS.address },
|
address: { universalIdentifier: COMPANY_STANDARD_FIELD_IDS.address },
|
||||||
addressOld: {
|
|
||||||
universalIdentifier: COMPANY_STANDARD_FIELD_IDS.address_deprecated,
|
|
||||||
},
|
|
||||||
employees: { universalIdentifier: COMPANY_STANDARD_FIELD_IDS.employees },
|
employees: { universalIdentifier: COMPANY_STANDARD_FIELD_IDS.employees },
|
||||||
linkedinLink: {
|
linkedinLink: {
|
||||||
universalIdentifier: COMPANY_STANDARD_FIELD_IDS.linkedinLink,
|
universalIdentifier: COMPANY_STANDARD_FIELD_IDS.linkedinLink,
|
||||||
@@ -626,7 +618,7 @@ export const STANDARD_OBJECTS = {
|
|||||||
},
|
},
|
||||||
task: { universalIdentifier: FAVORITE_STANDARD_FIELD_IDS.task },
|
task: { universalIdentifier: FAVORITE_STANDARD_FIELD_IDS.task },
|
||||||
note: { universalIdentifier: FAVORITE_STANDARD_FIELD_IDS.note },
|
note: { universalIdentifier: FAVORITE_STANDARD_FIELD_IDS.note },
|
||||||
view: { universalIdentifier: FAVORITE_STANDARD_FIELD_IDS.view },
|
viewId: { universalIdentifier: FAVORITE_STANDARD_FIELD_IDS.view },
|
||||||
favoriteFolder: {
|
favoriteFolder: {
|
||||||
universalIdentifier: FAVORITE_STANDARD_FIELD_IDS.favoriteFolder,
|
universalIdentifier: FAVORITE_STANDARD_FIELD_IDS.favoriteFolder,
|
||||||
},
|
},
|
||||||
@@ -1035,7 +1027,6 @@ export const STANDARD_OBJECTS = {
|
|||||||
},
|
},
|
||||||
position: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.position },
|
position: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.position },
|
||||||
title: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.title },
|
title: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.title },
|
||||||
body: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.body },
|
|
||||||
bodyV2: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.bodyV2 },
|
bodyV2: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.bodyV2 },
|
||||||
createdBy: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.createdBy },
|
createdBy: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.createdBy },
|
||||||
noteTargets: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.noteTargets },
|
noteTargets: { universalIdentifier: NOTE_STANDARD_FIELD_IDS.noteTargets },
|
||||||
@@ -1253,14 +1244,12 @@ export const STANDARD_OBJECTS = {
|
|||||||
universalIdentifier: '20202020-e01d-4144-9d44-789abcdefabc',
|
universalIdentifier: '20202020-e01d-4144-9d44-789abcdefabc',
|
||||||
},
|
},
|
||||||
name: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.name },
|
name: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.name },
|
||||||
email: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.email },
|
|
||||||
emails: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.emails },
|
emails: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.emails },
|
||||||
linkedinLink: {
|
linkedinLink: {
|
||||||
universalIdentifier: PERSON_STANDARD_FIELD_IDS.linkedinLink,
|
universalIdentifier: PERSON_STANDARD_FIELD_IDS.linkedinLink,
|
||||||
},
|
},
|
||||||
xLink: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.xLink },
|
xLink: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.xLink },
|
||||||
jobTitle: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.jobTitle },
|
jobTitle: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.jobTitle },
|
||||||
phone: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.phone },
|
|
||||||
phones: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.phones },
|
phones: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.phones },
|
||||||
city: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.city },
|
city: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.city },
|
||||||
avatarUrl: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.avatarUrl },
|
avatarUrl: { universalIdentifier: PERSON_STANDARD_FIELD_IDS.avatarUrl },
|
||||||
@@ -1359,7 +1348,6 @@ export const STANDARD_OBJECTS = {
|
|||||||
},
|
},
|
||||||
position: { universalIdentifier: TASK_STANDARD_FIELD_IDS.position },
|
position: { universalIdentifier: TASK_STANDARD_FIELD_IDS.position },
|
||||||
title: { universalIdentifier: TASK_STANDARD_FIELD_IDS.title },
|
title: { universalIdentifier: TASK_STANDARD_FIELD_IDS.title },
|
||||||
body: { universalIdentifier: TASK_STANDARD_FIELD_IDS.body },
|
|
||||||
bodyV2: { universalIdentifier: TASK_STANDARD_FIELD_IDS.bodyV2 },
|
bodyV2: { universalIdentifier: TASK_STANDARD_FIELD_IDS.bodyV2 },
|
||||||
dueAt: { universalIdentifier: TASK_STANDARD_FIELD_IDS.dueAt },
|
dueAt: { universalIdentifier: TASK_STANDARD_FIELD_IDS.dueAt },
|
||||||
status: { universalIdentifier: TASK_STANDARD_FIELD_IDS.status },
|
status: { universalIdentifier: TASK_STANDARD_FIELD_IDS.status },
|
||||||
@@ -1946,10 +1934,6 @@ export const STANDARD_OBJECTS = {
|
|||||||
universalIdentifier:
|
universalIdentifier:
|
||||||
WORKSPACE_MEMBER_STANDARD_FIELD_IDS.accountOwnerForCompanies,
|
WORKSPACE_MEMBER_STANDARD_FIELD_IDS.accountOwnerForCompanies,
|
||||||
},
|
},
|
||||||
authoredAttachments: {
|
|
||||||
universalIdentifier:
|
|
||||||
WORKSPACE_MEMBER_STANDARD_FIELD_IDS.authoredAttachments,
|
|
||||||
},
|
|
||||||
connectedAccounts: {
|
connectedAccounts: {
|
||||||
universalIdentifier:
|
universalIdentifier:
|
||||||
WORKSPACE_MEMBER_STANDARD_FIELD_IDS.connectedAccounts,
|
WORKSPACE_MEMBER_STANDARD_FIELD_IDS.connectedAccounts,
|
||||||
|
|||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
import { type AllMetadataName } from 'twenty-shared/metadata';
|
||||||
|
|
||||||
|
export const TWENTY_STANDARD_ALL_METADATA_NAME = [
|
||||||
|
'index',
|
||||||
|
'objectMetadata',
|
||||||
|
'fieldMetadata',
|
||||||
|
'viewField',
|
||||||
|
'viewFilter',
|
||||||
|
'viewGroup',
|
||||||
|
'view',
|
||||||
|
'role',
|
||||||
|
'agent',
|
||||||
|
] as const satisfies AllMetadataName[];
|
||||||
+153
@@ -0,0 +1,153 @@
|
|||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
|
||||||
|
import { isDefined } from 'twenty-shared/utils';
|
||||||
|
|
||||||
|
import { ApplicationService } from 'src/engine/core-modules/application/application.service';
|
||||||
|
import { MetadataFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type';
|
||||||
|
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 { getSubFlatEntityMapsByApplicationIdOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-by-application-id-or-throw.util';
|
||||||
|
import { FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type';
|
||||||
|
import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager';
|
||||||
|
import { buildSystemAuthContext } from 'src/engine/twenty-orm/utils/build-system-auth-context.util';
|
||||||
|
import { WorkspaceCacheService } from 'src/engine/workspace-cache/services/workspace-cache.service';
|
||||||
|
import { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
|
||||||
|
import { TWENTY_STANDARD_ALL_METADATA_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-all-metadata-name.constant';
|
||||||
|
import { computeTwentyStandardApplicationAllFlatEntityMaps } from 'src/engine/workspace-manager/twenty-standard-application/utils/twenty-standard-application-all-flat-entity-maps.constant';
|
||||||
|
import { WorkspaceMigrationBuilderExceptionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/exceptions/workspace-migration-builder-exception-v2';
|
||||||
|
import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-validate-build-and-run-service';
|
||||||
|
import { FromToAllFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-orchestrator.type';
|
||||||
|
import { FavoriteWorkspaceEntity } from 'src/modules/favorite/standard-objects/favorite.workspace-entity';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class TwentyStandardApplicationService {
|
||||||
|
constructor(
|
||||||
|
private readonly applicationService: ApplicationService,
|
||||||
|
private readonly workspaceMigrationValidateBuildAndRunService: WorkspaceMigrationValidateBuildAndRunService,
|
||||||
|
private readonly workspaceCacheService: WorkspaceCacheService,
|
||||||
|
private readonly globalWorkspaceOrmManager: GlobalWorkspaceOrmManager,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
// Note: To remove and handle natively in validateBuildAndRun after favorite migration to metadata
|
||||||
|
private async createManyFavorite({
|
||||||
|
flatViews,
|
||||||
|
workspaceId,
|
||||||
|
}: {
|
||||||
|
flatViews: FlatView[];
|
||||||
|
workspaceId: string;
|
||||||
|
}) {
|
||||||
|
const authContext = buildSystemAuthContext(workspaceId);
|
||||||
|
|
||||||
|
await this.globalWorkspaceOrmManager.executeInWorkspaceContext(
|
||||||
|
authContext,
|
||||||
|
async () => {
|
||||||
|
const favoriteRepository =
|
||||||
|
await this.globalWorkspaceOrmManager.getRepository<FavoriteWorkspaceEntity>(
|
||||||
|
workspaceId,
|
||||||
|
'favorite',
|
||||||
|
);
|
||||||
|
|
||||||
|
const favoriteCount = await favoriteRepository.count();
|
||||||
|
const favoriteToCreate = flatViews.map((flatView, index) => ({
|
||||||
|
viewId: flatView.id,
|
||||||
|
position: favoriteCount + index,
|
||||||
|
}));
|
||||||
|
|
||||||
|
await favoriteRepository.insert(favoriteToCreate);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async synchronizeTwentyStandardApplicationOrThrow({
|
||||||
|
workspaceId,
|
||||||
|
}: {
|
||||||
|
workspaceId: string;
|
||||||
|
}) {
|
||||||
|
const { twentyStandardFlatApplication } =
|
||||||
|
await this.applicationService.findWorkspaceTwentyStandardAndCustomApplicationOrThrow(
|
||||||
|
{
|
||||||
|
workspaceId,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
const { featureFlagsMap, ...fromTwentyStandardAllFlatEntityMaps } =
|
||||||
|
await this.workspaceCacheService.getOrRecompute(workspaceId, [
|
||||||
|
...TWENTY_STANDARD_ALL_METADATA_NAME.map(getMetadataFlatEntityMapsKey),
|
||||||
|
'featureFlagsMap',
|
||||||
|
]);
|
||||||
|
const toTwentyStandardAllFlatEntityMaps =
|
||||||
|
computeTwentyStandardApplicationAllFlatEntityMaps({
|
||||||
|
now: new Date().toISOString(),
|
||||||
|
workspaceId,
|
||||||
|
twentyStandardApplicationId: twentyStandardFlatApplication.id,
|
||||||
|
});
|
||||||
|
|
||||||
|
const fromToAllFlatEntityMaps: FromToAllFlatEntityMaps = {};
|
||||||
|
|
||||||
|
for (const metadataName of TWENTY_STANDARD_ALL_METADATA_NAME) {
|
||||||
|
const flatEntityMapsKey = getMetadataFlatEntityMapsKey(metadataName);
|
||||||
|
const fromFlatEntityMaps =
|
||||||
|
fromTwentyStandardAllFlatEntityMaps[flatEntityMapsKey];
|
||||||
|
const fromTo = {
|
||||||
|
from: getSubFlatEntityMapsByApplicationIdOrThrow<
|
||||||
|
MetadataFlatEntity<typeof metadataName>
|
||||||
|
>({
|
||||||
|
applicationId: twentyStandardFlatApplication.id,
|
||||||
|
flatEntityMaps: fromFlatEntityMaps,
|
||||||
|
}),
|
||||||
|
to: toTwentyStandardAllFlatEntityMaps[flatEntityMapsKey],
|
||||||
|
};
|
||||||
|
|
||||||
|
// @ts-expect-error Metadata flat entity maps cache key and metadataName colliding
|
||||||
|
fromToAllFlatEntityMaps[flatEntityMapsKey] = fromTo;
|
||||||
|
}
|
||||||
|
|
||||||
|
const validateAndBuildResult =
|
||||||
|
await this.workspaceMigrationValidateBuildAndRunService.validateBuildAndRunWorkspaceMigrationFromTo(
|
||||||
|
{
|
||||||
|
buildOptions: {
|
||||||
|
isSystemBuild: true,
|
||||||
|
inferDeletionFromMissingEntities: true,
|
||||||
|
},
|
||||||
|
fromToAllFlatEntityMaps,
|
||||||
|
workspaceId,
|
||||||
|
additionalCacheDataMaps: {
|
||||||
|
featureFlagsMap,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isDefined(validateAndBuildResult)) {
|
||||||
|
throw new WorkspaceMigrationBuilderExceptionV2(
|
||||||
|
validateAndBuildResult,
|
||||||
|
'Multiple validation errors occurred while synchronizing twenty-standard application',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const { flatViewMaps } = await this.workspaceCacheService.getOrRecompute(
|
||||||
|
workspaceId,
|
||||||
|
['flatViewMaps'],
|
||||||
|
);
|
||||||
|
|
||||||
|
const flatViews = [
|
||||||
|
STANDARD_OBJECTS.company.views.allCompanies.universalIdentifier,
|
||||||
|
STANDARD_OBJECTS.dashboard.views.allDashboards.universalIdentifier,
|
||||||
|
STANDARD_OBJECTS.note.views.allNotes.universalIdentifier,
|
||||||
|
STANDARD_OBJECTS.opportunity.views.allOpportunities.universalIdentifier,
|
||||||
|
STANDARD_OBJECTS.person.views.allPeople.universalIdentifier,
|
||||||
|
STANDARD_OBJECTS.task.views.allTasks.universalIdentifier,
|
||||||
|
STANDARD_OBJECTS.workflow.views.allWorkflows.universalIdentifier,
|
||||||
|
]
|
||||||
|
.map((universalIdentifier) =>
|
||||||
|
findFlatEntityByUniversalIdentifier({
|
||||||
|
flatEntityMaps: flatViewMaps,
|
||||||
|
universalIdentifier,
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.filter(isDefined);
|
||||||
|
|
||||||
|
await this.createManyFavorite({
|
||||||
|
flatViews,
|
||||||
|
workspaceId,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
|
||||||
|
import { ApplicationModule } from 'src/engine/core-modules/application/application.module';
|
||||||
|
import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache.module';
|
||||||
|
import { WorkspaceMigrationV2Module } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-v2.module';
|
||||||
|
import { GlobalWorkspaceDataSourceModule } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-datasource.module';
|
||||||
|
|
||||||
|
import { TwentyStandardApplicationService } from './services/twenty-standard-application.service';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
providers: [TwentyStandardApplicationService],
|
||||||
|
imports: [
|
||||||
|
ApplicationModule,
|
||||||
|
WorkspaceCacheModule,
|
||||||
|
WorkspaceMigrationV2Module,
|
||||||
|
GlobalWorkspaceDataSourceModule,
|
||||||
|
],
|
||||||
|
exports: [TwentyStandardApplicationService],
|
||||||
|
})
|
||||||
|
export class TwentyStandardApplicationModule {}
|
||||||
+5
-9
@@ -1,14 +1,10 @@
|
|||||||
import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type';
|
import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type';
|
||||||
|
import { type MetadataToFlatEntityMapsKey } from 'src/engine/metadata-modules/flat-entity/types/metadata-to-flat-entity-maps-key';
|
||||||
|
import { type TWENTY_STANDARD_ALL_METADATA_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-all-metadata-name.constant';
|
||||||
|
|
||||||
export type TwentyStandardAllFlatEntityMaps = Pick<
|
export type TwentyStandardAllFlatEntityMaps = Pick<
|
||||||
AllFlatEntityMaps,
|
AllFlatEntityMaps,
|
||||||
| 'flatIndexMaps'
|
MetadataToFlatEntityMapsKey<
|
||||||
| 'flatObjectMetadataMaps'
|
(typeof TWENTY_STANDARD_ALL_METADATA_NAME)[number]
|
||||||
| 'flatFieldMetadataMaps'
|
>
|
||||||
| 'flatViewFieldMaps'
|
|
||||||
| 'flatViewFilterMaps'
|
|
||||||
| 'flatViewGroupMaps'
|
|
||||||
| 'flatViewMaps'
|
|
||||||
| 'flatRoleMaps'
|
|
||||||
| 'flatAgentMaps'
|
|
||||||
>;
|
>;
|
||||||
|
|||||||
+1
-1
@@ -49,7 +49,7 @@ export const createStandardAgentFlatMetadata = ({
|
|||||||
return {
|
return {
|
||||||
id: v4(),
|
id: v4(),
|
||||||
universalIdentifier,
|
universalIdentifier,
|
||||||
standardId: null,
|
standardId: universalIdentifier,
|
||||||
name,
|
name,
|
||||||
label,
|
label,
|
||||||
icon,
|
icon,
|
||||||
|
|||||||
+7
-2
@@ -1,3 +1,5 @@
|
|||||||
|
import { type FieldMetadataType } from 'twenty-shared/types';
|
||||||
|
|
||||||
import { createEmptyFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/constant/create-empty-flat-entity-maps.constant';
|
import { createEmptyFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/constant/create-empty-flat-entity-maps.constant';
|
||||||
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
|
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
|
||||||
import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util';
|
import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util';
|
||||||
@@ -35,7 +37,7 @@ import { buildWorkspaceMemberStandardFlatFieldMetadatas } from 'src/engine/works
|
|||||||
import { type CreateStandardFieldArgs } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
|
import { type CreateStandardFieldArgs } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
|
||||||
|
|
||||||
type StandardFieldBuilder<P extends AllStandardObjectName> = (
|
type StandardFieldBuilder<P extends AllStandardObjectName> = (
|
||||||
args: Omit<CreateStandardFieldArgs<P>, 'context'>,
|
args: Omit<CreateStandardFieldArgs<P, FieldMetadataType>, 'context'>,
|
||||||
) => Record<string, FlatFieldMetadata>;
|
) => Record<string, FlatFieldMetadata>;
|
||||||
|
|
||||||
const STANDARD_FLAT_FIELD_METADATA_BUILDERS_BY_OBJECT_NAME = {
|
const STANDARD_FLAT_FIELD_METADATA_BUILDERS_BY_OBJECT_NAME = {
|
||||||
@@ -77,7 +79,10 @@ const STANDARD_FLAT_FIELD_METADATA_BUILDERS_BY_OBJECT_NAME = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const buildStandardFlatFieldMetadataMaps = (
|
export const buildStandardFlatFieldMetadataMaps = (
|
||||||
args: Omit<CreateStandardFieldArgs, 'context' | 'objectName'>,
|
args: Omit<
|
||||||
|
CreateStandardFieldArgs<AllStandardObjectName, FieldMetadataType>,
|
||||||
|
'context' | 'objectName'
|
||||||
|
>,
|
||||||
): FlatEntityMaps<FlatFieldMetadata> => {
|
): FlatEntityMaps<FlatFieldMetadata> => {
|
||||||
const allFieldMetadatas: FlatFieldMetadata[] = (
|
const allFieldMetadatas: FlatFieldMetadata[] = (
|
||||||
Object.keys(
|
Object.keys(
|
||||||
|
|||||||
+13
-47
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -19,10 +20,10 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'attachment'>, 'context'>): Record<
|
}: Omit<
|
||||||
AllStandardObjectFieldName<'attachment'>,
|
CreateStandardFieldArgs<'attachment', FieldMetadataType>,
|
||||||
FlatFieldMetadata
|
'context'
|
||||||
> => ({
|
>): Record<AllStandardObjectFieldName<'attachment'>, FlatFieldMetadata> => ({
|
||||||
// Base fields from BaseWorkspaceEntity
|
// Base fields from BaseWorkspaceEntity
|
||||||
id: createStandardFieldFlatMetadata({
|
id: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
@@ -56,7 +57,7 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -77,7 +78,7 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -97,7 +98,7 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -139,22 +140,6 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({
|
|||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
now,
|
now,
|
||||||
}),
|
}),
|
||||||
type: createStandardFieldFlatMetadata({
|
|
||||||
objectName,
|
|
||||||
workspaceId,
|
|
||||||
context: {
|
|
||||||
fieldName: 'type',
|
|
||||||
type: FieldMetadataType.TEXT,
|
|
||||||
label: 'Type (deprecated)',
|
|
||||||
description: 'Attachment type (deprecated - use fileCategory)',
|
|
||||||
icon: 'IconList',
|
|
||||||
isNullable: true,
|
|
||||||
},
|
|
||||||
standardObjectMetadataRelatedEntityIds,
|
|
||||||
dependencyFlatEntityMaps,
|
|
||||||
twentyStandardApplicationId,
|
|
||||||
now,
|
|
||||||
}),
|
|
||||||
fileCategory: createStandardFieldFlatMetadata({
|
fileCategory: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -208,6 +193,11 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCreativeCommonsSa',
|
icon: 'IconCreativeCommonsSa',
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
isNullable: false,
|
isNullable: false,
|
||||||
|
defaultValue: {
|
||||||
|
source: "'MANUAL'",
|
||||||
|
name: "'System'",
|
||||||
|
workspaceMemberId: null,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -216,30 +206,6 @@ export const buildAttachmentStandardFlatFieldMetadatas = ({
|
|||||||
}),
|
}),
|
||||||
|
|
||||||
// Relation fields
|
// Relation fields
|
||||||
author: createStandardRelationFieldFlatMetadata({
|
|
||||||
objectName,
|
|
||||||
workspaceId,
|
|
||||||
context: {
|
|
||||||
type: FieldMetadataType.RELATION,
|
|
||||||
morphId: null,
|
|
||||||
fieldName: 'author',
|
|
||||||
label: 'Author',
|
|
||||||
description: 'Attachment author (deprecated - use createdBy)',
|
|
||||||
icon: 'IconCircleUser',
|
|
||||||
isNullable: true,
|
|
||||||
targetObjectName: 'workspaceMember',
|
|
||||||
targetFieldName: 'authoredAttachments',
|
|
||||||
settings: {
|
|
||||||
relationType: RelationType.MANY_TO_ONE,
|
|
||||||
onDelete: RelationOnDeleteAction.SET_NULL,
|
|
||||||
joinColumnName: 'authorId',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
standardObjectMetadataRelatedEntityIds,
|
|
||||||
dependencyFlatEntityMaps,
|
|
||||||
twentyStandardApplicationId,
|
|
||||||
now,
|
|
||||||
}),
|
|
||||||
task: createStandardRelationFieldFlatMetadata({
|
task: createStandardRelationFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
|
|||||||
+8
-7
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -19,10 +20,10 @@ export const buildBlocklistStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'blocklist'>, 'context'>): Record<
|
}: Omit<
|
||||||
AllStandardObjectFieldName<'blocklist'>,
|
CreateStandardFieldArgs<'blocklist', FieldMetadataType>,
|
||||||
FlatFieldMetadata
|
'context'
|
||||||
> => ({
|
>): Record<AllStandardObjectFieldName<'blocklist'>, FlatFieldMetadata> => ({
|
||||||
// Base fields from BaseWorkspaceEntity
|
// Base fields from BaseWorkspaceEntity
|
||||||
id: createStandardFieldFlatMetadata({
|
id: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
@@ -56,7 +57,7 @@ export const buildBlocklistStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -77,7 +78,7 @@ export const buildBlocklistStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -97,7 +98,7 @@ export const buildBlocklistStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
|
|||||||
+5
-4
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -20,7 +21,7 @@ export const buildCalendarChannelEventAssociationStandardFlatFieldMetadatas = ({
|
|||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<
|
}: Omit<
|
||||||
CreateStandardFieldArgs<'calendarChannelEventAssociation'>,
|
CreateStandardFieldArgs<'calendarChannelEventAssociation', FieldMetadataType>,
|
||||||
'context'
|
'context'
|
||||||
>): Record<
|
>): Record<
|
||||||
AllStandardObjectFieldName<'calendarChannelEventAssociation'>,
|
AllStandardObjectFieldName<'calendarChannelEventAssociation'>,
|
||||||
@@ -57,7 +58,7 @@ export const buildCalendarChannelEventAssociationStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -76,7 +77,7 @@ export const buildCalendarChannelEventAssociationStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -94,7 +95,7 @@ export const buildCalendarChannelEventAssociationStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+8
-4
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -19,7 +20,10 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'calendarChannel'>, 'context'>): Record<
|
}: Omit<
|
||||||
|
CreateStandardFieldArgs<'calendarChannel', FieldMetadataType>,
|
||||||
|
'context'
|
||||||
|
>): Record<
|
||||||
AllStandardObjectFieldName<'calendarChannel'>,
|
AllStandardObjectFieldName<'calendarChannel'>,
|
||||||
FlatFieldMetadata
|
FlatFieldMetadata
|
||||||
> => ({
|
> => ({
|
||||||
@@ -54,7 +58,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -73,7 +77,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -91,7 +95,7 @@ export const buildCalendarChannelStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+5
-4
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -20,7 +21,7 @@ export const buildCalendarEventParticipantStandardFlatFieldMetadatas = ({
|
|||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<
|
}: Omit<
|
||||||
CreateStandardFieldArgs<'calendarEventParticipant'>,
|
CreateStandardFieldArgs<'calendarEventParticipant', FieldMetadataType>,
|
||||||
'context'
|
'context'
|
||||||
>): Record<
|
>): Record<
|
||||||
AllStandardObjectFieldName<'calendarEventParticipant'>,
|
AllStandardObjectFieldName<'calendarEventParticipant'>,
|
||||||
@@ -57,7 +58,7 @@ export const buildCalendarEventParticipantStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -76,7 +77,7 @@ export const buildCalendarEventParticipantStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -94,7 +95,7 @@ export const buildCalendarEventParticipantStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+12
-8
@@ -1,4 +1,8 @@
|
|||||||
import { FieldMetadataType, RelationType } from 'twenty-shared/types';
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
|
FieldMetadataType,
|
||||||
|
RelationType,
|
||||||
|
} from 'twenty-shared/types';
|
||||||
|
|
||||||
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||||
import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type';
|
import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type';
|
||||||
@@ -15,10 +19,10 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'calendarEvent'>, 'context'>): Record<
|
}: Omit<
|
||||||
AllStandardObjectFieldName<'calendarEvent'>,
|
CreateStandardFieldArgs<'calendarEvent', FieldMetadataType>,
|
||||||
FlatFieldMetadata
|
'context'
|
||||||
> => ({
|
>): Record<AllStandardObjectFieldName<'calendarEvent'>, FlatFieldMetadata> => ({
|
||||||
id: createStandardFieldFlatMetadata({
|
id: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -50,7 +54,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -69,7 +73,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -87,7 +91,7 @@ export const buildCalendarEventStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+21
-24
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -11,6 +12,8 @@ import {
|
|||||||
createStandardFieldFlatMetadata,
|
createStandardFieldFlatMetadata,
|
||||||
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
|
} 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 { 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/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
||||||
|
import { SEARCH_FIELDS_FOR_COMPANY } from 'src/modules/company/standard-objects/company.workspace-entity';
|
||||||
|
|
||||||
export const buildCompanyStandardFlatFieldMetadatas = ({
|
export const buildCompanyStandardFlatFieldMetadatas = ({
|
||||||
now,
|
now,
|
||||||
@@ -19,10 +22,10 @@ export const buildCompanyStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'company'>, 'context'>): Record<
|
}: Omit<
|
||||||
AllStandardObjectFieldName<'company'>,
|
CreateStandardFieldArgs<'company', FieldMetadataType>,
|
||||||
FlatFieldMetadata
|
'context'
|
||||||
> => ({
|
>): Record<AllStandardObjectFieldName<'company'>, FlatFieldMetadata> => ({
|
||||||
// Base fields from BaseWorkspaceEntity
|
// Base fields from BaseWorkspaceEntity
|
||||||
id: createStandardFieldFlatMetadata({
|
id: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
@@ -56,7 +59,7 @@ export const buildCompanyStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -77,7 +80,7 @@ export const buildCompanyStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -97,7 +100,7 @@ export const buildCompanyStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -160,23 +163,6 @@ export const buildCompanyStandardFlatFieldMetadatas = ({
|
|||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
now,
|
now,
|
||||||
}),
|
}),
|
||||||
addressOld: createStandardFieldFlatMetadata({
|
|
||||||
objectName,
|
|
||||||
workspaceId,
|
|
||||||
context: {
|
|
||||||
fieldName: 'addressOld',
|
|
||||||
type: FieldMetadataType.TEXT,
|
|
||||||
label: 'Address (deprecated)',
|
|
||||||
description:
|
|
||||||
'Address of the company - deprecated in favor of new address field',
|
|
||||||
icon: 'IconMap',
|
|
||||||
isNullable: true,
|
|
||||||
},
|
|
||||||
standardObjectMetadataRelatedEntityIds,
|
|
||||||
dependencyFlatEntityMaps,
|
|
||||||
twentyStandardApplicationId,
|
|
||||||
now,
|
|
||||||
}),
|
|
||||||
employees: createStandardFieldFlatMetadata({
|
employees: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -289,6 +275,11 @@ export const buildCompanyStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCreativeCommonsSa',
|
icon: 'IconCreativeCommonsSa',
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
isNullable: false,
|
isNullable: false,
|
||||||
|
defaultValue: {
|
||||||
|
source: "'MANUAL'",
|
||||||
|
name: "'System'",
|
||||||
|
workspaceMemberId: null,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -306,6 +297,12 @@ export const buildCompanyStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconUser',
|
icon: 'IconUser',
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
|
settings: {
|
||||||
|
generatedType: 'STORED',
|
||||||
|
asExpression: getTsVectorColumnExpressionFromFields(
|
||||||
|
SEARCH_FIELDS_FOR_COMPANY,
|
||||||
|
),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+8
-4
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -19,7 +20,10 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'connectedAccount'>, 'context'>): Record<
|
}: Omit<
|
||||||
|
CreateStandardFieldArgs<'connectedAccount', FieldMetadataType>,
|
||||||
|
'context'
|
||||||
|
>): Record<
|
||||||
AllStandardObjectFieldName<'connectedAccount'>,
|
AllStandardObjectFieldName<'connectedAccount'>,
|
||||||
FlatFieldMetadata
|
FlatFieldMetadata
|
||||||
> => ({
|
> => ({
|
||||||
@@ -54,7 +58,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -73,7 +77,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -91,7 +95,7 @@ export const buildConnectedAccountStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+25
-8
@@ -1,4 +1,8 @@
|
|||||||
import { FieldMetadataType, RelationType } from 'twenty-shared/types';
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
|
FieldMetadataType,
|
||||||
|
RelationType,
|
||||||
|
} from 'twenty-shared/types';
|
||||||
|
|
||||||
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||||
import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type';
|
import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type';
|
||||||
@@ -7,6 +11,8 @@ import {
|
|||||||
createStandardFieldFlatMetadata,
|
createStandardFieldFlatMetadata,
|
||||||
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
|
} 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 { 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/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
||||||
|
import { SEARCH_FIELDS_FOR_DASHBOARD } from 'src/modules/dashboard/standard-objects/dashboard.workspace-entity';
|
||||||
|
|
||||||
export const buildDashboardStandardFlatFieldMetadatas = ({
|
export const buildDashboardStandardFlatFieldMetadatas = ({
|
||||||
now,
|
now,
|
||||||
@@ -15,10 +21,10 @@ export const buildDashboardStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'dashboard'>, 'context'>): Record<
|
}: Omit<
|
||||||
AllStandardObjectFieldName<'dashboard'>,
|
CreateStandardFieldArgs<'dashboard', FieldMetadataType>,
|
||||||
FlatFieldMetadata
|
'context'
|
||||||
> => ({
|
>): Record<AllStandardObjectFieldName<'dashboard'>, FlatFieldMetadata> => ({
|
||||||
// Base fields from BaseWorkspaceEntity
|
// Base fields from BaseWorkspaceEntity
|
||||||
id: createStandardFieldFlatMetadata({
|
id: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
@@ -51,7 +57,7 @@ export const buildDashboardStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -70,7 +76,7 @@ export const buildDashboardStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -88,7 +94,7 @@ export const buildDashboardStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -159,6 +165,11 @@ export const buildDashboardStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCreativeCommonsSa',
|
icon: 'IconCreativeCommonsSa',
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
isNullable: false,
|
isNullable: false,
|
||||||
|
defaultValue: {
|
||||||
|
source: "'MANUAL'",
|
||||||
|
name: "'System'",
|
||||||
|
workspaceMemberId: null,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -176,6 +187,12 @@ export const buildDashboardStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconUser',
|
icon: 'IconUser',
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
|
settings: {
|
||||||
|
generatedType: 'STORED',
|
||||||
|
asExpression: getTsVectorColumnExpressionFromFields(
|
||||||
|
SEARCH_FIELDS_FOR_DASHBOARD,
|
||||||
|
),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+12
-5
@@ -1,4 +1,8 @@
|
|||||||
import { FieldMetadataType, RelationType } from 'twenty-shared/types';
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
|
FieldMetadataType,
|
||||||
|
RelationType,
|
||||||
|
} from 'twenty-shared/types';
|
||||||
|
|
||||||
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||||
import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type';
|
import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type';
|
||||||
@@ -15,7 +19,10 @@ export const buildFavoriteFolderStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'favoriteFolder'>, 'context'>): Record<
|
}: Omit<
|
||||||
|
CreateStandardFieldArgs<'favoriteFolder', FieldMetadataType>,
|
||||||
|
'context'
|
||||||
|
>): Record<
|
||||||
AllStandardObjectFieldName<'favoriteFolder'>,
|
AllStandardObjectFieldName<'favoriteFolder'>,
|
||||||
FlatFieldMetadata
|
FlatFieldMetadata
|
||||||
> => ({
|
> => ({
|
||||||
@@ -51,7 +58,7 @@ export const buildFavoriteFolderStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -70,7 +77,7 @@ export const buildFavoriteFolderStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -88,7 +95,7 @@ export const buildFavoriteFolderStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+10
-9
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -19,10 +20,10 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'favorite'>, 'context'>): Record<
|
}: Omit<
|
||||||
AllStandardObjectFieldName<'favorite'>,
|
CreateStandardFieldArgs<'favorite', FieldMetadataType>,
|
||||||
FlatFieldMetadata
|
'context'
|
||||||
> => ({
|
>): Record<AllStandardObjectFieldName<'favorite'>, FlatFieldMetadata> => ({
|
||||||
// Base fields from BaseWorkspaceEntity
|
// Base fields from BaseWorkspaceEntity
|
||||||
id: createStandardFieldFlatMetadata({
|
id: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
@@ -55,7 +56,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -74,7 +75,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -92,7 +93,7 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -119,11 +120,11 @@ export const buildFavoriteStandardFlatFieldMetadatas = ({
|
|||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
now,
|
now,
|
||||||
}),
|
}),
|
||||||
view: createStandardFieldFlatMetadata({
|
viewId: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
context: {
|
context: {
|
||||||
fieldName: 'view',
|
fieldName: 'viewId',
|
||||||
type: FieldMetadataType.UUID,
|
type: FieldMetadataType.UUID,
|
||||||
label: 'ViewId',
|
label: 'ViewId',
|
||||||
description: 'ViewId',
|
description: 'ViewId',
|
||||||
|
|||||||
+8
-4
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -22,7 +23,10 @@ export const buildMessageChannelMessageAssociationStandardFlatFieldMetadatas =
|
|||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<
|
}: Omit<
|
||||||
CreateStandardFieldArgs<'messageChannelMessageAssociation'>,
|
CreateStandardFieldArgs<
|
||||||
|
'messageChannelMessageAssociation',
|
||||||
|
FieldMetadataType
|
||||||
|
>,
|
||||||
'context'
|
'context'
|
||||||
>): Record<
|
>): Record<
|
||||||
AllStandardObjectFieldName<'messageChannelMessageAssociation'>,
|
AllStandardObjectFieldName<'messageChannelMessageAssociation'>,
|
||||||
@@ -59,7 +63,7 @@ export const buildMessageChannelMessageAssociationStandardFlatFieldMetadatas =
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -78,7 +82,7 @@ export const buildMessageChannelMessageAssociationStandardFlatFieldMetadatas =
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -96,7 +100,7 @@ export const buildMessageChannelMessageAssociationStandardFlatFieldMetadatas =
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+8
-4
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -20,7 +21,10 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'messageChannel'>, 'context'>): Record<
|
}: Omit<
|
||||||
|
CreateStandardFieldArgs<'messageChannel', FieldMetadataType>,
|
||||||
|
'context'
|
||||||
|
>): Record<
|
||||||
AllStandardObjectFieldName<'messageChannel'>,
|
AllStandardObjectFieldName<'messageChannel'>,
|
||||||
FlatFieldMetadata
|
FlatFieldMetadata
|
||||||
> => ({
|
> => ({
|
||||||
@@ -55,7 +59,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -74,7 +78,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -92,7 +96,7 @@ export const buildMessageChannelStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+8
-7
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -19,10 +20,10 @@ export const buildMessageFolderStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'messageFolder'>, 'context'>): Record<
|
}: Omit<
|
||||||
AllStandardObjectFieldName<'messageFolder'>,
|
CreateStandardFieldArgs<'messageFolder', FieldMetadataType>,
|
||||||
FlatFieldMetadata
|
'context'
|
||||||
> => ({
|
>): Record<AllStandardObjectFieldName<'messageFolder'>, FlatFieldMetadata> => ({
|
||||||
id: createStandardFieldFlatMetadata({
|
id: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -54,7 +55,7 @@ export const buildMessageFolderStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -73,7 +74,7 @@ export const buildMessageFolderStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -91,7 +92,7 @@ export const buildMessageFolderStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+8
-4
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
MessageParticipantRole,
|
MessageParticipantRole,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
@@ -20,7 +21,10 @@ export const buildMessageParticipantStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'messageParticipant'>, 'context'>): Record<
|
}: Omit<
|
||||||
|
CreateStandardFieldArgs<'messageParticipant', FieldMetadataType>,
|
||||||
|
'context'
|
||||||
|
>): Record<
|
||||||
AllStandardObjectFieldName<'messageParticipant'>,
|
AllStandardObjectFieldName<'messageParticipant'>,
|
||||||
FlatFieldMetadata
|
FlatFieldMetadata
|
||||||
> => ({
|
> => ({
|
||||||
@@ -55,7 +59,7 @@ export const buildMessageParticipantStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -74,7 +78,7 @@ export const buildMessageParticipantStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -92,7 +96,7 @@ export const buildMessageParticipantStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+8
-7
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -19,10 +20,10 @@ export const buildMessageStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'message'>, 'context'>): Record<
|
}: Omit<
|
||||||
AllStandardObjectFieldName<'message'>,
|
CreateStandardFieldArgs<'message', FieldMetadataType>,
|
||||||
FlatFieldMetadata
|
'context'
|
||||||
> => ({
|
>): Record<AllStandardObjectFieldName<'message'>, FlatFieldMetadata> => ({
|
||||||
id: createStandardFieldFlatMetadata({
|
id: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -54,7 +55,7 @@ export const buildMessageStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -73,7 +74,7 @@ export const buildMessageStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -91,7 +92,7 @@ export const buildMessageStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+12
-8
@@ -1,4 +1,8 @@
|
|||||||
import { FieldMetadataType, RelationType } from 'twenty-shared/types';
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
|
FieldMetadataType,
|
||||||
|
RelationType,
|
||||||
|
} from 'twenty-shared/types';
|
||||||
|
|
||||||
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||||
import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type';
|
import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type';
|
||||||
@@ -15,10 +19,10 @@ export const buildMessageThreadStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'messageThread'>, 'context'>): Record<
|
}: Omit<
|
||||||
AllStandardObjectFieldName<'messageThread'>,
|
CreateStandardFieldArgs<'messageThread', FieldMetadataType>,
|
||||||
FlatFieldMetadata
|
'context'
|
||||||
> => ({
|
>): Record<AllStandardObjectFieldName<'messageThread'>, FlatFieldMetadata> => ({
|
||||||
id: createStandardFieldFlatMetadata({
|
id: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -50,7 +54,7 @@ export const buildMessageThreadStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -69,7 +73,7 @@ export const buildMessageThreadStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -87,7 +91,7 @@ export const buildMessageThreadStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+22
-21
@@ -1,4 +1,8 @@
|
|||||||
import { FieldMetadataType, RelationType } from 'twenty-shared/types';
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
|
FieldMetadataType,
|
||||||
|
RelationType,
|
||||||
|
} from 'twenty-shared/types';
|
||||||
|
|
||||||
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||||
import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type';
|
import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type';
|
||||||
@@ -7,6 +11,8 @@ import {
|
|||||||
createStandardFieldFlatMetadata,
|
createStandardFieldFlatMetadata,
|
||||||
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
|
} 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 { 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/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
||||||
|
import { SEARCH_FIELDS_FOR_NOTES } from 'src/modules/note/standard-objects/note.workspace-entity';
|
||||||
|
|
||||||
export const buildNoteStandardFlatFieldMetadatas = ({
|
export const buildNoteStandardFlatFieldMetadatas = ({
|
||||||
now,
|
now,
|
||||||
@@ -15,7 +21,7 @@ export const buildNoteStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'note'>, 'context'>): Record<
|
}: Omit<CreateStandardFieldArgs<'note', FieldMetadataType>, 'context'>): Record<
|
||||||
AllStandardObjectFieldName<'note'>,
|
AllStandardObjectFieldName<'note'>,
|
||||||
FlatFieldMetadata
|
FlatFieldMetadata
|
||||||
> => ({
|
> => ({
|
||||||
@@ -52,7 +58,7 @@ export const buildNoteStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -73,7 +79,7 @@ export const buildNoteStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -93,7 +99,7 @@ export const buildNoteStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -137,22 +143,6 @@ export const buildNoteStandardFlatFieldMetadatas = ({
|
|||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
now,
|
now,
|
||||||
}),
|
}),
|
||||||
body: createStandardFieldFlatMetadata({
|
|
||||||
objectName,
|
|
||||||
workspaceId,
|
|
||||||
context: {
|
|
||||||
fieldName: 'body',
|
|
||||||
type: FieldMetadataType.TEXT,
|
|
||||||
label: 'Body (deprecated)',
|
|
||||||
description: 'Note body (deprecated - use bodyV2)',
|
|
||||||
icon: 'IconFilePencil',
|
|
||||||
isNullable: true,
|
|
||||||
},
|
|
||||||
standardObjectMetadataRelatedEntityIds,
|
|
||||||
dependencyFlatEntityMaps,
|
|
||||||
twentyStandardApplicationId,
|
|
||||||
now,
|
|
||||||
}),
|
|
||||||
bodyV2: createStandardFieldFlatMetadata({
|
bodyV2: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -180,6 +170,11 @@ export const buildNoteStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCreativeCommonsSa',
|
icon: 'IconCreativeCommonsSa',
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
isNullable: false,
|
isNullable: false,
|
||||||
|
defaultValue: {
|
||||||
|
source: "'MANUAL'",
|
||||||
|
name: "'System'",
|
||||||
|
workspaceMemberId: null,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -197,6 +192,12 @@ export const buildNoteStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconUser',
|
icon: 'IconUser',
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
|
settings: {
|
||||||
|
generatedType: 'STORED',
|
||||||
|
asExpression: getTsVectorColumnExpressionFromFields(
|
||||||
|
SEARCH_FIELDS_FOR_NOTES,
|
||||||
|
),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+8
-7
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -19,10 +20,10 @@ export const buildNoteTargetStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'noteTarget'>, 'context'>): Record<
|
}: Omit<
|
||||||
AllStandardObjectFieldName<'noteTarget'>,
|
CreateStandardFieldArgs<'noteTarget', FieldMetadataType>,
|
||||||
FlatFieldMetadata
|
'context'
|
||||||
> => ({
|
>): Record<AllStandardObjectFieldName<'noteTarget'>, FlatFieldMetadata> => ({
|
||||||
// Base fields from BaseWorkspaceEntity
|
// Base fields from BaseWorkspaceEntity
|
||||||
id: createStandardFieldFlatMetadata({
|
id: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
@@ -56,7 +57,7 @@ export const buildNoteTargetStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -77,7 +78,7 @@ export const buildNoteTargetStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -97,7 +98,7 @@ export const buildNoteTargetStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
|
|||||||
+21
-7
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -11,6 +12,8 @@ import {
|
|||||||
createStandardFieldFlatMetadata,
|
createStandardFieldFlatMetadata,
|
||||||
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
|
} 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 { 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/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
||||||
|
import { SEARCH_FIELDS_FOR_OPPORTUNITY } from 'src/modules/opportunity/standard-objects/opportunity.workspace-entity';
|
||||||
|
|
||||||
export const buildOpportunityStandardFlatFieldMetadatas = ({
|
export const buildOpportunityStandardFlatFieldMetadatas = ({
|
||||||
now,
|
now,
|
||||||
@@ -19,10 +22,10 @@ export const buildOpportunityStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'opportunity'>, 'context'>): Record<
|
}: Omit<
|
||||||
AllStandardObjectFieldName<'opportunity'>,
|
CreateStandardFieldArgs<'opportunity', FieldMetadataType>,
|
||||||
FlatFieldMetadata
|
'context'
|
||||||
> => ({
|
>): Record<AllStandardObjectFieldName<'opportunity'>, FlatFieldMetadata> => ({
|
||||||
// Base fields from BaseWorkspaceEntity
|
// Base fields from BaseWorkspaceEntity
|
||||||
id: createStandardFieldFlatMetadata({
|
id: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
@@ -56,7 +59,7 @@ export const buildOpportunityStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -77,7 +80,7 @@ export const buildOpportunityStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -97,7 +100,7 @@ export const buildOpportunityStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -218,6 +221,11 @@ export const buildOpportunityStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCreativeCommonsSa',
|
icon: 'IconCreativeCommonsSa',
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
isNullable: false,
|
isNullable: false,
|
||||||
|
defaultValue: {
|
||||||
|
source: "'MANUAL'",
|
||||||
|
name: "'System'",
|
||||||
|
workspaceMemberId: null,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -235,6 +243,12 @@ export const buildOpportunityStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconUser',
|
icon: 'IconUser',
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
|
settings: {
|
||||||
|
generatedType: 'STORED',
|
||||||
|
asExpression: getTsVectorColumnExpressionFromFields(
|
||||||
|
SEARCH_FIELDS_FOR_OPPORTUNITY,
|
||||||
|
),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+21
-39
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -11,6 +12,8 @@ import {
|
|||||||
createStandardFieldFlatMetadata,
|
createStandardFieldFlatMetadata,
|
||||||
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
|
} 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 { 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/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
||||||
|
import { SEARCH_FIELDS_FOR_PERSON } from 'src/modules/person/standard-objects/person.workspace-entity';
|
||||||
|
|
||||||
export const buildPersonStandardFlatFieldMetadatas = ({
|
export const buildPersonStandardFlatFieldMetadatas = ({
|
||||||
now,
|
now,
|
||||||
@@ -19,10 +22,10 @@ export const buildPersonStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'person'>, 'context'>): Record<
|
}: Omit<
|
||||||
AllStandardObjectFieldName<'person'>,
|
CreateStandardFieldArgs<'person', FieldMetadataType>,
|
||||||
FlatFieldMetadata
|
'context'
|
||||||
> => ({
|
>): Record<AllStandardObjectFieldName<'person'>, FlatFieldMetadata> => ({
|
||||||
// Base fields from BaseWorkspaceEntity
|
// Base fields from BaseWorkspaceEntity
|
||||||
id: createStandardFieldFlatMetadata({
|
id: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
@@ -56,7 +59,7 @@ export const buildPersonStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -77,7 +80,7 @@ export const buildPersonStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -97,7 +100,7 @@ export const buildPersonStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -123,22 +126,6 @@ export const buildPersonStandardFlatFieldMetadatas = ({
|
|||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
now,
|
now,
|
||||||
}),
|
}),
|
||||||
email: createStandardFieldFlatMetadata({
|
|
||||||
objectName,
|
|
||||||
workspaceId,
|
|
||||||
context: {
|
|
||||||
fieldName: 'email',
|
|
||||||
type: FieldMetadataType.TEXT,
|
|
||||||
label: 'Email',
|
|
||||||
description: "Contact's Email (deprecated)",
|
|
||||||
icon: 'IconMail',
|
|
||||||
isNullable: true,
|
|
||||||
},
|
|
||||||
standardObjectMetadataRelatedEntityIds,
|
|
||||||
dependencyFlatEntityMaps,
|
|
||||||
twentyStandardApplicationId,
|
|
||||||
now,
|
|
||||||
}),
|
|
||||||
emails: createStandardFieldFlatMetadata({
|
emails: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -207,22 +194,6 @@ export const buildPersonStandardFlatFieldMetadatas = ({
|
|||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
now,
|
now,
|
||||||
}),
|
}),
|
||||||
phone: createStandardFieldFlatMetadata({
|
|
||||||
objectName,
|
|
||||||
workspaceId,
|
|
||||||
context: {
|
|
||||||
fieldName: 'phone',
|
|
||||||
type: FieldMetadataType.TEXT,
|
|
||||||
label: 'Phone',
|
|
||||||
description: "Contact's phone number (deprecated)",
|
|
||||||
icon: 'IconPhone',
|
|
||||||
isNullable: true,
|
|
||||||
},
|
|
||||||
standardObjectMetadataRelatedEntityIds,
|
|
||||||
dependencyFlatEntityMaps,
|
|
||||||
twentyStandardApplicationId,
|
|
||||||
now,
|
|
||||||
}),
|
|
||||||
phones: createStandardFieldFlatMetadata({
|
phones: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -304,6 +275,11 @@ export const buildPersonStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCreativeCommonsSa',
|
icon: 'IconCreativeCommonsSa',
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
isNullable: false,
|
isNullable: false,
|
||||||
|
defaultValue: {
|
||||||
|
source: "'MANUAL'",
|
||||||
|
name: "'System'",
|
||||||
|
workspaceMemberId: null,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -531,6 +507,12 @@ export const buildPersonStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconUser',
|
icon: 'IconUser',
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
|
settings: {
|
||||||
|
generatedType: 'STORED',
|
||||||
|
asExpression: getTsVectorColumnExpressionFromFields(
|
||||||
|
SEARCH_FIELDS_FOR_PERSON,
|
||||||
|
),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+18
-20
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -11,6 +12,8 @@ import {
|
|||||||
createStandardFieldFlatMetadata,
|
createStandardFieldFlatMetadata,
|
||||||
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
|
} 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 { 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/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
||||||
|
import { SEARCH_FIELDS_FOR_TASKS } from 'src/modules/task/standard-objects/task.workspace-entity';
|
||||||
|
|
||||||
export const buildTaskStandardFlatFieldMetadatas = ({
|
export const buildTaskStandardFlatFieldMetadatas = ({
|
||||||
now,
|
now,
|
||||||
@@ -19,7 +22,7 @@ export const buildTaskStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'task'>, 'context'>): Record<
|
}: Omit<CreateStandardFieldArgs<'task', FieldMetadataType>, 'context'>): Record<
|
||||||
AllStandardObjectFieldName<'task'>,
|
AllStandardObjectFieldName<'task'>,
|
||||||
FlatFieldMetadata
|
FlatFieldMetadata
|
||||||
> => ({
|
> => ({
|
||||||
@@ -56,7 +59,7 @@ export const buildTaskStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -77,7 +80,7 @@ export const buildTaskStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -97,7 +100,7 @@ export const buildTaskStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -141,22 +144,6 @@ export const buildTaskStandardFlatFieldMetadatas = ({
|
|||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
now,
|
now,
|
||||||
}),
|
}),
|
||||||
body: createStandardFieldFlatMetadata({
|
|
||||||
objectName,
|
|
||||||
workspaceId,
|
|
||||||
context: {
|
|
||||||
fieldName: 'body',
|
|
||||||
type: FieldMetadataType.TEXT,
|
|
||||||
label: 'Body (deprecated)',
|
|
||||||
description: 'Task body (deprecated - use bodyV2)',
|
|
||||||
icon: 'IconFilePencil',
|
|
||||||
isNullable: true,
|
|
||||||
},
|
|
||||||
standardObjectMetadataRelatedEntityIds,
|
|
||||||
dependencyFlatEntityMaps,
|
|
||||||
twentyStandardApplicationId,
|
|
||||||
now,
|
|
||||||
}),
|
|
||||||
bodyV2: createStandardFieldFlatMetadata({
|
bodyV2: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -227,6 +214,11 @@ export const buildTaskStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCreativeCommonsSa',
|
icon: 'IconCreativeCommonsSa',
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
isNullable: false,
|
isNullable: false,
|
||||||
|
defaultValue: {
|
||||||
|
source: "'MANUAL'",
|
||||||
|
name: "'System'",
|
||||||
|
workspaceMemberId: null,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -244,6 +236,12 @@ export const buildTaskStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconUser',
|
icon: 'IconUser',
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
|
settings: {
|
||||||
|
generatedType: 'STORED',
|
||||||
|
asExpression: getTsVectorColumnExpressionFromFields(
|
||||||
|
SEARCH_FIELDS_FOR_TASKS,
|
||||||
|
),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+8
-7
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -19,10 +20,10 @@ export const buildTaskTargetStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'taskTarget'>, 'context'>): Record<
|
}: Omit<
|
||||||
AllStandardObjectFieldName<'taskTarget'>,
|
CreateStandardFieldArgs<'taskTarget', FieldMetadataType>,
|
||||||
FlatFieldMetadata
|
'context'
|
||||||
> => ({
|
>): Record<AllStandardObjectFieldName<'taskTarget'>, FlatFieldMetadata> => ({
|
||||||
// Base fields from BaseWorkspaceEntity
|
// Base fields from BaseWorkspaceEntity
|
||||||
id: createStandardFieldFlatMetadata({
|
id: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
@@ -56,7 +57,7 @@ export const buildTaskTargetStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -77,7 +78,7 @@ export const buildTaskTargetStandardFlatFieldMetadatas = ({
|
|||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
@@ -97,7 +98,7 @@ export const buildTaskTargetStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: {
|
settings: {
|
||||||
displayFormat: 'RELATIVE',
|
displayFormat: DateDisplayFormat.RELATIVE,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
|
|||||||
+8
-4
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -20,7 +21,10 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'timelineActivity'>, 'context'>): Record<
|
}: Omit<
|
||||||
|
CreateStandardFieldArgs<'timelineActivity', FieldMetadataType>,
|
||||||
|
'context'
|
||||||
|
>): Record<
|
||||||
AllStandardObjectFieldName<'timelineActivity'>,
|
AllStandardObjectFieldName<'timelineActivity'>,
|
||||||
FlatFieldMetadata
|
FlatFieldMetadata
|
||||||
> => ({
|
> => ({
|
||||||
@@ -56,7 +60,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -75,7 +79,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -93,7 +97,7 @@ export const buildTimelineActivityStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+5
-4
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -20,7 +21,7 @@ export const buildWorkflowAutomatedTriggerStandardFlatFieldMetadatas = ({
|
|||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<
|
}: Omit<
|
||||||
CreateStandardFieldArgs<'workflowAutomatedTrigger'>,
|
CreateStandardFieldArgs<'workflowAutomatedTrigger', FieldMetadataType>,
|
||||||
'context'
|
'context'
|
||||||
>): Record<
|
>): Record<
|
||||||
AllStandardObjectFieldName<'workflowAutomatedTrigger'>,
|
AllStandardObjectFieldName<'workflowAutomatedTrigger'>,
|
||||||
@@ -57,7 +58,7 @@ export const buildWorkflowAutomatedTriggerStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -76,7 +77,7 @@ export const buildWorkflowAutomatedTriggerStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -94,7 +95,7 @@ export const buildWorkflowAutomatedTriggerStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+21
-7
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -11,6 +12,8 @@ import {
|
|||||||
createStandardFieldFlatMetadata,
|
createStandardFieldFlatMetadata,
|
||||||
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
|
} 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 { 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/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
||||||
|
import { SEARCH_FIELDS_FOR_WORKFLOW_RUNS } from 'src/modules/workflow/common/standard-objects/workflow-run.workspace-entity';
|
||||||
|
|
||||||
export const buildWorkflowRunStandardFlatFieldMetadatas = ({
|
export const buildWorkflowRunStandardFlatFieldMetadatas = ({
|
||||||
now,
|
now,
|
||||||
@@ -19,10 +22,10 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'workflowRun'>, 'context'>): Record<
|
}: Omit<
|
||||||
AllStandardObjectFieldName<'workflowRun'>,
|
CreateStandardFieldArgs<'workflowRun', FieldMetadataType>,
|
||||||
FlatFieldMetadata
|
'context'
|
||||||
> => ({
|
>): Record<AllStandardObjectFieldName<'workflowRun'>, FlatFieldMetadata> => ({
|
||||||
id: createStandardFieldFlatMetadata({
|
id: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -54,7 +57,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -73,7 +76,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -91,7 +94,7 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -203,6 +206,11 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({
|
|||||||
description: 'The executor of the workflow',
|
description: 'The executor of the workflow',
|
||||||
icon: 'IconCreativeCommonsSa',
|
icon: 'IconCreativeCommonsSa',
|
||||||
isNullable: false,
|
isNullable: false,
|
||||||
|
defaultValue: {
|
||||||
|
source: "'MANUAL'",
|
||||||
|
name: "'System'",
|
||||||
|
workspaceMemberId: null,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -286,6 +294,12 @@ export const buildWorkflowRunStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconUser',
|
icon: 'IconUser',
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
|
settings: {
|
||||||
|
generatedType: 'STORED',
|
||||||
|
asExpression: getTsVectorColumnExpressionFromFields(
|
||||||
|
SEARCH_FIELDS_FOR_WORKFLOW_RUNS,
|
||||||
|
),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+25
-8
@@ -1,4 +1,8 @@
|
|||||||
import { FieldMetadataType, RelationType } from 'twenty-shared/types';
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
|
FieldMetadataType,
|
||||||
|
RelationType,
|
||||||
|
} from 'twenty-shared/types';
|
||||||
|
|
||||||
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||||
import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type';
|
import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type';
|
||||||
@@ -7,6 +11,8 @@ import {
|
|||||||
createStandardFieldFlatMetadata,
|
createStandardFieldFlatMetadata,
|
||||||
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
|
} 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 { 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/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
||||||
|
import { SEARCH_FIELDS_FOR_WORKFLOWS } from 'src/modules/workflow/common/standard-objects/workflow.workspace-entity';
|
||||||
|
|
||||||
export const buildWorkflowStandardFlatFieldMetadatas = ({
|
export const buildWorkflowStandardFlatFieldMetadatas = ({
|
||||||
now,
|
now,
|
||||||
@@ -15,10 +21,10 @@ export const buildWorkflowStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'workflow'>, 'context'>): Record<
|
}: Omit<
|
||||||
AllStandardObjectFieldName<'workflow'>,
|
CreateStandardFieldArgs<'workflow', FieldMetadataType>,
|
||||||
FlatFieldMetadata
|
'context'
|
||||||
> => ({
|
>): Record<AllStandardObjectFieldName<'workflow'>, FlatFieldMetadata> => ({
|
||||||
id: createStandardFieldFlatMetadata({
|
id: createStandardFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -50,7 +56,7 @@ export const buildWorkflowStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -69,7 +75,7 @@ export const buildWorkflowStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -87,7 +93,7 @@ export const buildWorkflowStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -183,6 +189,11 @@ export const buildWorkflowStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCreativeCommonsSa',
|
icon: 'IconCreativeCommonsSa',
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
isNullable: false,
|
isNullable: false,
|
||||||
|
defaultValue: {
|
||||||
|
source: "'MANUAL'",
|
||||||
|
name: "'System'",
|
||||||
|
workspaceMemberId: null,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -200,6 +211,12 @@ export const buildWorkflowStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconUser',
|
icon: 'IconUser',
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
|
settings: {
|
||||||
|
generatedType: 'STORED',
|
||||||
|
asExpression: getTsVectorColumnExpressionFromFields(
|
||||||
|
SEARCH_FIELDS_FOR_WORKFLOWS,
|
||||||
|
),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+16
-4
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
RelationOnDeleteAction,
|
RelationOnDeleteAction,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -11,6 +12,8 @@ import {
|
|||||||
createStandardFieldFlatMetadata,
|
createStandardFieldFlatMetadata,
|
||||||
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
|
} 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 { 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/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
||||||
|
import { SEARCH_FIELDS_FOR_WORKFLOW_VERSIONS } from 'src/modules/workflow/common/standard-objects/workflow-version.workspace-entity';
|
||||||
|
|
||||||
export const buildWorkflowVersionStandardFlatFieldMetadatas = ({
|
export const buildWorkflowVersionStandardFlatFieldMetadatas = ({
|
||||||
now,
|
now,
|
||||||
@@ -19,7 +22,10 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'workflowVersion'>, 'context'>): Record<
|
}: Omit<
|
||||||
|
CreateStandardFieldArgs<'workflowVersion', FieldMetadataType>,
|
||||||
|
'context'
|
||||||
|
>): Record<
|
||||||
AllStandardObjectFieldName<'workflowVersion'>,
|
AllStandardObjectFieldName<'workflowVersion'>,
|
||||||
FlatFieldMetadata
|
FlatFieldMetadata
|
||||||
> => ({
|
> => ({
|
||||||
@@ -54,7 +60,7 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -73,7 +79,7 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -91,7 +97,7 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -203,6 +209,12 @@ export const buildWorkflowVersionStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconUser',
|
icon: 'IconUser',
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
|
settings: {
|
||||||
|
generatedType: 'STORED',
|
||||||
|
asExpression: getTsVectorColumnExpressionFromFields(
|
||||||
|
SEARCH_FIELDS_FOR_WORKFLOW_VERSIONS,
|
||||||
|
),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+19
-28
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
DateDisplayFormat,
|
||||||
FieldMetadataType,
|
FieldMetadataType,
|
||||||
NumberDataType,
|
NumberDataType,
|
||||||
RelationType,
|
RelationType,
|
||||||
@@ -11,7 +12,11 @@ import {
|
|||||||
createStandardFieldFlatMetadata,
|
createStandardFieldFlatMetadata,
|
||||||
} from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util';
|
} 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 { createStandardRelationFieldFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util';
|
||||||
import { WorkspaceMemberNumberFormatEnum } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity';
|
import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-manager/workspace-sync-metadata/utils/get-ts-vector-column-expression.util';
|
||||||
|
import {
|
||||||
|
SEARCH_FIELDS_FOR_WORKSPACE_MEMBER,
|
||||||
|
WorkspaceMemberNumberFormatEnum,
|
||||||
|
} from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity';
|
||||||
|
|
||||||
export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({
|
export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({
|
||||||
now,
|
now,
|
||||||
@@ -20,7 +25,10 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({
|
|||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
}: Omit<CreateStandardFieldArgs<'workspaceMember'>, 'context'>): Record<
|
}: Omit<
|
||||||
|
CreateStandardFieldArgs<'workspaceMember', FieldMetadataType>,
|
||||||
|
'context'
|
||||||
|
>): Record<
|
||||||
AllStandardObjectFieldName<'workspaceMember'>,
|
AllStandardObjectFieldName<'workspaceMember'>,
|
||||||
FlatFieldMetadata
|
FlatFieldMetadata
|
||||||
> => ({
|
> => ({
|
||||||
@@ -55,7 +63,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -74,7 +82,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({
|
|||||||
isNullable: false,
|
isNullable: false,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
defaultValue: 'now',
|
defaultValue: 'now',
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -92,7 +100,7 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconCalendarMinus',
|
icon: 'IconCalendarMinus',
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
isUIReadOnly: true,
|
isUIReadOnly: true,
|
||||||
settings: { displayFormat: 'RELATIVE' },
|
settings: { displayFormat: DateDisplayFormat.RELATIVE },
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -378,6 +386,12 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({
|
|||||||
icon: 'IconUser',
|
icon: 'IconUser',
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
isNullable: true,
|
isNullable: true,
|
||||||
|
settings: {
|
||||||
|
generatedType: 'STORED',
|
||||||
|
asExpression: getTsVectorColumnExpressionFromFields(
|
||||||
|
SEARCH_FIELDS_FOR_WORKSPACE_MEMBER,
|
||||||
|
),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
@@ -450,29 +464,6 @@ export const buildWorkspaceMemberStandardFlatFieldMetadatas = ({
|
|||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
now,
|
now,
|
||||||
}),
|
}),
|
||||||
authoredAttachments: createStandardRelationFieldFlatMetadata({
|
|
||||||
objectName,
|
|
||||||
workspaceId,
|
|
||||||
context: {
|
|
||||||
type: FieldMetadataType.RELATION,
|
|
||||||
morphId: null,
|
|
||||||
fieldName: 'authoredAttachments',
|
|
||||||
label: 'Authored attachments',
|
|
||||||
description: 'Attachments created by the workspace member',
|
|
||||||
icon: 'IconFileImport',
|
|
||||||
isSystem: true,
|
|
||||||
isNullable: false,
|
|
||||||
targetObjectName: 'attachment',
|
|
||||||
targetFieldName: 'author',
|
|
||||||
settings: {
|
|
||||||
relationType: RelationType.ONE_TO_MANY,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
standardObjectMetadataRelatedEntityIds,
|
|
||||||
dependencyFlatEntityMaps,
|
|
||||||
twentyStandardApplicationId,
|
|
||||||
now,
|
|
||||||
}),
|
|
||||||
connectedAccounts: createStandardRelationFieldFlatMetadata({
|
connectedAccounts: createStandardRelationFieldFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
|
|||||||
+14
-11
@@ -1,7 +1,8 @@
|
|||||||
import {
|
import {
|
||||||
|
type FieldMetadataDefaultValue,
|
||||||
|
type FieldMetadataSettings,
|
||||||
type FieldMetadataComplexOption,
|
type FieldMetadataComplexOption,
|
||||||
type FieldMetadataDefaultOption,
|
type FieldMetadataDefaultOption,
|
||||||
type FieldMetadataDefaultValueForAnyType,
|
|
||||||
type FieldMetadataType,
|
type FieldMetadataType,
|
||||||
} from 'twenty-shared/types';
|
} from 'twenty-shared/types';
|
||||||
import { v4 } from 'uuid';
|
import { v4 } from 'uuid';
|
||||||
@@ -13,12 +14,13 @@ import { type AllStandardObjectName } from 'src/engine/workspace-manager/twenty-
|
|||||||
import { type StandardBuilderArgs } from 'src/engine/workspace-manager/twenty-standard-application/types/metadata-standard-buillder-args.type';
|
import { type StandardBuilderArgs } from 'src/engine/workspace-manager/twenty-standard-application/types/metadata-standard-buillder-args.type';
|
||||||
|
|
||||||
export type CreateStandardFieldArgs<
|
export type CreateStandardFieldArgs<
|
||||||
O extends AllStandardObjectName = AllStandardObjectName,
|
O extends AllStandardObjectName,
|
||||||
|
T extends FieldMetadataType,
|
||||||
> = StandardBuilderArgs<'fieldMetadata'> & {
|
> = StandardBuilderArgs<'fieldMetadata'> & {
|
||||||
objectName: O;
|
objectName: O;
|
||||||
context: {
|
context: {
|
||||||
fieldName: AllStandardObjectFieldName<O>;
|
fieldName: AllStandardObjectFieldName<O>;
|
||||||
type: Exclude<FieldMetadataType, typeof FieldMetadataType.RELATION>;
|
type: T;
|
||||||
label: string;
|
label: string;
|
||||||
description: string;
|
description: string;
|
||||||
icon: string;
|
icon: string;
|
||||||
@@ -26,8 +28,8 @@ export type CreateStandardFieldArgs<
|
|||||||
isNullable?: boolean;
|
isNullable?: boolean;
|
||||||
isUnique?: boolean;
|
isUnique?: boolean;
|
||||||
isUIReadOnly?: boolean;
|
isUIReadOnly?: boolean;
|
||||||
defaultValue?: FieldMetadataDefaultValueForAnyType;
|
defaultValue?: FieldMetadataDefaultValue<T>;
|
||||||
settings?: Record<string, unknown> | null;
|
settings?: FieldMetadataSettings<T>;
|
||||||
options?:
|
options?:
|
||||||
| FieldMetadataDefaultOption[]
|
| FieldMetadataDefaultOption[]
|
||||||
| FieldMetadataComplexOption[]
|
| FieldMetadataComplexOption[]
|
||||||
@@ -37,6 +39,7 @@ export type CreateStandardFieldArgs<
|
|||||||
|
|
||||||
export const createStandardFieldFlatMetadata = <
|
export const createStandardFieldFlatMetadata = <
|
||||||
O extends AllStandardObjectName,
|
O extends AllStandardObjectName,
|
||||||
|
T extends FieldMetadataType,
|
||||||
>({
|
>({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -50,14 +53,14 @@ export const createStandardFieldFlatMetadata = <
|
|||||||
isNullable = true,
|
isNullable = true,
|
||||||
isUnique = false,
|
isUnique = false,
|
||||||
isUIReadOnly = false,
|
isUIReadOnly = false,
|
||||||
defaultValue = null,
|
defaultValue,
|
||||||
settings = null,
|
settings,
|
||||||
options: fieldOptions = null,
|
options: fieldOptions = null,
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
twentyStandardApplicationId,
|
twentyStandardApplicationId,
|
||||||
now,
|
now,
|
||||||
}: CreateStandardFieldArgs<O>): FlatFieldMetadata => {
|
}: CreateStandardFieldArgs<O, T>): FlatFieldMetadata => {
|
||||||
const objectFields = STANDARD_OBJECTS[objectName].fields;
|
const objectFields = STANDARD_OBJECTS[objectName].fields;
|
||||||
const fieldDefinition = objectFields[fieldName as keyof typeof objectFields];
|
const fieldDefinition = objectFields[fieldName as keyof typeof objectFields];
|
||||||
const fieldIds = standardObjectMetadataRelatedEntityIds[objectName].fields;
|
const fieldIds = standardObjectMetadataRelatedEntityIds[objectName].fields;
|
||||||
@@ -67,7 +70,7 @@ export const createStandardFieldFlatMetadata = <
|
|||||||
return {
|
return {
|
||||||
id: fieldIds[fieldName].id,
|
id: fieldIds[fieldName].id,
|
||||||
universalIdentifier: fieldDefinition.universalIdentifier,
|
universalIdentifier: fieldDefinition.universalIdentifier,
|
||||||
standardId: null,
|
standardId: fieldDefinition.universalIdentifier,
|
||||||
applicationId: twentyStandardApplicationId,
|
applicationId: twentyStandardApplicationId,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
objectMetadataId: standardObjectMetadataRelatedEntityIds[objectName].id,
|
objectMetadataId: standardObjectMetadataRelatedEntityIds[objectName].id,
|
||||||
@@ -84,8 +87,8 @@ export const createStandardFieldFlatMetadata = <
|
|||||||
isUIReadOnly,
|
isUIReadOnly,
|
||||||
isLabelSyncedWithName: false,
|
isLabelSyncedWithName: false,
|
||||||
standardOverrides: null,
|
standardOverrides: null,
|
||||||
defaultValue,
|
defaultValue: defaultValue ?? null,
|
||||||
settings,
|
settings: settings ?? null,
|
||||||
options: fieldOptions?.map((option) => ({ ...option, id: v4() })) ?? null,
|
options: fieldOptions?.map((option) => ({ ...option, id: v4() })) ?? null,
|
||||||
relationTargetFieldMetadataId: null,
|
relationTargetFieldMetadataId: null,
|
||||||
relationTargetObjectMetadataId: null,
|
relationTargetObjectMetadataId: null,
|
||||||
|
|||||||
+1
-1
@@ -85,7 +85,7 @@ export const createStandardRelationFieldFlatMetadata = <
|
|||||||
return {
|
return {
|
||||||
id: fieldIds[fieldName as keyof typeof fieldIds].id,
|
id: fieldIds[fieldName as keyof typeof fieldIds].id,
|
||||||
universalIdentifier: fieldDefinition.universalIdentifier,
|
universalIdentifier: fieldDefinition.universalIdentifier,
|
||||||
standardId: null,
|
standardId: fieldDefinition.universalIdentifier,
|
||||||
applicationId: twentyStandardApplicationId,
|
applicationId: twentyStandardApplicationId,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
objectMetadataId: standardObjectMetadataRelatedEntityIds[objectName].id,
|
objectMetadataId: standardObjectMetadataRelatedEntityIds[objectName].id,
|
||||||
|
|||||||
-12
@@ -16,18 +16,6 @@ export const buildAttachmentStandardFlatIndexMetadatas = ({
|
|||||||
AllStandardObjectIndexName<'attachment'>,
|
AllStandardObjectIndexName<'attachment'>,
|
||||||
FlatIndexMetadata
|
FlatIndexMetadata
|
||||||
> => ({
|
> => ({
|
||||||
authorIdIndex: createStandardIndexFlatMetadata({
|
|
||||||
objectName,
|
|
||||||
workspaceId,
|
|
||||||
context: {
|
|
||||||
indexName: 'authorIdIndex',
|
|
||||||
relatedFieldNames: ['author'],
|
|
||||||
},
|
|
||||||
standardObjectMetadataRelatedEntityIds,
|
|
||||||
dependencyFlatEntityMaps,
|
|
||||||
twentyStandardApplicationId,
|
|
||||||
now,
|
|
||||||
}),
|
|
||||||
taskIdIndex: createStandardIndexFlatMetadata({
|
taskIdIndex: createStandardIndexFlatMetadata({
|
||||||
objectName,
|
objectName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
|
|||||||
+1
@@ -51,6 +51,7 @@ export const buildMessageChannelMessageAssociationStandardFlatIndexMetadatas =
|
|||||||
indexName: 'messageChannelIdMessageIdUniqueIndex',
|
indexName: 'messageChannelIdMessageIdUniqueIndex',
|
||||||
relatedFieldNames: ['messageChannel', 'message'],
|
relatedFieldNames: ['messageChannel', 'message'],
|
||||||
isUnique: true,
|
isUnique: true,
|
||||||
|
indexWhereClause: '"deletedAt" IS NULL',
|
||||||
},
|
},
|
||||||
standardObjectMetadataRelatedEntityIds,
|
standardObjectMetadataRelatedEntityIds,
|
||||||
dependencyFlatEntityMaps,
|
dependencyFlatEntityMaps,
|
||||||
|
|||||||
+13
-6
@@ -203,6 +203,7 @@ export const STANDARD_FLAT_OBJECT_METADATA_BUILDERS_BY_OBJECT_NAME = {
|
|||||||
icon: 'IconBuildingSkyscraper',
|
icon: 'IconBuildingSkyscraper',
|
||||||
isSearchable: true,
|
isSearchable: true,
|
||||||
shortcut: 'C',
|
shortcut: 'C',
|
||||||
|
duplicateCriteria: [['name'], ['domainNamePrimaryLinkUrl']],
|
||||||
labelIdentifierFieldMetadataName: 'name',
|
labelIdentifierFieldMetadataName: 'name',
|
||||||
},
|
},
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -233,7 +234,6 @@ export const STANDARD_FLAT_OBJECT_METADATA_BUILDERS_BY_OBJECT_NAME = {
|
|||||||
description: 'A connected account',
|
description: 'A connected account',
|
||||||
icon: 'IconAt',
|
icon: 'IconAt',
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
isAuditLogged: false,
|
|
||||||
labelIdentifierFieldMetadataName: 'handle',
|
labelIdentifierFieldMetadataName: 'handle',
|
||||||
},
|
},
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -470,7 +470,6 @@ export const STANDARD_FLAT_OBJECT_METADATA_BUILDERS_BY_OBJECT_NAME = {
|
|||||||
icon: 'IconMessage',
|
icon: 'IconMessage',
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
isAuditLogged: false,
|
isAuditLogged: false,
|
||||||
isUIReadOnly: true,
|
|
||||||
labelIdentifierFieldMetadataName: 'id',
|
labelIdentifierFieldMetadataName: 'id',
|
||||||
},
|
},
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -498,7 +497,6 @@ export const STANDARD_FLAT_OBJECT_METADATA_BUILDERS_BY_OBJECT_NAME = {
|
|||||||
icon: 'IconMessage',
|
icon: 'IconMessage',
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
isAuditLogged: false,
|
isAuditLogged: false,
|
||||||
isUIReadOnly: true,
|
|
||||||
labelIdentifierFieldMetadataName: 'subject',
|
labelIdentifierFieldMetadataName: 'subject',
|
||||||
},
|
},
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -606,6 +604,11 @@ export const STANDARD_FLAT_OBJECT_METADATA_BUILDERS_BY_OBJECT_NAME = {
|
|||||||
icon: 'IconUser',
|
icon: 'IconUser',
|
||||||
isSearchable: true,
|
isSearchable: true,
|
||||||
shortcut: 'P',
|
shortcut: 'P',
|
||||||
|
duplicateCriteria: [
|
||||||
|
['nameFirstName', 'nameLastName'],
|
||||||
|
['linkedinLinkPrimaryLinkUrl'],
|
||||||
|
['emailsPrimaryEmail'],
|
||||||
|
],
|
||||||
labelIdentifierFieldMetadataName: 'name',
|
labelIdentifierFieldMetadataName: 'name',
|
||||||
},
|
},
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -690,6 +693,7 @@ export const STANDARD_FLAT_OBJECT_METADATA_BUILDERS_BY_OBJECT_NAME = {
|
|||||||
'Aggregated / filtered event to be displayed on the timeline',
|
'Aggregated / filtered event to be displayed on the timeline',
|
||||||
icon: 'IconTimelineEvent',
|
icon: 'IconTimelineEvent',
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
|
isAuditLogged: false,
|
||||||
labelIdentifierFieldMetadataName: 'name',
|
labelIdentifierFieldMetadataName: 'name',
|
||||||
},
|
},
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -715,7 +719,6 @@ export const STANDARD_FLAT_OBJECT_METADATA_BUILDERS_BY_OBJECT_NAME = {
|
|||||||
labelPlural: 'Workflows',
|
labelPlural: 'Workflows',
|
||||||
description: 'A workflow',
|
description: 'A workflow',
|
||||||
icon: 'IconSettingsAutomation',
|
icon: 'IconSettingsAutomation',
|
||||||
isSearchable: true,
|
|
||||||
shortcut: 'W',
|
shortcut: 'W',
|
||||||
labelIdentifierFieldMetadataName: 'name',
|
labelIdentifierFieldMetadataName: 'name',
|
||||||
},
|
},
|
||||||
@@ -772,7 +775,9 @@ export const STANDARD_FLAT_OBJECT_METADATA_BUILDERS_BY_OBJECT_NAME = {
|
|||||||
labelPlural: 'Workflow Runs',
|
labelPlural: 'Workflow Runs',
|
||||||
description: 'A workflow run',
|
description: 'A workflow run',
|
||||||
icon: 'IconHistoryToggle',
|
icon: 'IconHistoryToggle',
|
||||||
isSearchable: true,
|
isSystem: true,
|
||||||
|
isAuditLogged: false,
|
||||||
|
isUIReadOnly: true,
|
||||||
labelIdentifierFieldMetadataName: 'name',
|
labelIdentifierFieldMetadataName: 'name',
|
||||||
},
|
},
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -802,7 +807,8 @@ export const STANDARD_FLAT_OBJECT_METADATA_BUILDERS_BY_OBJECT_NAME = {
|
|||||||
labelPlural: 'Workflow Versions',
|
labelPlural: 'Workflow Versions',
|
||||||
description: 'A workflow version',
|
description: 'A workflow version',
|
||||||
icon: 'IconVersions',
|
icon: 'IconVersions',
|
||||||
isSearchable: true,
|
isSystem: true,
|
||||||
|
isUIReadOnly: true,
|
||||||
labelIdentifierFieldMetadataName: 'name',
|
labelIdentifierFieldMetadataName: 'name',
|
||||||
},
|
},
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -833,6 +839,7 @@ export const STANDARD_FLAT_OBJECT_METADATA_BUILDERS_BY_OBJECT_NAME = {
|
|||||||
description: 'A workspace member',
|
description: 'A workspace member',
|
||||||
icon: 'IconUserCircle',
|
icon: 'IconUserCircle',
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
|
isSearchable: true,
|
||||||
labelIdentifierFieldMetadataName: 'name',
|
labelIdentifierFieldMetadataName: 'name',
|
||||||
},
|
},
|
||||||
workspaceId,
|
workspaceId,
|
||||||
|
|||||||
+4
-2
@@ -16,6 +16,7 @@ export type CreateStandardObjectContext<O extends AllStandardObjectName> = {
|
|||||||
isAuditLogged?: boolean;
|
isAuditLogged?: boolean;
|
||||||
isUIReadOnly?: boolean;
|
isUIReadOnly?: boolean;
|
||||||
shortcut?: string | null;
|
shortcut?: string | null;
|
||||||
|
duplicateCriteria?: string[][] | null;
|
||||||
labelIdentifierFieldMetadataName: AllStandardObjectFieldName<O>;
|
labelIdentifierFieldMetadataName: AllStandardObjectFieldName<O>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -42,6 +43,7 @@ export const createStandardObjectFlatMetadata = <
|
|||||||
isAuditLogged = true,
|
isAuditLogged = true,
|
||||||
isUIReadOnly = false,
|
isUIReadOnly = false,
|
||||||
shortcut = null,
|
shortcut = null,
|
||||||
|
duplicateCriteria = null,
|
||||||
labelIdentifierFieldMetadataName,
|
labelIdentifierFieldMetadataName,
|
||||||
},
|
},
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@@ -50,7 +52,7 @@ export const createStandardObjectFlatMetadata = <
|
|||||||
now,
|
now,
|
||||||
}: CreateStandardObjectArgs<O>): FlatObjectMetadata => ({
|
}: CreateStandardObjectArgs<O>): FlatObjectMetadata => ({
|
||||||
universalIdentifier,
|
universalIdentifier,
|
||||||
standardId: null,
|
standardId: universalIdentifier,
|
||||||
applicationId: twentyStandardApplicationId,
|
applicationId: twentyStandardApplicationId,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
nameSingular,
|
nameSingular,
|
||||||
@@ -68,7 +70,7 @@ export const createStandardObjectFlatMetadata = <
|
|||||||
isUIReadOnly,
|
isUIReadOnly,
|
||||||
isLabelSyncedWithName: false,
|
isLabelSyncedWithName: false,
|
||||||
standardOverrides: null,
|
standardOverrides: null,
|
||||||
duplicateCriteria: null,
|
duplicateCriteria,
|
||||||
shortcut,
|
shortcut,
|
||||||
labelIdentifierFieldMetadataId:
|
labelIdentifierFieldMetadataId:
|
||||||
standardObjectMetadataRelatedEntityIds[nameSingular].fields[
|
standardObjectMetadataRelatedEntityIds[nameSingular].fields[
|
||||||
|
|||||||
+1
-1
@@ -54,7 +54,7 @@ export const createStandardRoleFlatMetadata = ({
|
|||||||
return {
|
return {
|
||||||
id: v4(),
|
id: v4(),
|
||||||
universalIdentifier,
|
universalIdentifier,
|
||||||
standardId: null,
|
standardId: universalIdentifier,
|
||||||
label,
|
label,
|
||||||
description,
|
description,
|
||||||
icon,
|
icon,
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ export const computeStandardCalendarEventViewFields = (
|
|||||||
fieldName: 'title',
|
fieldName: 'title',
|
||||||
position: 0,
|
position: 0,
|
||||||
isVisible: true,
|
isVisible: true,
|
||||||
size: 150,
|
size: 180,
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
allCalendarEventsStartsAt: createStandardViewFieldFlatMetadata({
|
allCalendarEventsStartsAt: createStandardViewFieldFlatMetadata({
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ export const computeStandardCompanyViewFields = (
|
|||||||
fieldName: 'name',
|
fieldName: 'name',
|
||||||
position: 0,
|
position: 0,
|
||||||
isVisible: true,
|
isVisible: true,
|
||||||
size: 150,
|
size: 180,
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
allCompaniesDomainName: createStandardViewFieldFlatMetadata({
|
allCompaniesDomainName: createStandardViewFieldFlatMetadata({
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ export const computeStandardDashboardViewFields = (
|
|||||||
fieldName: 'title',
|
fieldName: 'title',
|
||||||
position: 0,
|
position: 0,
|
||||||
isVisible: true,
|
isVisible: true,
|
||||||
size: 210,
|
size: 200,
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
allDashboardsCreatedBy: createStandardViewFieldFlatMetadata({
|
allDashboardsCreatedBy: createStandardViewFieldFlatMetadata({
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ export const computeStandardMessageThreadViewFields = (
|
|||||||
fieldName: 'messages',
|
fieldName: 'messages',
|
||||||
position: 0,
|
position: 0,
|
||||||
isVisible: true,
|
isVisible: true,
|
||||||
size: 150,
|
size: 180,
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
allMessageThreadsCreatedAt: createStandardViewFieldFlatMetadata({
|
allMessageThreadsCreatedAt: createStandardViewFieldFlatMetadata({
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ export const computeStandardMessageViewFields = (
|
|||||||
fieldName: 'subject',
|
fieldName: 'subject',
|
||||||
position: 0,
|
position: 0,
|
||||||
isVisible: true,
|
isVisible: true,
|
||||||
size: 150,
|
size: 180,
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
allMessagesMessageThread: createStandardViewFieldFlatMetadata({
|
allMessagesMessageThread: createStandardViewFieldFlatMetadata({
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ export const computeStandardWorkflowRunViewFields = (
|
|||||||
fieldName: 'name',
|
fieldName: 'name',
|
||||||
position: 0,
|
position: 0,
|
||||||
isVisible: true,
|
isVisible: true,
|
||||||
size: 210,
|
size: 150,
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
allWorkflowRunsWorkflow: createStandardViewFieldFlatMetadata({
|
allWorkflowRunsWorkflow: createStandardViewFieldFlatMetadata({
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ export const computeStandardWorkflowViewFields = (
|
|||||||
fieldName: 'name',
|
fieldName: 'name',
|
||||||
position: 0,
|
position: 0,
|
||||||
isVisible: true,
|
isVisible: true,
|
||||||
size: 210,
|
size: 150,
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
allWorkflowsStatuses: createStandardViewFieldFlatMetadata({
|
allWorkflowsStatuses: createStandardViewFieldFlatMetadata({
|
||||||
|
|||||||
+36
-30
@@ -17,6 +17,7 @@ import { WORKSPACE_MIGRATION_ADDITIONAL_CACHE_DATA_MAPS_KEY } from 'src/engine/w
|
|||||||
import { WorkspaceMigrationBuildOrchestratorService } from 'src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-build-orchestrator.service';
|
import { WorkspaceMigrationBuildOrchestratorService } from 'src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-build-orchestrator.service';
|
||||||
import { WorkspaceMigrationBuilderAdditionalCacheDataMaps } from 'src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-builder-additional-cache-data-maps.type';
|
import { WorkspaceMigrationBuilderAdditionalCacheDataMaps } from 'src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-builder-additional-cache-data-maps.type';
|
||||||
import {
|
import {
|
||||||
|
FromToAllFlatEntityMaps,
|
||||||
WorkspaceMigrationOrchestratorBuildArgs,
|
WorkspaceMigrationOrchestratorBuildArgs,
|
||||||
WorkspaceMigrationOrchestratorFailedResult,
|
WorkspaceMigrationOrchestratorFailedResult,
|
||||||
} from 'src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-orchestrator.type';
|
} from 'src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-orchestrator.type';
|
||||||
@@ -116,7 +117,7 @@ export class WorkspaceMigrationValidateBuildAndRunService {
|
|||||||
allFlatEntityOperationByMetadataName,
|
allFlatEntityOperationByMetadataName,
|
||||||
workspaceId,
|
workspaceId,
|
||||||
}: ValidateBuildAndRunWorkspaceMigrationFromMatriceArgs): Promise<{
|
}: ValidateBuildAndRunWorkspaceMigrationFromMatriceArgs): Promise<{
|
||||||
fromToAllFlatEntityMaps: WorkspaceMigrationOrchestratorBuildArgs['fromToAllFlatEntityMaps'];
|
fromToAllFlatEntityMaps: FromToAllFlatEntityMaps;
|
||||||
inferDeletionFromMissingEntities: InferDeletionFromMissingEntities;
|
inferDeletionFromMissingEntities: InferDeletionFromMissingEntities;
|
||||||
dependencyAllFlatEntityMaps: Partial<AllFlatEntityMaps>;
|
dependencyAllFlatEntityMaps: Partial<AllFlatEntityMaps>;
|
||||||
additionalCacheDataMaps: WorkspaceMigrationBuilderAdditionalCacheDataMaps;
|
additionalCacheDataMaps: WorkspaceMigrationBuilderAdditionalCacheDataMaps;
|
||||||
@@ -130,8 +131,7 @@ export class WorkspaceMigrationValidateBuildAndRunService {
|
|||||||
workspaceId,
|
workspaceId,
|
||||||
});
|
});
|
||||||
|
|
||||||
const fromToAllFlatEntityMaps: WorkspaceMigrationOrchestratorBuildArgs['fromToAllFlatEntityMaps'] =
|
const fromToAllFlatEntityMaps: FromToAllFlatEntityMaps = {};
|
||||||
{};
|
|
||||||
const inferDeletionFromMissingEntities: InferDeletionFromMissingEntities =
|
const inferDeletionFromMissingEntities: InferDeletionFromMissingEntities =
|
||||||
{};
|
{};
|
||||||
const allMetadataNameToCompare = Object.keys(
|
const allMetadataNameToCompare = Object.keys(
|
||||||
@@ -171,35 +171,12 @@ export class WorkspaceMigrationValidateBuildAndRunService {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public async validateBuildAndRunWorkspaceMigration({
|
public async validateBuildAndRunWorkspaceMigrationFromTo(
|
||||||
allFlatEntityOperationByMetadataName: allFlatEntities,
|
args: WorkspaceMigrationOrchestratorBuildArgs,
|
||||||
workspaceId,
|
) {
|
||||||
isSystemBuild = false,
|
|
||||||
}: ValidateBuildAndRunWorkspaceMigrationFromMatriceArgs): Promise<
|
|
||||||
WorkspaceMigrationOrchestratorFailedResult | undefined
|
|
||||||
> {
|
|
||||||
const {
|
|
||||||
fromToAllFlatEntityMaps,
|
|
||||||
inferDeletionFromMissingEntities,
|
|
||||||
dependencyAllFlatEntityMaps,
|
|
||||||
additionalCacheDataMaps,
|
|
||||||
} = await this.computeFromToAllFlatEntityMapsAndBuildOptions({
|
|
||||||
allFlatEntityOperationByMetadataName: allFlatEntities,
|
|
||||||
workspaceId,
|
|
||||||
});
|
|
||||||
|
|
||||||
const validateAndBuildResult =
|
const validateAndBuildResult =
|
||||||
await this.workspaceMigrationBuildOrchestratorService
|
await this.workspaceMigrationBuildOrchestratorService
|
||||||
.buildWorkspaceMigration({
|
.buildWorkspaceMigration(args)
|
||||||
buildOptions: {
|
|
||||||
isSystemBuild,
|
|
||||||
inferDeletionFromMissingEntities,
|
|
||||||
},
|
|
||||||
fromToAllFlatEntityMaps,
|
|
||||||
workspaceId,
|
|
||||||
dependencyAllFlatEntityMaps,
|
|
||||||
additionalCacheDataMaps,
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
this.logger.error(error);
|
this.logger.error(error);
|
||||||
throw new WorkspaceMigrationV2Exception(
|
throw new WorkspaceMigrationV2Exception(
|
||||||
@@ -229,4 +206,33 @@ export class WorkspaceMigrationValidateBuildAndRunService {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async validateBuildAndRunWorkspaceMigration({
|
||||||
|
allFlatEntityOperationByMetadataName: allFlatEntities,
|
||||||
|
workspaceId,
|
||||||
|
isSystemBuild = false,
|
||||||
|
}: ValidateBuildAndRunWorkspaceMigrationFromMatriceArgs): Promise<
|
||||||
|
WorkspaceMigrationOrchestratorFailedResult | undefined
|
||||||
|
> {
|
||||||
|
const {
|
||||||
|
fromToAllFlatEntityMaps,
|
||||||
|
inferDeletionFromMissingEntities,
|
||||||
|
dependencyAllFlatEntityMaps,
|
||||||
|
additionalCacheDataMaps,
|
||||||
|
} = await this.computeFromToAllFlatEntityMapsAndBuildOptions({
|
||||||
|
allFlatEntityOperationByMetadataName: allFlatEntities,
|
||||||
|
workspaceId,
|
||||||
|
});
|
||||||
|
|
||||||
|
return await this.validateBuildAndRunWorkspaceMigrationFromTo({
|
||||||
|
buildOptions: {
|
||||||
|
isSystemBuild,
|
||||||
|
inferDeletionFromMissingEntities,
|
||||||
|
},
|
||||||
|
fromToAllFlatEntityMaps,
|
||||||
|
workspaceId,
|
||||||
|
dependencyAllFlatEntityMaps,
|
||||||
|
additionalCacheDataMaps,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-3
@@ -9,12 +9,14 @@ import { type FailedFlatEntityValidation } from 'src/engine/workspace-manager/wo
|
|||||||
import { type WorkspaceMigrationBuilderOptions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-builder-options.type';
|
import { type WorkspaceMigrationBuilderOptions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-builder-options.type';
|
||||||
import { type WorkspaceMigrationV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2';
|
import { type WorkspaceMigrationV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2';
|
||||||
|
|
||||||
|
export type FromToAllFlatEntityMaps = {
|
||||||
|
[P in keyof AllFlatEntityMaps]?: FromTo<AllFlatEntityMaps[P]>;
|
||||||
|
};
|
||||||
|
|
||||||
export type WorkspaceMigrationOrchestratorBuildArgs = {
|
export type WorkspaceMigrationOrchestratorBuildArgs = {
|
||||||
workspaceId: string;
|
workspaceId: string;
|
||||||
buildOptions: WorkspaceMigrationBuilderOptions;
|
buildOptions: WorkspaceMigrationBuilderOptions;
|
||||||
fromToAllFlatEntityMaps: {
|
fromToAllFlatEntityMaps: FromToAllFlatEntityMaps;
|
||||||
[P in keyof AllFlatEntityMaps]?: FromTo<AllFlatEntityMaps[P]>;
|
|
||||||
};
|
|
||||||
dependencyAllFlatEntityMaps?: Partial<AllFlatEntityMaps>;
|
dependencyAllFlatEntityMaps?: Partial<AllFlatEntityMaps>;
|
||||||
additionalCacheDataMaps: WorkspaceMigrationBuilderAdditionalCacheDataMaps;
|
additionalCacheDataMaps: WorkspaceMigrationBuilderAdditionalCacheDataMaps;
|
||||||
};
|
};
|
||||||
|
|||||||
+3
-2
@@ -14,6 +14,7 @@ import { CustomWorkspaceEntity } from 'src/engine/twenty-orm/custom.workspace-en
|
|||||||
import { WorkspaceDynamicRelation } from 'src/engine/twenty-orm/decorators/workspace-dynamic-relation.decorator';
|
import { WorkspaceDynamicRelation } from 'src/engine/twenty-orm/decorators/workspace-dynamic-relation.decorator';
|
||||||
import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator';
|
import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator';
|
||||||
import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator';
|
import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator';
|
||||||
|
import { WorkspaceIsDeprecated } from 'src/engine/twenty-orm/decorators/workspace-is-deprecated.decorator';
|
||||||
import { WorkspaceIsFieldUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.decorator';
|
import { WorkspaceIsFieldUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.decorator';
|
||||||
import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator';
|
import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator';
|
||||||
import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator';
|
import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator';
|
||||||
@@ -62,7 +63,6 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
|
|||||||
@WorkspaceIsNullable()
|
@WorkspaceIsNullable()
|
||||||
fullPath: string | null;
|
fullPath: string | null;
|
||||||
|
|
||||||
// Deprecated: Use fileCategory instead
|
|
||||||
@WorkspaceField({
|
@WorkspaceField({
|
||||||
standardId: ATTACHMENT_STANDARD_FIELD_IDS.type,
|
standardId: ATTACHMENT_STANDARD_FIELD_IDS.type,
|
||||||
type: FieldMetadataType.TEXT,
|
type: FieldMetadataType.TEXT,
|
||||||
@@ -71,6 +71,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
|
|||||||
icon: 'IconList',
|
icon: 'IconList',
|
||||||
})
|
})
|
||||||
@WorkspaceIsNullable()
|
@WorkspaceIsNullable()
|
||||||
|
@WorkspaceIsDeprecated()
|
||||||
type: string | null;
|
type: string | null;
|
||||||
|
|
||||||
@WorkspaceField({
|
@WorkspaceField({
|
||||||
@@ -143,7 +144,6 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
|
|||||||
@WorkspaceIsFieldUIReadOnly()
|
@WorkspaceIsFieldUIReadOnly()
|
||||||
createdBy: ActorMetadata;
|
createdBy: ActorMetadata;
|
||||||
|
|
||||||
// Deprecated: Use createdBy composite field instead
|
|
||||||
@WorkspaceRelation({
|
@WorkspaceRelation({
|
||||||
standardId: ATTACHMENT_STANDARD_FIELD_IDS.author,
|
standardId: ATTACHMENT_STANDARD_FIELD_IDS.author,
|
||||||
type: RelationType.MANY_TO_ONE,
|
type: RelationType.MANY_TO_ONE,
|
||||||
@@ -155,6 +155,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
|
|||||||
onDelete: RelationOnDeleteAction.SET_NULL,
|
onDelete: RelationOnDeleteAction.SET_NULL,
|
||||||
})
|
})
|
||||||
@WorkspaceIsNullable()
|
@WorkspaceIsNullable()
|
||||||
|
@WorkspaceIsDeprecated()
|
||||||
author: Relation<WorkspaceMemberWorkspaceEntity> | null;
|
author: Relation<WorkspaceMemberWorkspaceEntity> | null;
|
||||||
|
|
||||||
@WorkspaceJoinColumn('author')
|
@WorkspaceJoinColumn('author')
|
||||||
|
|||||||
-3
@@ -12,12 +12,10 @@ describe('attachmentsResolver (e2e)', () => {
|
|||||||
node {
|
node {
|
||||||
name
|
name
|
||||||
fullPath
|
fullPath
|
||||||
type
|
|
||||||
id
|
id
|
||||||
createdAt
|
createdAt
|
||||||
updatedAt
|
updatedAt
|
||||||
deletedAt
|
deletedAt
|
||||||
authorId
|
|
||||||
taskId
|
taskId
|
||||||
noteId
|
noteId
|
||||||
personId
|
personId
|
||||||
@@ -54,7 +52,6 @@ describe('attachmentsResolver (e2e)', () => {
|
|||||||
|
|
||||||
expect(attachments).toHaveProperty('name');
|
expect(attachments).toHaveProperty('name');
|
||||||
expect(attachments).toHaveProperty('fullPath');
|
expect(attachments).toHaveProperty('fullPath');
|
||||||
expect(attachments).toHaveProperty('type');
|
|
||||||
expect(attachments).toHaveProperty('id');
|
expect(attachments).toHaveProperty('id');
|
||||||
expect(attachments).toHaveProperty('createdAt');
|
expect(attachments).toHaveProperty('createdAt');
|
||||||
expect(attachments).toHaveProperty('updatedAt');
|
expect(attachments).toHaveProperty('updatedAt');
|
||||||
|
|||||||
+7
-5
@@ -17,7 +17,7 @@ import { createManyOperationFactory } from 'test/integration/graphql/utils/creat
|
|||||||
import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util';
|
import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util';
|
||||||
import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util';
|
import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util';
|
||||||
import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util';
|
import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util';
|
||||||
import { performCreateManyOperation } from 'test/integration/graphql/utils/perform-create-many-operation.utils';
|
import { createManyOperation } from 'test/integration/graphql/utils/create-many-operation.util';
|
||||||
import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util';
|
import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util';
|
||||||
import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util';
|
import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util';
|
||||||
import { type ObjectRecord } from 'twenty-shared/types';
|
import { type ObjectRecord } from 'twenty-shared/types';
|
||||||
@@ -67,10 +67,12 @@ describe('relation connect in workspace createOne/createMany resolvers (e2e)',
|
|||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
await performCreateManyOperation('company', 'companies', `id`, [
|
await createManyOperation({
|
||||||
company1,
|
objectMetadataSingularName: 'company',
|
||||||
company2,
|
objectMetadataPluralName: 'companies',
|
||||||
]);
|
gqlFields: 'id',
|
||||||
|
data: [company1, company2],
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
+21
-25
@@ -20,7 +20,7 @@ import {
|
|||||||
TEST_PET_ID_3,
|
TEST_PET_ID_3,
|
||||||
TEST_PET_ID_4,
|
TEST_PET_ID_4,
|
||||||
} from 'test/integration/constants/test-pet-ids.constants';
|
} from 'test/integration/constants/test-pet-ids.constants';
|
||||||
import { performCreateManyOperation } from 'test/integration/graphql/utils/perform-create-many-operation.utils';
|
import { createManyOperation } from 'test/integration/graphql/utils/create-many-operation.util';
|
||||||
import { search } from 'test/integration/graphql/utils/search.util';
|
import { search } from 'test/integration/graphql/utils/search.util';
|
||||||
import { deleteAllRecords } from 'test/integration/utils/delete-all-records';
|
import { deleteAllRecords } from 'test/integration/utils/delete-all-records';
|
||||||
import {
|
import {
|
||||||
@@ -113,6 +113,7 @@ describe('SearchResolver', () => {
|
|||||||
const [searchInput1Pet, searchInput2Pet, cafePet, naivePet] = pets;
|
const [searchInput1Pet, searchInput2Pet, cafePet, naivePet] = pets;
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
|
// TODO refactor not a good practice, or should at least restore afterwards
|
||||||
await deleteAllRecords('person');
|
await deleteAllRecords('person');
|
||||||
await deleteAllRecords('company');
|
await deleteAllRecords('company');
|
||||||
await deleteAllRecords('opportunity');
|
await deleteAllRecords('opportunity');
|
||||||
@@ -124,33 +125,28 @@ describe('SearchResolver', () => {
|
|||||||
await deleteAllRecords('_pet');
|
await deleteAllRecords('_pet');
|
||||||
await deleteAllRecords('_surveyResult');
|
await deleteAllRecords('_surveyResult');
|
||||||
await deleteAllRecords('_rocket');
|
await deleteAllRecords('_rocket');
|
||||||
|
///
|
||||||
|
|
||||||
try {
|
await createManyOperation({
|
||||||
await performCreateManyOperation(
|
objectMetadataSingularName: 'pet',
|
||||||
'pet',
|
objectMetadataPluralName: 'pets',
|
||||||
'pets',
|
gqlFields: OBJECT_MODEL_COMMON_FIELDS,
|
||||||
OBJECT_MODEL_COMMON_FIELDS,
|
data: pets,
|
||||||
pets,
|
});
|
||||||
);
|
|
||||||
|
|
||||||
await performCreateManyOperation(
|
await createManyOperation({
|
||||||
'person',
|
objectMetadataSingularName: 'person',
|
||||||
'people',
|
objectMetadataPluralName: 'people',
|
||||||
PERSON_GQL_FIELDS,
|
gqlFields: PERSON_GQL_FIELDS,
|
||||||
persons,
|
data: persons,
|
||||||
);
|
});
|
||||||
|
|
||||||
await performCreateManyOperation(
|
await createManyOperation({
|
||||||
'company',
|
objectMetadataSingularName: 'company',
|
||||||
'companies',
|
objectMetadataPluralName: 'companies',
|
||||||
COMPANY_GQL_FIELDS,
|
gqlFields: COMPANY_GQL_FIELDS,
|
||||||
companies,
|
data: companies,
|
||||||
);
|
});
|
||||||
} catch (error) {
|
|
||||||
// eslint-disable-next-line no-console
|
|
||||||
console.log(error);
|
|
||||||
throw new Error('beforeAll failed');
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const testsUseCases: EachTestingContext<{
|
const testsUseCases: EachTestingContext<{
|
||||||
|
|||||||
+2
-1
@@ -28,6 +28,7 @@ describe('Granular settings permissions', () => {
|
|||||||
originalMemberRoleId = memberRole.id;
|
originalMemberRoleId = memberRole.id;
|
||||||
|
|
||||||
// Create a custom role with canUpdateAllSettings = false
|
// Create a custom role with canUpdateAllSettings = false
|
||||||
|
// canUpdateAllObjectRecords must be true to allow creating records like workflows
|
||||||
const createRoleQuery = {
|
const createRoleQuery = {
|
||||||
query: `
|
query: `
|
||||||
mutation CreateOneRole {
|
mutation CreateOneRole {
|
||||||
@@ -36,7 +37,7 @@ describe('Granular settings permissions', () => {
|
|||||||
description: "Role for testing specific setting permissions"
|
description: "Role for testing specific setting permissions"
|
||||||
canUpdateAllSettings: false
|
canUpdateAllSettings: false
|
||||||
canReadAllObjectRecords: true
|
canReadAllObjectRecords: true
|
||||||
canUpdateAllObjectRecords: false
|
canUpdateAllObjectRecords: true
|
||||||
canSoftDeleteAllObjectRecords: false
|
canSoftDeleteAllObjectRecords: false
|
||||||
canDestroyAllObjectRecords: false
|
canDestroyAllObjectRecords: false
|
||||||
}) {
|
}) {
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util';
|
||||||
|
import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util';
|
||||||
|
import { type CommonResponseBody } from 'test/integration/metadata/types/common-response-body.type';
|
||||||
|
import { warnIfErrorButNotExpectedToFail } from 'test/integration/metadata/utils/warn-if-error-but-not-expected-to-fail.util';
|
||||||
|
import { warnIfNoErrorButExpectedToFail } from 'test/integration/metadata/utils/warn-if-no-error-but-expected-to-fail.util';
|
||||||
|
import { type ObjectRecord } from 'twenty-shared/types';
|
||||||
|
import { capitalize } from 'twenty-shared/utils';
|
||||||
|
import { v4 } from 'uuid';
|
||||||
|
|
||||||
|
type CreateManyOperationInput = {
|
||||||
|
objectMetadataSingularName: string;
|
||||||
|
objectMetadataPluralName: string;
|
||||||
|
gqlFields?: string;
|
||||||
|
data: object[];
|
||||||
|
upsert?: boolean;
|
||||||
|
expectToFail?: boolean;
|
||||||
|
token?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const createManyOperation = async ({
|
||||||
|
objectMetadataSingularName,
|
||||||
|
objectMetadataPluralName,
|
||||||
|
gqlFields = 'id',
|
||||||
|
data,
|
||||||
|
upsert = false,
|
||||||
|
expectToFail = false,
|
||||||
|
token,
|
||||||
|
}: CreateManyOperationInput): CommonResponseBody<{
|
||||||
|
createdRecords: ObjectRecord[];
|
||||||
|
}> => {
|
||||||
|
const graphqlOperation = createManyOperationFactory({
|
||||||
|
objectMetadataSingularName,
|
||||||
|
objectMetadataPluralName,
|
||||||
|
gqlFields,
|
||||||
|
data: data.map((item) => ({
|
||||||
|
id: v4(),
|
||||||
|
...item,
|
||||||
|
})),
|
||||||
|
upsert,
|
||||||
|
});
|
||||||
|
|
||||||
|
const response = await makeGraphqlAPIRequest(graphqlOperation, token);
|
||||||
|
|
||||||
|
if (expectToFail === true) {
|
||||||
|
warnIfNoErrorButExpectedToFail({
|
||||||
|
response,
|
||||||
|
errorMessage: 'Create many operation should have failed but did not',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (expectToFail === false) {
|
||||||
|
warnIfErrorButNotExpectedToFail({
|
||||||
|
response,
|
||||||
|
errorMessage: 'Create many operation failed but should not have',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
data: {
|
||||||
|
createdRecords:
|
||||||
|
response.body.data?.[`create${capitalize(objectMetadataPluralName)}`] ??
|
||||||
|
[],
|
||||||
|
},
|
||||||
|
errors: response.body.errors,
|
||||||
|
};
|
||||||
|
};
|
||||||
-25
@@ -1,25 +0,0 @@
|
|||||||
import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util';
|
|
||||||
import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util';
|
|
||||||
import { capitalize } from 'twenty-shared/utils';
|
|
||||||
import { v4 } from 'uuid';
|
|
||||||
|
|
||||||
export const performCreateManyOperation = async (
|
|
||||||
objectMetadataSingularName: string,
|
|
||||||
objectMetadataPluralName: string,
|
|
||||||
gqlFields: string,
|
|
||||||
data: object[],
|
|
||||||
) => {
|
|
||||||
const response = await makeGraphqlAPIRequest(
|
|
||||||
createManyOperationFactory({
|
|
||||||
objectMetadataSingularName,
|
|
||||||
objectMetadataPluralName,
|
|
||||||
gqlFields,
|
|
||||||
data: data.map((item) => ({
|
|
||||||
id: v4(),
|
|
||||||
...item,
|
|
||||||
})),
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
|
|
||||||
return response.body.data[`create${capitalize(objectMetadataPluralName)}`];
|
|
||||||
};
|
|
||||||
+27
-30
@@ -190,25 +190,23 @@ describe('Standard field metadata update should succeed', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it.failing(
|
it('Should deactivate and reactivate standard field successfully', async () => {
|
||||||
'Should deactivate and reactivate standard field successfully',
|
const deletedAtField = opportunityObjectFields.find(
|
||||||
async () => {
|
(field) => field.name === 'deletedAt',
|
||||||
const deletedAtField = opportunityObjectFields.find(
|
);
|
||||||
(field) => field.name === 'deletedAt',
|
|
||||||
);
|
|
||||||
|
|
||||||
jestExpectToBeDefined(deletedAtField);
|
jestExpectToBeDefined(deletedAtField);
|
||||||
expect(deletedAtField.isActive).toBe(true);
|
expect(deletedAtField.isActive).toBe(true);
|
||||||
|
|
||||||
const { data: firstUpdateData } = await updateOneFieldMetadata({
|
const { data: firstUpdateData } = await updateOneFieldMetadata({
|
||||||
input: {
|
input: {
|
||||||
idToUpdate: deletedAtField.id,
|
idToUpdate: deletedAtField.id,
|
||||||
updatePayload: {
|
updatePayload: {
|
||||||
isActive: false,
|
isActive: false,
|
||||||
},
|
|
||||||
},
|
},
|
||||||
expectToFail: false,
|
},
|
||||||
gqlFields: `
|
expectToFail: false,
|
||||||
|
gqlFields: `
|
||||||
id
|
id
|
||||||
name
|
name
|
||||||
label
|
label
|
||||||
@@ -224,19 +222,19 @@ describe('Standard field metadata update should succeed', () => {
|
|||||||
icon
|
icon
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(firstUpdateData.updateOneField.isActive).toBe(false);
|
expect(firstUpdateData.updateOneField.isActive).toBe(false);
|
||||||
|
|
||||||
const { data: secondUpdateData } = await updateOneFieldMetadata({
|
const { data: secondUpdateData } = await updateOneFieldMetadata({
|
||||||
input: {
|
input: {
|
||||||
idToUpdate: deletedAtField.id,
|
idToUpdate: deletedAtField.id,
|
||||||
updatePayload: {
|
updatePayload: {
|
||||||
isActive: true,
|
isActive: true,
|
||||||
},
|
|
||||||
},
|
},
|
||||||
expectToFail: false,
|
},
|
||||||
gqlFields: `
|
expectToFail: false,
|
||||||
|
gqlFields: `
|
||||||
id
|
id
|
||||||
name
|
name
|
||||||
label
|
label
|
||||||
@@ -252,11 +250,10 @@ describe('Standard field metadata update should succeed', () => {
|
|||||||
icon
|
icon
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(secondUpdateData.updateOneField.isActive).toBe(true);
|
expect(secondUpdateData.updateOneField.isActive).toBe(true);
|
||||||
},
|
});
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Standard field isUnique update should succeed', () => {
|
describe('Standard field isUnique update should succeed', () => {
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
const TEST_SCHEMA_NAME = 'workspace_1wgvd1injqtife6y4rvfbu3h5';
|
const TEST_SCHEMA_NAME = 'workspace_1wgvd1injqtife6y4rvfbu3h5';
|
||||||
|
|
||||||
export const deleteAllRecords = async (objectNameSingular: string) => {
|
export const deleteAllRecords = async (objectNameSingular: string) => {
|
||||||
try {
|
await global.testDataSource.query(
|
||||||
await global.testDataSource.query(
|
`DELETE from "${TEST_SCHEMA_NAME}"."${objectNameSingular}"`,
|
||||||
`DELETE from "${TEST_SCHEMA_NAME}"."${objectNameSingular}"`,
|
);
|
||||||
);
|
|
||||||
} catch {
|
|
||||||
/* empty */
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user