Skip to content

Commit

Permalink
fix(api-headless-cms-ddb-es): data loader clear caching on each request
Browse files Browse the repository at this point in the history
  • Loading branch information
brunozoric authored and adrians5j committed May 11, 2023
1 parent f8b8b0a commit 3d21e6e
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 16 deletions.
15 changes: 9 additions & 6 deletions packages/api-headless-cms-ddb-es/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,13 @@ export const createStorageOperations: StorageOperationsFactory = params => {
...(userPlugins || [])
]);

const entries = createEntriesStorageOperations({
entity: entities.entries,
esEntity: entities.entriesEs,
plugins,
elasticsearch
});

return {
name: "dynamodb:elasticsearch",
beforeInit: async context => {
Expand Down Expand Up @@ -154,6 +161,7 @@ export const createStorageOperations: StorageOperationsFactory = params => {
for (const type of types) {
plugins.mergeByType(context.plugins, type);
}
entries.dataLoaders.clearAll();
},
init: async context => {
/**
Expand Down Expand Up @@ -206,11 +214,6 @@ export const createStorageOperations: StorageOperationsFactory = params => {
entity: entities.models,
elasticsearch
}),
entries: createEntriesStorageOperations({
entity: entities.entries,
esEntity: entities.entriesEs,
plugins,
elasticsearch
})
entries
};
};
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,13 @@ export class DataLoaderCache {
this.cache[key] = dataLoader;
}

public clearAll(params: ClearAllParams): void {
public clearAll(params?: ClearAllParams): void {
if (!params) {
for (const current in this.cache) {
this.cache[current].clearAll();
}
return;
}
const key = this.createKey({
...params,
name: ""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { CacheKeyParams, DataLoaderCache } from "~/operations/entry/dataLoader/D
import { Entity } from "dynamodb-toolbox";
import { DataLoaders, getDataLoaderFactory } from "~/operations/entry/dataLoader";
import { parseIdentifier } from "@webiny/utils";
import { DataLoadersHandlerInterface, DataLoadersHandlerInterfaceClearAllParams } from "~/types";

interface DataLoaderParams {
model: Pick<CmsModel, "tenant" | "locale" | "modelId">;
Expand All @@ -23,7 +24,7 @@ export interface ClearAllParams {
model: Pick<CmsModel, "tenant" | "locale" | "modelId">;
}

export class DataLoadersHandler {
export class DataLoadersHandler implements DataLoadersHandlerInterface {
private readonly entity: Entity<any>;
private readonly cache: DataLoaderCache = new DataLoaderCache();

Expand Down Expand Up @@ -139,10 +140,7 @@ export class DataLoadersHandler {
);
}

public clearAll({ model }: ClearAllParams): void {
this.cache.clearAll({
tenant: model.tenant,
locale: model.locale
});
public clearAll(params?: DataLoadersHandlerInterfaceClearAllParams): void {
this.cache.clearAll(params?.model);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import lodashCloneDeep from "lodash/cloneDeep";
import WebinyError from "@webiny/error";
import {
CmsEntry,
CmsEntryStorageOperations,
CmsModel,
CmsStorageEntry,
CONTENT_ENTRY_STATUS,
Expand Down Expand Up @@ -33,7 +32,7 @@ import { get as getRecord } from "@webiny/db-dynamodb/utils/get";
import { zeroPad } from "@webiny/utils";
import { cleanupItem } from "@webiny/db-dynamodb/utils/cleanup";
import { ElasticsearchSearchResponse } from "@webiny/api-elasticsearch/types";
import { CmsIndexEntry } from "~/types";
import { CmsEntryStorageOperations, CmsIndexEntry } from "~/types";
import { createElasticsearchBody } from "~/operations/entry/elasticsearch/body";
import { createLatestRecordType, createPublishedRecordType, createRecordType } from "./recordType";
import { StorageOperationsCmsModelPlugin } from "@webiny/api-headless-cms";
Expand Down Expand Up @@ -1526,6 +1525,7 @@ export const createEntriesStorageOperations = (
getByIds,
getLatestByIds,
getPublishedByIds,
getPreviousRevision
getPreviousRevision,
dataLoaders
};
};
12 changes: 12 additions & 0 deletions packages/api-headless-cms-ddb-es/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { Plugin, PluginCollection } from "@webiny/plugins/types";
import {
CmsContext as BaseCmsContext,
CmsEntry,
CmsEntryStorageOperations as BaseCmsEntryStorageOperations,
CmsModel,
CmsModelField,
CmsModelFieldToGraphQLPlugin,
Expand Down Expand Up @@ -187,3 +188,14 @@ export interface StorageOperationsFactory {
export interface CmsContext extends BaseCmsContext {
[key: string]: any;
}

export interface CmsEntryStorageOperations extends BaseCmsEntryStorageOperations {
dataLoaders: DataLoadersHandlerInterface;
}

export interface DataLoadersHandlerInterfaceClearAllParams {
model: Pick<CmsModel, "tenant" | "locale">;
}
export interface DataLoadersHandlerInterface {
clearAll: (params?: DataLoadersHandlerInterfaceClearAllParams) => void;
}

0 comments on commit 3d21e6e

Please sign in to comment.