added exception in case the feature is not known to the system

This commit is contained in:
Sheldan
2020-04-10 12:06:46 +02:00
parent e84e384706
commit 87c97d5069
9 changed files with 76 additions and 11 deletions

View File

@@ -7,7 +7,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.config.AbstractoFeatures;
import dev.sheldan.abstracto.core.commands.utility.UtilityModuleInterface;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -17,13 +17,13 @@ import java.util.List;
@Component
public class Disable implements Command {
@Autowired
private FeatureFlagManagementService featureFlagManagementService;
private FeatureFlagService featureFlagManagementService;
@Override
public CommandResult execute(CommandContext commandContext) {
String flagKey = (String) commandContext.getParameters().getParameters().get(0);
featureFlagManagementService.updateOrCreateFeatureFlag(flagKey, commandContext.getGuild().getIdLong(), false);
featureFlagManagementService.disableFeature(flagKey, commandContext.getGuild().getIdLong());
return CommandResult.fromSuccess();
}

View File

@@ -7,7 +7,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.config.AbstractoFeatures;
import dev.sheldan.abstracto.core.commands.utility.UtilityModuleInterface;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -19,11 +19,12 @@ public class Enable implements Command {
@Autowired
private FeatureFlagManagementService featureFlagManagementService;
private FeatureFlagService featureFlagManagementService;
@Override
public CommandResult execute(CommandContext commandContext) {
String flagKey = (String) commandContext.getParameters().getParameters().get(0);
featureFlagManagementService.updateOrCreateFeatureFlag(flagKey, commandContext.getGuild().getIdLong(), true);
featureFlagManagementService.enableFeature(flagKey, commandContext.getGuild().getIdLong());
return CommandResult.fromSuccess();
}

View File

@@ -5,7 +5,9 @@ import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@Component
@Getter
@@ -13,4 +15,12 @@ import java.util.HashMap;
@ConfigurationProperties(prefix = "abstracto")
public class FeatureFlagConfig {
private HashMap<String, Boolean> features = new HashMap<>();
public boolean doesFeatureExist(String name) {
return features.containsKey(name);
}
public List<String> getFeaturesAsList() {
return new ArrayList<>(features.keySet());
}
}

View File

@@ -1,5 +1,7 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.config.FeatureFlagConfig;
import dev.sheldan.abstracto.core.exception.FeatureNotFoundException;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -10,8 +12,28 @@ public class FeatureFlagServiceBean implements FeatureFlagService {
@Autowired
private FeatureFlagManagementService managementService;
@Autowired
private FeatureFlagConfig featureFlagConfig;
@Override
public boolean isFeatureEnabled(String name, Long serverId) {
return managementService.getFeatureFlagValue(name, serverId);
}
@Override
public void enableFeature(String name, Long serverId) {
if(!featureFlagConfig.doesFeatureExist(name)) {
throw new FeatureNotFoundException("Feature not found.", name, featureFlagConfig.getFeaturesAsList());
}
managementService.updateFeatureFlag(name, serverId, true);
}
@Override
public void disableFeature(String name, Long serverId) {
if(!featureFlagConfig.doesFeatureExist(name)) {
throw new FeatureNotFoundException("Feature not found.", name, featureFlagConfig.getFeaturesAsList());
}
managementService.updateFeatureFlag(name, serverId, false);
}
}

View File

@@ -41,14 +41,12 @@ public class FeatureFlagManagementServiceBean implements FeatureFlagManagementSe
}
@Override
public void updateOrCreateFeatureFlag(String key, Long serverId, Boolean newValue) {
public void updateFeatureFlag(String key, Long serverId, Boolean newValue) {
Optional<AFeatureFlag> existing = getFeatureFlag(key, serverId);
if(existing.isPresent()) {
AFeatureFlag flag = existing.get();
flag.setEnabled(newValue);
repository.save(flag);
} else {
createFeatureFlag(key, serverId, newValue);
}
}

View File

@@ -0,0 +1 @@
Feature ${featureName} not available. The available features are: ${availableFeatures?join(", ")}

View File

@@ -0,0 +1,31 @@
package dev.sheldan.abstracto.core.exception;
import dev.sheldan.abstracto.templating.Templatable;
import java.util.HashMap;
import java.util.List;
public class FeatureNotFoundException extends AbstractoRunTimeException implements Templatable {
private String feature;
private List<String> availableFeatures;
public FeatureNotFoundException(String message, String feature, List<String> availableFeatures) {
super(message);
this.feature = feature;
this.availableFeatures = availableFeatures;
}
@Override
public String getTemplateName() {
return "feature_not_found";
}
@Override
public Object getTemplateModel() {
HashMap<String, Object> parameters = new HashMap<>();
parameters.put("featureName", this.feature);
parameters.put("availableFeatures", this.availableFeatures);
return parameters;
}
}

View File

@@ -2,4 +2,6 @@ package dev.sheldan.abstracto.core.service;
public interface FeatureFlagService {
boolean isFeatureEnabled(String name, Long serverId);
void enableFeature(String name, Long serverId);
void disableFeature(String name, Long serverId);
}

View File

@@ -9,6 +9,6 @@ public interface FeatureFlagManagementService {
void createFeatureFlag(String key, Long serverId, Boolean newValue);
void createFeatureFlag(String key, AServer server, Boolean newValue);
boolean getFeatureFlagValue(String key, Long serverId);
void updateOrCreateFeatureFlag(String key, Long serverId, Boolean newValue);
void updateFeatureFlag(String key, Long serverId, Boolean newValue);
Optional<AFeatureFlag> getFeatureFlag(String key, Long serverId);
}