mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-15 12:10:21 +00:00
added exception in case the feature is not known to the system
This commit is contained in:
@@ -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.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.config.AbstractoFeatures;
|
import dev.sheldan.abstracto.core.config.AbstractoFeatures;
|
||||||
import dev.sheldan.abstracto.core.commands.utility.UtilityModuleInterface;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -17,13 +17,13 @@ import java.util.List;
|
|||||||
@Component
|
@Component
|
||||||
public class Disable implements Command {
|
public class Disable implements Command {
|
||||||
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private FeatureFlagManagementService featureFlagManagementService;
|
private FeatureFlagService featureFlagManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
String flagKey = (String) commandContext.getParameters().getParameters().get(0);
|
String flagKey = (String) commandContext.getParameters().getParameters().get(0);
|
||||||
featureFlagManagementService.updateOrCreateFeatureFlag(flagKey, commandContext.getGuild().getIdLong(), false);
|
featureFlagManagementService.disableFeature(flagKey, commandContext.getGuild().getIdLong());
|
||||||
return CommandResult.fromSuccess();
|
return CommandResult.fromSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.config.AbstractoFeatures;
|
import dev.sheldan.abstracto.core.config.AbstractoFeatures;
|
||||||
import dev.sheldan.abstracto.core.commands.utility.UtilityModuleInterface;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -19,11 +19,12 @@ public class Enable implements Command {
|
|||||||
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private FeatureFlagManagementService featureFlagManagementService;
|
private FeatureFlagService featureFlagManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
String flagKey = (String) commandContext.getParameters().getParameters().get(0);
|
String flagKey = (String) commandContext.getParameters().getParameters().get(0);
|
||||||
featureFlagManagementService.updateOrCreateFeatureFlag(flagKey, commandContext.getGuild().getIdLong(), true);
|
featureFlagManagementService.enableFeature(flagKey, commandContext.getGuild().getIdLong());
|
||||||
return CommandResult.fromSuccess();
|
return CommandResult.fromSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ import lombok.Setter;
|
|||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@Getter
|
@Getter
|
||||||
@@ -13,4 +15,12 @@ import java.util.HashMap;
|
|||||||
@ConfigurationProperties(prefix = "abstracto")
|
@ConfigurationProperties(prefix = "abstracto")
|
||||||
public class FeatureFlagConfig {
|
public class FeatureFlagConfig {
|
||||||
private HashMap<String, Boolean> features = new HashMap<>();
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package dev.sheldan.abstracto.core.service;
|
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 dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -10,8 +12,28 @@ public class FeatureFlagServiceBean implements FeatureFlagService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private FeatureFlagManagementService managementService;
|
private FeatureFlagManagementService managementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private FeatureFlagConfig featureFlagConfig;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isFeatureEnabled(String name, Long serverId) {
|
public boolean isFeatureEnabled(String name, Long serverId) {
|
||||||
return managementService.getFeatureFlagValue(name, 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,14 +41,12 @@ public class FeatureFlagManagementServiceBean implements FeatureFlagManagementSe
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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);
|
Optional<AFeatureFlag> existing = getFeatureFlag(key, serverId);
|
||||||
if(existing.isPresent()) {
|
if(existing.isPresent()) {
|
||||||
AFeatureFlag flag = existing.get();
|
AFeatureFlag flag = existing.get();
|
||||||
flag.setEnabled(newValue);
|
flag.setEnabled(newValue);
|
||||||
repository.save(flag);
|
repository.save(flag);
|
||||||
} else {
|
|
||||||
createFeatureFlag(key, serverId, newValue);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
Feature ${featureName} not available. The available features are: ${availableFeatures?join(", ")}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,4 +2,6 @@ package dev.sheldan.abstracto.core.service;
|
|||||||
|
|
||||||
public interface FeatureFlagService {
|
public interface FeatureFlagService {
|
||||||
boolean isFeatureEnabled(String name, Long serverId);
|
boolean isFeatureEnabled(String name, Long serverId);
|
||||||
|
void enableFeature(String name, Long serverId);
|
||||||
|
void disableFeature(String name, Long serverId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,6 @@ public interface FeatureFlagManagementService {
|
|||||||
void createFeatureFlag(String key, Long serverId, Boolean newValue);
|
void createFeatureFlag(String key, Long serverId, Boolean newValue);
|
||||||
void createFeatureFlag(String key, AServer server, Boolean newValue);
|
void createFeatureFlag(String key, AServer server, Boolean newValue);
|
||||||
boolean getFeatureFlagValue(String key, Long serverId);
|
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);
|
Optional<AFeatureFlag> getFeatureFlag(String key, Long serverId);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user