Improved feature flag loading in frontend #446

This commit is contained in:
2023-12-03 15:13:20 +01:00
parent 0e4419312b
commit 36887f1bdf
7 changed files with 56 additions and 27 deletions

View File

@@ -52,4 +52,5 @@ type Query {
discord: Discord
hasFeatureFlag(flag: String): FeatureFlag
featureFlags: [FeatureFlag]
}

View File

@@ -40,6 +40,7 @@ type Server implements TableWithHistoryQuery {
config: ServerConfig
hasFeatureFlag(flag: String): FeatureFlag
featureFlags: [FeatureFlag]
statistic(date: String): ServerStatistic

View File

@@ -116,6 +116,10 @@ class ServerQuery(DataQueryWithHistoryABC):
"hasFeatureFlag",
lambda server, *_, **kwargs: self._resolve_has_feature_flag(server, *_, **kwargs),
)
self.set_field(
"featureFlags",
lambda server, *_, **kwargs: self._resolve_feature_flags(server, *_),
)
self.set_field("statistic", lambda server, *_, **kwargs: ServerStatistics(server, kwargs))
@staticmethod
@@ -142,3 +146,13 @@ class ServerQuery(DataQueryWithHistoryABC):
"key": kwargs["flag"],
"value": FeatureFlagsSettings.get_flag_from_dict(settings.feature_flags, FeatureFlagsEnum(kwargs["flag"])),
}
def _resolve_feature_flags(self, server: Server, *_) -> list[dict]:
settings: ServerConfig = self._config.get_configuration(f"ServerConfig_{server.discord_id}")
return [
{
"key": flag,
"value": FeatureFlagsSettings.get_flag_from_dict(settings.feature_flags, FeatureFlagsEnum(flag)),
}
for flag in [e.value for e in FeatureFlagsEnum]
]

View File

@@ -131,6 +131,10 @@ class Query(QueryABC):
"hasFeatureFlag",
lambda *_, **kwargs: self._resolve_has_feature_flag(*_, **kwargs),
)
self.set_field(
"featureFlags",
lambda *_, **kwargs: self._resolve_feature_flags(*_),
)
def _resolve_has_feature_flag(self, *_, **kwargs):
settings: TechnicianConfig = self._config.get_configuration(TechnicianConfig)
@@ -140,3 +144,13 @@ class Query(QueryABC):
"key": kwargs["flag"],
"value": FeatureFlagsSettings.get_flag_from_dict(settings.feature_flags, FeatureFlagsEnum(kwargs["flag"])),
}
def _resolve_feature_flags(self, *_) -> list[dict]:
settings: TechnicianConfig = self._config.get_configuration(TechnicianConfig)
return [
{
"key": flag,
"value": FeatureFlagsSettings.get_flag_from_dict(settings.feature_flags, FeatureFlagsEnum(flag)),
}
for flag in [e.value for e in FeatureFlagsEnum]
]