feat: twenty orm sync (#5266)

This PR is updating all object metadata entities with the new
decorators, and deleting the old ones.
This way we can use the new TwentyORM with all the standard objects.

---------

Co-authored-by: Weiko <corentin@twenty.com>
This commit is contained in:
Jérémy M
2024-05-15 16:58:47 +02:00
committed by GitHub
parent 6898c1e4d8
commit f0383e3147
81 changed files with 1721 additions and 2060 deletions

View File

@ -1,3 +0,0 @@
export interface GateDecoratorParams {
featureFlag: string;
}

View File

@ -1,19 +1,31 @@
import { ReflectDynamicRelationFieldMetadata } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/reflect-computed-relation-field-metadata.interface';
import { ReflectFieldMetadata } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/reflect-field-metadata.interface';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { WorkspaceDynamicRelationMetadataArgsFactory } from 'src/engine/twenty-orm/interfaces/workspace-dynamic-relation-metadata-args.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
export type PartialFieldMetadata = Omit<
ReflectFieldMetadata[string],
'joinColumn'
FieldMetadataInterface,
'id' | 'label' | 'description' | 'objectMetadataId'
> & {
standardId: string;
label: string | ((objectMetadata: ObjectMetadataEntity) => string);
description?: string | ((objectMetadata: ObjectMetadataEntity) => string);
icon?: string;
isSystem?: boolean;
workspaceId: string;
objectMetadataId?: string;
};
export type PartialComputedFieldMetadata =
ReflectDynamicRelationFieldMetadata & {
workspaceId: string;
objectMetadataId?: string;
};
export type PartialComputedFieldMetadata = {
type: FieldMetadataType.RELATION;
argsFactory: WorkspaceDynamicRelationMetadataArgsFactory;
isNullable?: boolean;
isSystem?: boolean;
isCustom: boolean;
workspaceId: string;
objectMetadataId?: string;
};
export type ComputedPartialFieldMetadata = {
[K in keyof PartialFieldMetadata]: ExcludeFunctions<PartialFieldMetadata[K]>;

View File

@ -3,10 +3,14 @@ import {
PartialComputedFieldMetadata,
PartialFieldMetadata,
} from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-field-metadata.interface';
import { ReflectObjectMetadata } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/reflect-object-metadata.interface';
import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface';
export type PartialObjectMetadata = ReflectObjectMetadata & {
id?: string;
export type PartialObjectMetadata = Omit<
ObjectMetadataInterface,
'id' | 'standardId' | 'fromRelations' | 'toRelations' | 'fields' | 'isActive'
> & {
standardId: string;
icon?: string;
workspaceId: string;
dataSourceId: string;
fields: (PartialFieldMetadata | PartialComputedFieldMetadata)[];

View File

@ -1,10 +0,0 @@
import { ReflectRelationMetadata } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/reflect-relation-metadata.interface';
export type PartialRelationMetadata = ReflectRelationMetadata & {
id: string;
workspaceId: string;
fromObjectMetadataId: string;
toObjectMetadataId: string;
fromFieldMetadataId: string;
toFieldMetadataId: string;
};

View File

@ -1,24 +0,0 @@
import { GateDecoratorParams } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/gate-decorator.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
export type DynamicRelationFieldMetadataDecoratorParams = (
oppositeObjectMetadata: ObjectMetadataEntity,
) => {
standardId: string;
name: string;
label: string;
joinColumn: string;
description?: string;
icon?: string;
};
export interface ReflectDynamicRelationFieldMetadata {
type: FieldMetadataType.RELATION;
paramsFactory: DynamicRelationFieldMetadataDecoratorParams;
isNullable: boolean;
isSystem: boolean;
isCustom: boolean;
gate?: GateDecoratorParams;
}

View File

@ -1,10 +0,0 @@
import { GateDecoratorParams } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/gate-decorator.interface';
export type BaseCustomObjectMetadataDecoratorParams =
| { allowObjectNameList?: string[] }
| { denyObjectNameList?: string[] };
export type ReflectBaseCustomObjectMetadata =
BaseCustomObjectMetadataDecoratorParams & {
gate?: GateDecoratorParams;
};

View File

@ -1,38 +0,0 @@
import { FieldMetadataDefaultValue } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-default-value.interface';
import { GateDecoratorParams } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/gate-decorator.interface';
import { FieldMetadataOptions } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-options.interface';
import { FieldMetadataSettings } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
export interface FieldMetadataDecoratorParams<
T extends FieldMetadataType | 'default',
> {
standardId: string;
type: T;
label: string | ((objectMetadata: ObjectMetadataEntity) => string);
description?: string | ((objectMetadata: ObjectMetadataEntity) => string);
icon?: string;
defaultValue?: FieldMetadataDefaultValue<T>;
joinColumn?: string;
options?: FieldMetadataOptions<T>;
settings?: FieldMetadataSettings<T>;
}
export interface ReflectFieldMetadata {
[key: string]: Omit<
FieldMetadataDecoratorParams<'default'>,
'defaultValue' | 'type' | 'options' | 'settings'
> & {
name: string;
type: FieldMetadataType;
isNullable: boolean;
isSystem: boolean;
isCustom: boolean;
defaultValue: FieldMetadataDefaultValue<'default'> | null;
gate?: GateDecoratorParams;
options?: FieldMetadataOptions<'default'> | null;
settings?: FieldMetadataSettings<'default'> | null;
};
}

View File

@ -1,20 +0,0 @@
import { GateDecoratorParams } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/gate-decorator.interface';
export interface ObjectMetadataDecoratorParams {
standardId: string;
namePlural: string;
labelSingular: string;
labelPlural: string;
description?: string;
icon?: string;
}
export interface ReflectObjectMetadata extends ObjectMetadataDecoratorParams {
nameSingular: string;
targetTableName: string;
isSystem: boolean;
isCustom: boolean;
isRemote: boolean;
isAuditLogged: boolean;
gate?: GateDecoratorParams;
}

View File

@ -1,23 +0,0 @@
import { ObjectType } from 'typeorm';
import { GateDecoratorParams } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/gate-decorator.interface';
import {
RelationOnDeleteAction,
RelationMetadataType,
} from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
export interface RelationMetadataDecoratorParams<T> {
type: RelationMetadataType;
inverseSideTarget: () => ObjectType<T>;
inverseSideFieldKey?: keyof T;
onDelete: RelationOnDeleteAction;
}
export interface ReflectRelationMetadata
extends RelationMetadataDecoratorParams<any> {
target: object;
fieldKey: string;
gate?: GateDecoratorParams;
onDelete: RelationOnDeleteAction;
}