Skip to content

Commit

Permalink
Remove n+1 problem for StorageDataObject
Browse files Browse the repository at this point in the history
  • Loading branch information
WRadoslaw committed Oct 21, 2023
1 parent c9f6e5a commit 56371b0
Showing 1 changed file with 11 additions and 9 deletions.
20 changes: 11 additions & 9 deletions src/server-extension/resolvers/AssetsResolver/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { FieldResolver, Root, ObjectType, Field, Resolver, Ctx } from 'type-graphql'
import { EntityManager } from 'typeorm'
import {
StorageDataObject as DataObjectEntity,
DistributionBucket,
DistributionBucketOperatorMetadata,
DistributionBucketOperatorStatus,
Expand Down Expand Up @@ -226,11 +225,20 @@ function getResolvedUrlsLimit(ctx: Context): number {
return parseInt(ctx.req.headers['x-asset-urls-limit']?.toString() || '0')
}

@ObjectType()
class StorageBag {
@Field()
id!: string
}

@ObjectType()
export class StorageDataObject {
@Field()
id!: string

@Field()
storageBag: StorageBag

@Field(() => [String])
resolvedUrls: string[]
}
Expand All @@ -242,20 +250,14 @@ export class AssetsResolver {

@FieldResolver(() => [String])
async resolvedUrls(@Root() object: StorageDataObject, @Ctx() ctx: Context): Promise<string[]> {
const em = await this.em()
const clientLoc = await getClientLoc(ctx)
const limit = await getResolvedUrlsLimit(ctx)
// The resolvedUrl field is initially populated with the object ID
const [objectId] = object.resolvedUrls
if (!objectId) {
return []
}
const { storageBagId } =
(await em.getRepository(DataObjectEntity).findOneBy({ id: objectId })) || {}
if (!storageBagId) {
if (!object.storageBag || !objectId) {
return []
}
const buckets = await distributionBucketsCache.getBucketsByBagId(storageBagId)
const buckets = await distributionBucketsCache.getBucketsByBagId(object.storageBag.id)
const nodes = buckets.flatMap((b) => b.nodes)
if (clientLoc) {
sortNodesByClosest(nodes, clientLoc)
Expand Down

0 comments on commit 56371b0

Please sign in to comment.