2023-10-25 15:18:52 +02:00
|
|
|
import { Logger } from '../../logger';
|
|
|
|
import {
|
|
|
|
IFeatureStrategiesStore,
|
|
|
|
IUnleashConfig,
|
|
|
|
IUnleashStores,
|
2023-10-31 14:10:31 +01:00
|
|
|
serializeDates,
|
2023-10-25 15:18:52 +02:00
|
|
|
} from '../../types';
|
2023-10-26 15:29:30 +02:00
|
|
|
import { IFeatureSearchParams } from '../feature-toggle/types/feature-toggle-strategies-store-type';
|
2023-10-25 15:18:52 +02:00
|
|
|
|
|
|
|
export class FeatureSearchService {
|
|
|
|
private featureStrategiesStore: IFeatureStrategiesStore;
|
|
|
|
private logger: Logger;
|
|
|
|
constructor(
|
|
|
|
{
|
|
|
|
featureStrategiesStore,
|
|
|
|
}: Pick<IUnleashStores, 'featureStrategiesStore'>,
|
|
|
|
{ getLogger }: Pick<IUnleashConfig, 'getLogger'>,
|
|
|
|
) {
|
|
|
|
this.featureStrategiesStore = featureStrategiesStore;
|
|
|
|
this.logger = getLogger('services/feature-search-service.ts');
|
|
|
|
}
|
|
|
|
|
2023-10-26 15:29:30 +02:00
|
|
|
async search(params: IFeatureSearchParams) {
|
2023-10-31 14:10:31 +01:00
|
|
|
// fetch one more item than needed to get a cursor of the next item
|
|
|
|
const features = await this.featureStrategiesStore.searchFeatures({
|
|
|
|
...params,
|
|
|
|
limit: params.limit + 1,
|
|
|
|
});
|
2023-10-25 15:18:52 +02:00
|
|
|
|
2023-10-31 14:10:31 +01:00
|
|
|
const nextCursor =
|
|
|
|
features.length > params.limit
|
|
|
|
? features[features.length - 1].createdAt.toJSON()
|
|
|
|
: undefined;
|
|
|
|
|
|
|
|
// do not return the items with the next cursor
|
|
|
|
return {
|
|
|
|
features:
|
|
|
|
features.length > params.limit
|
|
|
|
? features.slice(0, -1)
|
|
|
|
: features,
|
|
|
|
nextCursor,
|
|
|
|
};
|
2023-10-25 15:18:52 +02:00
|
|
|
}
|
|
|
|
}
|