fix: resolve N+1 query issue in view name resolver with DataLoaders (#14037)
## What Fixed N+1 query issue where each view's name resolution triggered a separate DB query to fetch objectMetadataId, even though it was already available in the parent view object. ## How - Added `objectMetadataLoader` to DataloaderService to batch metadata lookups - Updated ViewResolver to use context.loaders (following existing pattern from other metadata resolvers) - Removed unused `getObjectMetadataByViewId` method and its tests Now uses the already-loaded `view.objectMetadataId` directly instead of making unnecessary queries. Much cleaner!
This commit is contained in:
@@ -5,6 +5,7 @@ import {
|
||||
type IndexFieldMetadataLoaderPayload,
|
||||
type IndexMetadataLoaderPayload,
|
||||
type MorphRelationLoaderPayload,
|
||||
type ObjectMetadataLoaderPayload,
|
||||
type RelationLoaderPayload,
|
||||
} from 'src/engine/dataloaders/dataloader.service';
|
||||
import { type FieldMetadataDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-metadata.dto';
|
||||
@@ -12,6 +13,7 @@ import { type FieldMetadataEntity } from 'src/engine/metadata-modules/field-meta
|
||||
import { type IndexFieldMetadataDTO } from 'src/engine/metadata-modules/index-metadata/dtos/index-field-metadata.dto';
|
||||
import { type IndexMetadataDTO } from 'src/engine/metadata-modules/index-metadata/dtos/index-metadata.dto';
|
||||
import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||
import { type ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
|
||||
|
||||
export interface IDataloaders {
|
||||
relationLoader: DataLoader<
|
||||
@@ -48,4 +50,9 @@ export interface IDataloaders {
|
||||
IndexFieldMetadataLoaderPayload,
|
||||
IndexFieldMetadataDTO[]
|
||||
>;
|
||||
|
||||
objectMetadataLoader: DataLoader<
|
||||
ObjectMetadataLoaderPayload,
|
||||
ObjectMetadataItemWithFieldMaps | null
|
||||
>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user