Rework relations (#3431)

* Rework relations

* Fix tests
This commit is contained in:
Charles Bochet
2024-01-15 12:07:23 +01:00
committed by GitHub
parent 8c96acc2a3
commit 16a24c5f0c
60 changed files with 392 additions and 463 deletions

View File

@ -71,6 +71,9 @@ export const currencyObjectDefinition = {
fields: currencyFields(),
fromRelations: [],
toRelations: [],
isActive: true,
isSystem: true,
isCustom: false,
} satisfies ObjectMetadataInterface;
export type CurrencyMetadata = {

View File

@ -71,6 +71,9 @@ export const fullNameObjectDefinition = {
fields: fullNameFields(),
fromRelations: [],
toRelations: [],
isActive: true,
isSystem: true,
isCustom: false,
} satisfies ObjectMetadataInterface;
export type FullNameMetadata = {

View File

@ -71,6 +71,9 @@ export const linkObjectDefinition = {
fields: linkFields(),
fromRelations: [],
toRelations: [],
isActive: true,
isSystem: true,
isCustom: false,
} satisfies ObjectMetadataInterface;
export type LinkMetadata = {

View File

@ -23,6 +23,7 @@ import { TypeORMService } from 'src/database/typeorm/typeorm.service';
import { DataSourceService } from 'src/metadata/data-source/data-source.service';
import { UpdateFieldInput } from 'src/metadata/field-metadata/dtos/update-field.input';
import { WorkspaceMigrationFactory } from 'src/metadata/workspace-migration/workspace-migration.factory';
import { computeObjectTargetTable } from 'src/workspace/utils/compute-object-target-table.util';
import { FieldMetadataEntity } from './field-metadata.entity';
@ -92,7 +93,7 @@ export class FieldMetadataService extends TypeOrmQueryService<FieldMetadataEntit
fieldMetadataInput.workspaceId,
[
{
name: objectMetadata.targetTableName,
name: computeObjectTargetTable(objectMetadata),
action: 'alter',
columns: this.workspaceMigrationFactory.createColumnActions(
WorkspaceMigrationColumnActionType.CREATE,
@ -201,7 +202,7 @@ export class FieldMetadataService extends TypeOrmQueryService<FieldMetadataEntit
existingFieldMetadata.workspaceId,
[
{
name: objectMetadata.targetTableName,
name: computeObjectTargetTable(objectMetadata),
action: 'alter',
columns: this.workspaceMigrationFactory.createColumnActions(
WorkspaceMigrationColumnActionType.ALTER,

View File

@ -12,4 +12,7 @@ export interface ObjectMetadataInterface {
fromRelations: RelationMetadataInterface[];
toRelations: RelationMetadataInterface[];
fields: FieldMetadataInterface[];
isSystem: boolean;
isCustom: boolean;
isActive: boolean;
}

View File

@ -21,7 +21,7 @@ import {
RelationMetadataEntity,
RelationMetadataType,
} from 'src/metadata/relation-metadata/relation-metadata.entity';
import { createCustomColumnName } from 'src/metadata/utils/create-custom-column-name.util';
import { computeObjectTargetTable } from 'src/workspace/utils/compute-object-target-table.util';
import { ObjectMetadataEntity } from './object-metadata.entity';
@ -67,7 +67,7 @@ export class ObjectMetadataService extends TypeOrmQueryService<ObjectMetadataEnt
const createdObjectMetadata = await super.createOne({
...objectMetadataInput,
dataSourceId: lastDataSourceMetadata.id,
targetTableName: createCustomColumnName(objectMetadataInput.nameSingular),
targetTableName: 'DEPRECATED',
isActive: true,
isCustom: true,
isSystem: false,
@ -156,62 +156,74 @@ export class ObjectMetadataService extends TypeOrmQueryService<ObjectMetadataEnt
createdObjectMetadata.workspaceId,
[
{
name: createdObjectMetadata.targetTableName,
name: computeObjectTargetTable(createdObjectMetadata),
action: 'create',
} satisfies WorkspaceMigrationTableAction,
// Add activity target relation
{
name: activityTargetObjectMetadata.targetTableName,
name: computeObjectTargetTable(activityTargetObjectMetadata),
action: 'alter',
columns: [
{
action: WorkspaceMigrationColumnActionType.CREATE,
columnName: `${createdObjectMetadata.targetTableName}Id`,
columnName: `${computeObjectTargetTable(
createdObjectMetadata,
)}Id`,
columnType: 'uuid',
isNullable: true,
} satisfies WorkspaceMigrationColumnCreate,
],
},
{
name: activityTargetObjectMetadata.targetTableName,
name: computeObjectTargetTable(activityTargetObjectMetadata),
action: 'alter',
columns: [
{
action: WorkspaceMigrationColumnActionType.RELATION,
columnName: `${createdObjectMetadata.targetTableName}Id`,
referencedTableName: createdObjectMetadata.targetTableName,
columnName: `${computeObjectTargetTable(
createdObjectMetadata,
)}Id`,
referencedTableName: computeObjectTargetTable(
createdObjectMetadata,
),
referencedTableColumnName: 'id',
},
],
},
// Add favorite relation
{
name: favoriteObjectMetadata.targetTableName,
name: computeObjectTargetTable(favoriteObjectMetadata),
action: 'alter',
columns: [
{
action: WorkspaceMigrationColumnActionType.CREATE,
columnName: `${createdObjectMetadata.targetTableName}Id`,
columnName: `${computeObjectTargetTable(
createdObjectMetadata,
)}Id`,
columnType: 'uuid',
isNullable: true,
} satisfies WorkspaceMigrationColumnCreate,
],
},
{
name: favoriteObjectMetadata.targetTableName,
name: computeObjectTargetTable(favoriteObjectMetadata),
action: 'alter',
columns: [
{
action: WorkspaceMigrationColumnActionType.RELATION,
columnName: `${createdObjectMetadata.targetTableName}Id`,
referencedTableName: createdObjectMetadata.targetTableName,
columnName: `${computeObjectTargetTable(
createdObjectMetadata,
)}Id`,
referencedTableName: computeObjectTargetTable(
createdObjectMetadata,
),
referencedTableColumnName: 'id',
},
],
},
// This is temporary until we implement mainIdentifier
{
name: createdObjectMetadata.targetTableName,
name: computeObjectTargetTable(createdObjectMetadata),
action: 'alter',
columns: [
{
@ -384,7 +396,7 @@ export class ObjectMetadataService extends TypeOrmQueryService<ObjectMetadataEnt
name: `${createdObjectMetadata.nameSingular}Id`,
label: `${createdObjectMetadata.labelSingular} ID (foreign key)`,
targetColumnMap: {
value: `${createdObjectMetadata.targetTableName}Id`,
value: `${computeObjectTargetTable(createdObjectMetadata)}Id`,
},
description: `ActivityTarget ${createdObjectMetadata.labelSingular} id foreign key`,
icon: undefined,
@ -474,7 +486,7 @@ export class ObjectMetadataService extends TypeOrmQueryService<ObjectMetadataEnt
name: `${createdObjectMetadata.nameSingular}Id`,
label: `${createdObjectMetadata.labelSingular} ID (foreign key)`,
targetColumnMap: {
value: `${createdObjectMetadata.targetTableName}Id`,
value: `${computeObjectTargetTable(createdObjectMetadata)}Id`,
},
description: `Favorite ${createdObjectMetadata.labelSingular} id foreign key`,
icon: undefined,

View File

@ -18,6 +18,7 @@ import { FieldMetadataType } from 'src/metadata/field-metadata/field-metadata.en
import { WorkspaceMigrationColumnActionType } from 'src/metadata/workspace-migration/workspace-migration.entity';
import { ObjectMetadataEntity } from 'src/metadata/object-metadata/object-metadata.entity';
import { createCustomColumnName } from 'src/metadata/utils/create-custom-column-name.util';
import { computeObjectTargetTable } from 'src/workspace/utils/compute-object-target-table.util';
import {
RelationMetadataEntity,
@ -201,8 +202,9 @@ export class RelationMetadataService extends TypeOrmQueryService<RelationMetadat
[
// Create the column
{
name: objectMetadataMap[relationMetadataInput.toObjectMetadataId]
.targetTableName,
name: computeObjectTargetTable(
objectMetadataMap[relationMetadataInput.toObjectMetadataId],
),
action: 'alter',
columns: [
{
@ -215,16 +217,17 @@ export class RelationMetadataService extends TypeOrmQueryService<RelationMetadat
},
// Create the foreignKey
{
name: objectMetadataMap[relationMetadataInput.toObjectMetadataId]
.targetTableName,
name: computeObjectTargetTable(
objectMetadataMap[relationMetadataInput.toObjectMetadataId],
),
action: 'alter',
columns: [
{
action: WorkspaceMigrationColumnActionType.RELATION,
columnName: foreignKeyColumnName,
referencedTableName:
objectMetadataMap[relationMetadataInput.fromObjectMetadataId]
.targetTableName,
referencedTableName: computeObjectTargetTable(
objectMetadataMap[relationMetadataInput.fromObjectMetadataId],
),
referencedTableColumnName: 'id',
isUnique:
relationMetadataInput.relationType ===