Compare commits

...
Author SHA1 Message Date
Sonarly Claude Code 44508034a8 fix: deduplicate ApplicationEntity queries across flat entity cache providers
https://sonarly.com/issue/15988?type=bug

Creating a custom object triggers 25+ identical `SELECT ApplicationEntity` queries during workspace cache recomputation, adding ~420ms of unnecessary DB time to a 1.45s request. Additionally, 25 Lingui i18n messages are uncompiled, producing noisy console warnings.
2026-03-18 16:00:43 +00:00
@@ -0,0 +1,40 @@
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity';
import { PromiseMemoizer } from 'src/engine/twenty-orm/storage/promise-memoizer.storage';
const MEMOIZER_TTL_MS = 5_000; // 5 seconds
@Injectable()
export class ApplicationEntityLookupService {
private readonly memoizer = new PromiseMemoizer<
{ id: string; universalIdentifier: string }[]
>(MEMOIZER_TTL_MS);
constructor(
@InjectRepository(ApplicationEntity)
private readonly applicationRepository: Repository<ApplicationEntity>,
) {}
async findByWorkspaceId(
workspaceId: string,
): Promise<{ id: string; universalIdentifier: string }[]> {
const memoKey = `app-lookup-${workspaceId}` as `${string}-${string}`;
const result = await this.memoizer.memoizePromiseAndExecute(
memoKey,
async () => {
return this.applicationRepository.find({
where: { workspaceId },
select: ['id', 'universalIdentifier'],
withDeleted: true,
});
},
);
return result ?? [];
}
}