Skip to content

Commit 1df0647

Browse files
committed
Make hydrateConfigurationStore more reusable
1 parent 6605107 commit 1df0647

File tree

3 files changed

+59
-44
lines changed

3 files changed

+59
-44
lines changed

src/configuration-requestor.ts

Lines changed: 5 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,7 @@
11
import { IConfigurationStore } from './configuration-store/configuration-store';
2+
import { hydrateConfigurationStore } from './configuration-store/configuration-store-utils';
23
import { IHttpClient } from './http-client';
3-
import {
4-
BanditVariation,
5-
BanditParameters,
6-
Flag,
7-
Environment,
8-
PrecomputedFlag,
9-
} from './interfaces';
10-
11-
type Entry = Flag | BanditVariation[] | BanditParameters | PrecomputedFlag;
4+
import { BanditVariation, BanditParameters, Flag } from './interfaces';
125

136
// Requests AND stores flag configurations
147
export default class ConfigurationRequestor {
@@ -18,7 +11,6 @@ export default class ConfigurationRequestor {
1811
private readonly banditVariationConfigurationStore: IConfigurationStore<
1912
BanditVariation[]
2013
> | null,
21-
private readonly precomputedFlagStore: IConfigurationStore<PrecomputedFlag>,
2214
private readonly banditModelConfigurationStore: IConfigurationStore<BanditParameters> | null,
2315
) {}
2416

@@ -28,7 +20,7 @@ export default class ConfigurationRequestor {
2820
return;
2921
}
3022

31-
await this.hydrateConfigurationStore(this.flagConfigurationStore, {
23+
await hydrateConfigurationStore(this.flagConfigurationStore, {
3224
entries: configResponse.flags,
3325
environment: configResponse.environment,
3426
createdAt: configResponse.createdAt,
@@ -42,7 +34,7 @@ export default class ConfigurationRequestor {
4234
// Map bandit flag associations by flag key for quick lookup (instead of bandit key as provided by the UFC)
4335
const banditVariations = this.indexBanditVariationsByFlagKey(configResponse.bandits);
4436

45-
await this.hydrateConfigurationStore(this.banditVariationConfigurationStore, {
37+
await hydrateConfigurationStore(this.banditVariationConfigurationStore, {
4638
entries: banditVariations,
4739
environment: configResponse.environment,
4840
createdAt: configResponse.createdAt,
@@ -55,7 +47,7 @@ export default class ConfigurationRequestor {
5547
throw new Error('Bandit parameters fetched but no bandit configuration store provided');
5648
}
5749

58-
await this.hydrateConfigurationStore(this.banditModelConfigurationStore, {
50+
await hydrateConfigurationStore(this.banditModelConfigurationStore, {
5951
entries: banditResponse.bandits,
6052
environment: configResponse.environment,
6153
createdAt: configResponse.createdAt,
@@ -64,24 +56,6 @@ export default class ConfigurationRequestor {
6456
}
6557
}
6658

67-
private async hydrateConfigurationStore<T extends Entry>(
68-
configurationStore: IConfigurationStore<T> | null,
69-
response: {
70-
entries: Record<string, T>;
71-
environment: Environment;
72-
createdAt: string;
73-
},
74-
): Promise<void> {
75-
if (configurationStore) {
76-
const didUpdate = await configurationStore.setEntries(response.entries);
77-
if (didUpdate) {
78-
configurationStore.setEnvironment(response.environment);
79-
configurationStore.setConfigFetchedAt(new Date().toISOString());
80-
configurationStore.setConfigPublishedAt(response.createdAt);
81-
}
82-
}
83-
}
84-
8559
private indexBanditVariationsByFlagKey(
8660
banditVariationsByBanditKey: Record<string, BanditVariation[]>,
8761
): Record<string, BanditVariation[]> {
@@ -98,17 +72,4 @@ export default class ConfigurationRequestor {
9872
});
9973
return banditVariationsByFlagKey;
10074
}
101-
102-
async fetchAndStorePrecomputedFlags(): Promise<void> {
103-
const precomputedResponse = await this.httpClient.getPrecomputedFlags();
104-
if (!precomputedResponse?.flags) {
105-
return;
106-
}
107-
108-
await this.hydrateConfigurationStore(this.precomputedFlagStore, {
109-
entries: precomputedResponse.flags,
110-
environment: precomputedResponse.environment,
111-
createdAt: precomputedResponse.createdAt,
112-
});
113-
}
11475
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import {
2+
BanditParameters,
3+
BanditVariation,
4+
Environment,
5+
Flag,
6+
PrecomputedFlag,
7+
} from '../interfaces';
8+
9+
import { IConfigurationStore } from './configuration-store';
10+
11+
type Entry = Flag | BanditVariation[] | BanditParameters | PrecomputedFlag;
12+
13+
export async function hydrateConfigurationStore<T extends Entry>(
14+
configurationStore: IConfigurationStore<T> | null,
15+
response: {
16+
entries: Record<string, T>;
17+
environment: Environment;
18+
createdAt: string;
19+
},
20+
): Promise<void> {
21+
if (configurationStore) {
22+
const didUpdate = await configurationStore.setEntries(response.entries);
23+
if (didUpdate) {
24+
configurationStore.setEnvironment(response.environment);
25+
configurationStore.setConfigFetchedAt(new Date().toISOString());
26+
configurationStore.setConfigPublishedAt(response.createdAt);
27+
}
28+
}
29+
}

src/precomputed-requestor.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { IConfigurationStore } from './configuration-store/configuration-store';
2+
import { hydrateConfigurationStore } from './configuration-store/configuration-store-utils';
3+
import { IHttpClient } from './http-client';
4+
import { PrecomputedFlag } from './interfaces';
5+
6+
// Requests AND stores flag configurations
7+
export default class ConfigurationRequestor {
8+
constructor(
9+
private readonly httpClient: IHttpClient,
10+
private readonly precomputedFlagStore: IConfigurationStore<PrecomputedFlag>,
11+
) {}
12+
13+
async fetchAndStorePrecomputedFlags(): Promise<void> {
14+
const precomputedResponse = await this.httpClient.getPrecomputedFlags();
15+
if (!precomputedResponse?.flags) {
16+
return;
17+
}
18+
19+
await hydrateConfigurationStore(this.precomputedFlagStore, {
20+
entries: precomputedResponse.flags,
21+
environment: precomputedResponse.environment,
22+
createdAt: precomputedResponse.createdAt,
23+
});
24+
}
25+
}

0 commit comments

Comments
 (0)