371c26bc9b
# Introduction Migrate previous runner only iterating on `flatObjectMetadataMaps` to `allFlatEntityMaps`. Refactored the optimistic to be handled inside the actions handler ## Workspace flat map cache Introducing a new service and registry, that will dynamically retrieve and or recompute requested cache when called ## Runner refactor Runner now dynamically invalidate updated cache at the end of the transaction close https://github.com/orgs/twentyhq/projects/1/views/8?pane=issue&itemId=129136356&issue=twentyhq%7Ccore-team-issues%7C1492 close https://github.com/orgs/twentyhq/projects/1/views/8?pane=issue&itemId=129136210&issue=twentyhq%7Ccore-team-issues%7C1494
50 lines
1.7 KiB
TypeScript
50 lines
1.7 KiB
TypeScript
import { Injectable, OnModuleInit } from '@nestjs/common';
|
|
import { DiscoveryService } from '@nestjs/core';
|
|
|
|
import { AllFlatEntities } from 'src/engine/core-modules/common/types/all-flat-entities.type';
|
|
import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type';
|
|
import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type';
|
|
import { WORKSPACE_FLAT_MAP_CACHE_KEY } from 'src/engine/workspace-flat-map-cache/decorators/workspace-flat-map-cache.decorator';
|
|
import { WorkspaceFlatMapCacheService } from 'src/engine/workspace-flat-map-cache/services/workspace-flat-map-cache.service';
|
|
|
|
@Injectable()
|
|
export class WorkspaceFlatMapCacheRegistryService implements OnModuleInit {
|
|
private readonly cacheServiceMap = new Map<
|
|
keyof AllFlatEntityMaps,
|
|
WorkspaceFlatMapCacheService<FlatEntityMaps<AllFlatEntities>>
|
|
>();
|
|
|
|
constructor(private readonly discoveryService: DiscoveryService) {}
|
|
|
|
async onModuleInit() {
|
|
this.discoverAndRegisterCacheServices();
|
|
}
|
|
|
|
private discoverAndRegisterCacheServices(): void {
|
|
const providers = this.discoveryService.getProviders();
|
|
|
|
providers.forEach((wrapper) => {
|
|
const { instance, metatype } = wrapper;
|
|
|
|
if (!instance || !metatype) {
|
|
return;
|
|
}
|
|
|
|
const cacheKey = Reflect.getMetadata(
|
|
WORKSPACE_FLAT_MAP_CACHE_KEY,
|
|
metatype,
|
|
);
|
|
|
|
if (cacheKey && instance instanceof WorkspaceFlatMapCacheService) {
|
|
this.cacheServiceMap.set(cacheKey, instance);
|
|
}
|
|
});
|
|
}
|
|
|
|
getCacheService(
|
|
flatEntityName: keyof AllFlatEntityMaps,
|
|
): WorkspaceFlatMapCacheService<FlatEntityMaps<AllFlatEntities>> | undefined {
|
|
return this.cacheServiceMap.get(flatEntityName);
|
|
}
|
|
}
|