betagouv/service-national-universel

View on GitHub
api/src/featureFlag/featureFlagService.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { FeatureFlagName } from "snu-lib";
import { FeatureFlagDocument, FeatureFlagModel } from "../models";

const checkFeatureAvailable = (feature?: FeatureFlagDocument | null) => {
  if (!feature) {
    return false;
  }
  const isBetween = feature.date && feature.date.from <= new Date() && feature.date.to >= new Date();
  return !!(feature.enabled || isBetween);
};

export const isFeatureAvailable = async (featureName: FeatureFlagName) => {
  const feature = await FeatureFlagModel.findOne({ name: featureName });
  return checkFeatureAvailable(feature);
};

export const getFeatureFlagsAvailable = async (): Promise<{ [key: string]: boolean }> => {
  const features = await FeatureFlagModel.find({});
  return features.reduce((acc, feature) => {
    const isAvailable = checkFeatureAvailable(feature);
    if (isAvailable) {
      acc[feature.name] = true;
    }
    return acc;
  }, {});
};