Optimize metadata queries (#7013)
In this PR: 1. Refactor guards to avoid duplicated queries: WorkspaceAuthGuard and UserAuthGuard only check for existence of workspace and user in the request without querying the database
This commit is contained in:
committed by
Charles Bochet
parent
cf8b1161cc
commit
523df5398a
@ -1,15 +1,16 @@
|
||||
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
|
||||
|
||||
import {
|
||||
RelationMetadataEntity,
|
||||
RelationMetadataType,
|
||||
} from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
|
||||
import {
|
||||
deduceRelationDirection,
|
||||
RelationDirection,
|
||||
deduceRelationDirection,
|
||||
} from 'src/engine/utils/deduce-relation-direction.util';
|
||||
|
||||
export const computeRelationType = (
|
||||
fieldMetadata: FieldMetadataEntity,
|
||||
fieldMetadata: FieldMetadataInterface,
|
||||
relationMetadata: RelationMetadataEntity,
|
||||
) => {
|
||||
const relationDirection = deduceRelationDirection(
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
import { RelationType } from 'typeorm/metadata/types/RelationTypes';
|
||||
|
||||
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
|
||||
|
||||
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
|
||||
import { ObjectMetadataMap } from 'src/engine/metadata-modules/utils/generate-object-metadata-map.util';
|
||||
import { computeRelationType } from 'src/engine/twenty-orm/utils/compute-relation-type.util';
|
||||
|
||||
interface RelationDetails {
|
||||
@ -13,37 +14,28 @@ interface RelationDetails {
|
||||
}
|
||||
|
||||
export async function determineRelationDetails(
|
||||
fieldMetadata: FieldMetadataEntity,
|
||||
fieldMetadata: FieldMetadataInterface,
|
||||
relationMetadata: RelationMetadataEntity,
|
||||
objectMetadataCollection: ObjectMetadataEntity[],
|
||||
objectMetadataMap: ObjectMetadataMap,
|
||||
): Promise<RelationDetails> {
|
||||
const relationType = computeRelationType(fieldMetadata, relationMetadata);
|
||||
let fromObjectMetadata: ObjectMetadataEntity | undefined =
|
||||
fieldMetadata.object;
|
||||
let toObjectMetadata: ObjectMetadataEntity | undefined =
|
||||
objectMetadataCollection.find(
|
||||
(objectMetadata) =>
|
||||
objectMetadata.id === relationMetadata.toObjectMetadataId,
|
||||
);
|
||||
const fromObjectMetadata = objectMetadataMap[fieldMetadata.objectMetadataId];
|
||||
let toObjectMetadata = objectMetadataMap[relationMetadata.toObjectMetadataId];
|
||||
|
||||
// RelationMetadata always store the relation from the perspective of the `from` object, MANY_TO_ONE relations are not stored yet
|
||||
if (relationType === 'many-to-one') {
|
||||
fromObjectMetadata = fieldMetadata.object;
|
||||
|
||||
toObjectMetadata = objectMetadataCollection.find(
|
||||
(objectMetadata) =>
|
||||
objectMetadata.id === relationMetadata.fromObjectMetadataId,
|
||||
);
|
||||
toObjectMetadata = objectMetadataMap[relationMetadata.fromObjectMetadataId];
|
||||
}
|
||||
|
||||
if (!fromObjectMetadata || !toObjectMetadata) {
|
||||
throw new Error('Object metadata not found');
|
||||
}
|
||||
|
||||
const toFieldMetadata = toObjectMetadata.fields.find((field) =>
|
||||
relationType === 'many-to-one'
|
||||
? field.id === relationMetadata.fromFieldMetadataId
|
||||
: field.id === relationMetadata.toFieldMetadataId,
|
||||
const toFieldMetadata = Object.values(toObjectMetadata.fields).find(
|
||||
(field) =>
|
||||
relationType === 'many-to-one'
|
||||
? field.id === relationMetadata.fromFieldMetadataId
|
||||
: field.id === relationMetadata.toFieldMetadataId,
|
||||
);
|
||||
|
||||
if (!toFieldMetadata) {
|
||||
|
||||
Reference in New Issue
Block a user