1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-04 00:18:01 +01:00

exclude tags for other features (#3007)

This commit is contained in:
Mateusz Kwasniewski 2023-01-27 11:34:20 +01:00 committed by GitHub
parent d821b1ead1
commit f8473a243f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 26 additions and 4 deletions

View File

@ -208,9 +208,9 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore {
const query = this.db const query = this.db
.select(COLUMNS) .select(COLUMNS)
.from<IFeatureStrategiesTable>(T.featureStrategies) .from<IFeatureStrategiesTable>(T.featureStrategies)
.where('environment', environment); .whereIn('feature_name', features);
if (features) { if (environment) {
query.whereIn('feature_name', features); query.where('environment', environment);
} }
const rows = await query; const rows = await query;
return rows.map(mapRow); return rows.map(mapRow);

View File

@ -105,6 +105,19 @@ class FeatureTagStore implements IFeatureTagStore {
return rows.map(this.featureTagRowToTag); return rows.map(this.featureTagRowToTag);
} }
async getAllByFeatures(features: string[]): Promise<IFeatureTag[]> {
const query = this.db
.select(COLUMNS)
.from<FeatureTagTable>(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<ITag> { async tagFeature(featureName: string, tag: ITag): Promise<ITag> {
const stopTimer = this.timer('tagFeature'); const stopTimer = this.timer('tagFeature');
await this.db<FeatureTagTable>(TABLE) await this.db<FeatureTagTable>(TABLE)

View File

@ -100,7 +100,7 @@ export default class ExportImportService {
), ),
this.segmentStore.getAllFeatureStrategySegments(), this.segmentStore.getAllFeatureStrategySegments(),
this.contextFieldStore.getAll(), this.contextFieldStore.getAll(),
this.featureTagStore.getAll(), this.featureTagStore.getAllByFeatures(query.features),
this.segmentStore.getAll(), this.segmentStore.getAll(),
]); ]);
this.addSegmentsToStrategies(featureStrategies, strategySegments); this.addSegmentsToStrategies(featureStrategies, strategySegments);

View File

@ -13,6 +13,7 @@ export interface IFeatureAndTag {
} }
export interface IFeatureTagStore extends Store<IFeatureTag, IFeatureTag> { export interface IFeatureTagStore extends Store<IFeatureTag, IFeatureTag> {
getAllTagsForFeature(featureName: string): Promise<ITag[]>; getAllTagsForFeature(featureName: string): Promise<ITag[]>;
getAllByFeatures(features: string[]): Promise<IFeatureTag[]>;
tagFeature(featureName: string, tag: ITag): Promise<ITag>; tagFeature(featureName: string, tag: ITag): Promise<ITag>;
importFeatureTags(featureTags: IFeatureTag[]): Promise<IFeatureAndTag[]>; importFeatureTags(featureTags: IFeatureTag[]): Promise<IFeatureAndTag[]>;
untagFeature(featureName: string, tag: ITag): Promise<void>; untagFeature(featureName: string, tag: ITag): Promise<void>;

View File

@ -83,6 +83,14 @@ export default class FakeFeatureTagStore implements IFeatureTagStore {
}); });
return Promise.resolve(); return Promise.resolve();
} }
getAllByFeatures(features: string[]): Promise<IFeatureTag[]> {
return Promise.resolve(
this.featureTags.filter((tag) =>
features.includes(tag.featureName),
),
);
}
} }
module.exports = FakeFeatureTagStore; module.exports = FakeFeatureTagStore;