[WHEN_RELEASED_REQUIRES_CACHE_FLUSH] Object related record logic in v2 (#14937)
# Introduction
Initial motivation here was to migrate the object related records logic
from v1 to v2, please note that now in v2 views aren't records anymore
but core engine entities
## What's done
- Added specific label identifier targeting view field logic
- Handled side effects on viewField creation with lowest position on
object label identifier mutation
- Added viewField relations in field metadate entity + handled
optimistic in builder v2
- Added view relations in object metadata entity + handled optimistic in
builder v2
- Added integration tests covering the side effects and new validation
exceptions
- Sandardized cache computation
- Coverage on object metadata creation side effect on views and view
fields
## Coverage
```ts
PASS test/integration/graphql/suites/view/view-field/object-identifier-update-side-effect-on-view-field.integration-spec.ts
View Field Resolver - Successful object metadata identifier update side effect on view field
✓ should create a view field on label identifier object metadata update if it does not exist on view (7 ms)
✓ Should not allow deleting a label identifier view field (17 ms)
✓ Should not allow destroying a label identifier view field (6 ms)
✓ Should not allow updating a label identifier view field visibility to false (8 ms)
✓ Should not allow creating a view field with a position lower than the label idenfitier view field (180 ms)
✓ Should not allow updated labelIdentifier view field with a position higher than existing other view field (346 ms)
✓ Should allow updated labelIdentifier view field with a position higher than existing other view field (434 ms)
Test Suites: 1 passed, 1 total
Tests: 7 passed, 7 total
Snapshots: 5 passed, 5 total
Time: 4.571 s, estimated 5 s
```
close https://github.com/twentyhq/core-team-issues/issues/1664
This commit is contained in:
+8
-7
@@ -19,6 +19,7 @@ import { FieldMetadataDefaultValue } from 'src/engine/metadata-modules/field-met
|
||||
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 { ViewFieldEntity } from 'src/engine/core-modules/view/entities/view-field.entity';
|
||||
import { type FieldStandardOverridesDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-standard-overrides.dto';
|
||||
import { AssignIfIsGivenFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/assign-if-is-given-field-metadata-type.type';
|
||||
import { AssignTypeIfIsMorphOrRelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/assign-type-if-is-morph-or-relation-field-metadata-type.type';
|
||||
@@ -133,8 +134,7 @@ export class FieldMetadataEntity<
|
||||
|
||||
@OneToOne(
|
||||
() => FieldMetadataEntity,
|
||||
(fieldMetadata: FieldMetadataEntity) =>
|
||||
fieldMetadata.relationTargetFieldMetadataId,
|
||||
(fieldMetadata) => fieldMetadata.relationTargetFieldMetadataId,
|
||||
{ nullable: true },
|
||||
)
|
||||
@JoinColumn({ name: 'relationTargetFieldMetadataId' })
|
||||
@@ -151,8 +151,7 @@ export class FieldMetadataEntity<
|
||||
|
||||
@ManyToOne(
|
||||
() => ObjectMetadataEntity,
|
||||
(objectMetadata: ObjectMetadataEntity) =>
|
||||
objectMetadata.targetRelationFields,
|
||||
(objectMetadata) => objectMetadata.targetRelationFields,
|
||||
{ onDelete: 'CASCADE', nullable: true },
|
||||
)
|
||||
@JoinColumn({ name: 'relationTargetObjectMetadataId' })
|
||||
@@ -170,8 +169,7 @@ export class FieldMetadataEntity<
|
||||
|
||||
@OneToMany(
|
||||
() => IndexFieldMetadataEntity,
|
||||
(indexFieldMetadata: IndexFieldMetadataEntity) =>
|
||||
indexFieldMetadata.indexMetadata,
|
||||
(indexFieldMetadata) => indexFieldMetadata.indexMetadata,
|
||||
{
|
||||
cascade: true,
|
||||
},
|
||||
@@ -186,7 +184,10 @@ export class FieldMetadataEntity<
|
||||
|
||||
@OneToMany(
|
||||
() => FieldPermissionEntity,
|
||||
(fieldPermission: FieldPermissionEntity) => fieldPermission.fieldMetadata,
|
||||
(fieldPermission) => fieldPermission.fieldMetadata,
|
||||
)
|
||||
fieldPermissions: Relation<FieldPermissionEntity[]>;
|
||||
|
||||
@OneToMany(() => ViewFieldEntity, (viewField) => viewField.fieldMetadata)
|
||||
viewFields: Relation<ViewFieldEntity[]>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user