renamed feature display to feature config

added concept of feature dependencies, if one feature depends on another feature, and it gets enabled, the other feature is enabled as well
changed some feature related apis
added ability to automatically decay warnings (separate feature)
added command to trigger the warn decay manually
added command to decay all active warnings
added method to scheduler service to directly start a cron job
This commit is contained in:
Sheldan
2020-04-29 21:25:26 +02:00
parent 85c47db5ed
commit d5482fabd4
60 changed files with 571 additions and 97 deletions

View File

@@ -31,7 +31,7 @@ public class FeatureEnabledCondition implements CommandCondition {
featureFlagValue = featureFlagManagementService.getFeatureFlagValue(feature, context.getGuild().getIdLong());
FeatureDisabledMessage featureDisabledMessage = FeatureDisabledMessage
.builder()
.featureDisplay(featureFlagService.getFeatureDisplayforFeature(feature))
.featureConfig(featureFlagService.getFeatureDisplayForFeature(feature))
.build();
reason = templateService.renderTemplate("feature_disabled_message", featureDisabledMessage);
}

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.command.models;
import dev.sheldan.abstracto.core.config.FeatureDisplay;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@@ -9,5 +9,5 @@ import lombok.Setter;
@Getter
@Builder
public class FeatureDisabledMessage {
private FeatureDisplay featureDisplay;
private FeatureConfig featureConfig;
}

View File

@@ -0,0 +1,14 @@
package dev.sheldan.abstracto.core.config;
import java.util.Collections;
import java.util.List;
public interface FeatureConfig {
FeatureEnum getFeature();
default List<FeatureConfig> getRequiredFeatures() {
return Collections.emptyList();
}
default List<FeatureConfig> getDependantFeatures() {
return Collections.emptyList();
}
}

View File

@@ -1,5 +0,0 @@
package dev.sheldan.abstracto.core.config;
public interface FeatureDisplay {
FeatureEnum getFeature();
}

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.models.template.commands;
import dev.sheldan.abstracto.core.config.FeatureDisplay;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
import lombok.Builder;
import lombok.Getter;
@@ -11,5 +11,5 @@ import lombok.Setter;
@Builder
public class FeatureFlagDisplay {
private AFeatureFlag featureFlag;
private FeatureDisplay featureDisplay;
private FeatureConfig featureConfig;
}

View File

@@ -1,18 +1,23 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.config.FeatureDisplay;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.models.database.AServer;
import java.util.List;
public interface FeatureFlagService {
boolean isFeatureEnabled(FeatureEnum name, Long serverId);
void enableFeature(FeatureEnum name, Long serverId);
void disableFeature(FeatureEnum name, Long serverId);
boolean isFeatureEnabled(FeatureConfig name, Long serverId);
boolean isFeatureEnabled(FeatureConfig name, AServer server);
void enableFeature(FeatureConfig name, Long serverId);
void enableFeature(FeatureConfig name, AServer server);
void disableFeature(FeatureConfig name, Long serverId);
void disableFeature(FeatureConfig name, AServer server);
List<String> getAllFeatures();
List<FeatureDisplay> getAllFeatureDisplays();
FeatureDisplay getFeatureDisplayforFeature(FeatureEnum featureEnum);
boolean doesFeatureExist(FeatureEnum name);
List<FeatureConfig> getAllFeatureConfigs();
FeatureConfig getFeatureDisplayForFeature(FeatureEnum featureEnum);
FeatureConfig getFeatureDisplayForFeature(String key);
boolean doesFeatureExist(FeatureConfig name);
List<String> getFeaturesAsList();
FeatureEnum getFeatureEnum(String key);
}

View File

@@ -12,7 +12,10 @@ public interface FeatureFlagManagementService {
void createFeatureFlag(AFeature feature, Long serverId, Boolean newValue);
void createFeatureFlag(AFeature feature, AServer server, Boolean newValue);
boolean getFeatureFlagValue(FeatureEnum key, Long serverId);
boolean getFeatureFlagValue(FeatureEnum key, AServer server);
void updateFeatureFlag(FeatureEnum key, Long serverId, Boolean newValue);
void updateFeatureFlag(FeatureEnum key, AServer server, Boolean newValue);
Optional<AFeatureFlag> getFeatureFlag(AFeature key, Long serverId);
Optional<AFeatureFlag> getFeatureFlag(AFeature key, AServer server);
List<AFeatureFlag> getFeatureFlagsOfServer(AServer server);
}