[AB-327] adding a third state to the result of a system condition: Ignored, this means that the condition was not evaluated, and is neither true nor false, this is for example used when the feature the condition is about is disabled

adding server ID to has level condition parameters
This commit is contained in:
Sheldan
2021-11-27 22:08:12 +01:00
parent 15fb9d95a8
commit c10296251c
6 changed files with 56 additions and 23 deletions

View File

@@ -4,8 +4,10 @@ import dev.sheldan.abstracto.core.models.ConditionContext;
import dev.sheldan.abstracto.core.models.ConditionContextInstance;
import dev.sheldan.abstracto.core.models.ConditionContextVariable;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
import dev.sheldan.abstracto.core.service.SystemCondition;
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
import dev.sheldan.abstracto.experience.config.ExperienceFeatureDefinition;
import dev.sheldan.abstracto.experience.model.database.AUserExperience;
import dev.sheldan.abstracto.experience.service.management.UserExperienceManagementService;
import lombok.extern.slf4j.Slf4j;
@@ -26,6 +28,7 @@ public class HasLevelCondition implements SystemCondition {
public static final String USER_IN_SERVER_ID_VARIABLE_KEY = "userId";
public static final String LEVEL_VARIABLE = "level";
public static final String SERVER_VARIABLE = "serverId";
public static final String HAS_LEVEL_CONDITION_KEY = "HAS_LEVEL";
@Autowired
@@ -34,11 +37,18 @@ public class HasLevelCondition implements SystemCondition {
@Autowired
private UserInServerManagementService userInServerManagementService;
@Autowired
private FeatureFlagService featureFlagService;
@Override
public boolean checkCondition(ConditionContextInstance conditionContext) {
public Result checkCondition(ConditionContextInstance conditionContext) {
Map<String, Object> parameters = conditionContext.getParameters();
Long userInServerId = (Long) parameters.get(USER_IN_SERVER_ID_VARIABLE_KEY);
Long serverId = (Long) parameters.get(SERVER_VARIABLE);
Integer level = (Integer) parameters.get(LEVEL_VARIABLE);
if(!featureFlagService.getFeatureFlagValue(ExperienceFeatureDefinition.EXPERIENCE, serverId)) {
return Result.IGNORED;
}
Optional<AUserInAServer> userInServerOptional = userInServerManagementService.loadUserOptional(userInServerId);
if(userInServerOptional.isPresent()) {
AUserInAServer userInServer = userInServerOptional.get();
@@ -47,11 +57,11 @@ public class HasLevelCondition implements SystemCondition {
AUserExperience user = userExperienceManagementService.findUserInServer(userInServer);
boolean conditionResult = user.getCurrentLevel() != null && user.getCurrentLevel().getLevel() >= level;
log.info("Condition evaluated to {}", conditionResult);
return conditionResult;
return Result.fromBoolean(conditionResult);
}
log.info("No user in server object was found. Evaluating has level to false.");
return false;
return Result.FAILED;
}
@Override
@@ -71,9 +81,14 @@ public class HasLevelCondition implements SystemCondition {
.name(LEVEL_VARIABLE)
.type(Integer.class)
.build();
ConditionContextVariable serverVariable = ConditionContextVariable
.builder()
.name(SERVER_VARIABLE)
.type(Long.class)
.build();
return ConditionContext
.builder()
.requiredVariables(Arrays.asList(userIdVariable, levelVariable))
.requiredVariables(Arrays.asList(userIdVariable, levelVariable, serverVariable))
.build();
}
}