diff --git a/src/lib/db/feature-strategy-store.ts b/src/lib/db/feature-strategy-store.ts index 5c6e442268c..f14e8d0f1b0 100644 --- a/src/lib/db/feature-strategy-store.ts +++ b/src/lib/db/feature-strategy-store.ts @@ -208,9 +208,9 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore { const query = this.db .select(COLUMNS) .from(T.featureStrategies) - .where('environment', environment); - if (features) { - query.whereIn('feature_name', features); + .whereIn('feature_name', features); + if (environment) { + query.where('environment', environment); } const rows = await query; return rows.map(mapRow); diff --git a/src/lib/db/feature-tag-store.ts b/src/lib/db/feature-tag-store.ts index ae0ebc3b2b1..7b27e62d171 100644 --- a/src/lib/db/feature-tag-store.ts +++ b/src/lib/db/feature-tag-store.ts @@ -105,6 +105,19 @@ class FeatureTagStore implements IFeatureTagStore { return rows.map(this.featureTagRowToTag); } + async getAllByFeatures(features: string[]): Promise { + const query = this.db + .select(COLUMNS) + .from(TABLE) + .whereIn('feature_name', features); + const rows = await query; + return rows.map((row) => ({ + featureName: row.feature_name, + tagType: row.tag_type, + tagValue: row.tag_value, + })); + } + async tagFeature(featureName: string, tag: ITag): Promise { const stopTimer = this.timer('tagFeature'); await this.db(TABLE) diff --git a/src/lib/services/export-import-service.ts b/src/lib/services/export-import-service.ts index 6ede6a1d82c..082266c2730 100644 --- a/src/lib/services/export-import-service.ts +++ b/src/lib/services/export-import-service.ts @@ -100,7 +100,7 @@ export default class ExportImportService { ), this.segmentStore.getAllFeatureStrategySegments(), this.contextFieldStore.getAll(), - this.featureTagStore.getAll(), + this.featureTagStore.getAllByFeatures(query.features), this.segmentStore.getAll(), ]); this.addSegmentsToStrategies(featureStrategies, strategySegments); diff --git a/src/lib/types/stores/feature-tag-store.ts b/src/lib/types/stores/feature-tag-store.ts index 7f3fdb7cda6..e4dd71e4cea 100644 --- a/src/lib/types/stores/feature-tag-store.ts +++ b/src/lib/types/stores/feature-tag-store.ts @@ -13,6 +13,7 @@ export interface IFeatureAndTag { } export interface IFeatureTagStore extends Store { getAllTagsForFeature(featureName: string): Promise; + getAllByFeatures(features: string[]): Promise; tagFeature(featureName: string, tag: ITag): Promise; importFeatureTags(featureTags: IFeatureTag[]): Promise; untagFeature(featureName: string, tag: ITag): Promise; diff --git a/src/test/fixtures/fake-feature-tag-store.ts b/src/test/fixtures/fake-feature-tag-store.ts index 4157ad32bcd..629a58f802b 100644 --- a/src/test/fixtures/fake-feature-tag-store.ts +++ b/src/test/fixtures/fake-feature-tag-store.ts @@ -83,6 +83,14 @@ export default class FakeFeatureTagStore implements IFeatureTagStore { }); return Promise.resolve(); } + + getAllByFeatures(features: string[]): Promise { + return Promise.resolve( + this.featureTags.filter((tag) => + features.includes(tag.featureName), + ), + ); + } } module.exports = FakeFeatureTagStore;