mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-03-27 14:23:56 +00:00
[AB-190] migrating default config (featureMode, system config, post targets, feature flags) from tables to property files
not longer immediately instantiating the feature flag instance when a new server is found, but only when its config is changed or when a feature mod has its config changed
This commit is contained in:
@@ -1,55 +0,0 @@
|
||||
package dev.sheldan.abstracto.core.models.database;
|
||||
|
||||
import lombok.*;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
import java.time.Instant;
|
||||
|
||||
@Entity
|
||||
@Table(name="default_config")
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Getter
|
||||
@EqualsAndHashCode
|
||||
@Cacheable
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class ADefaultConfig implements Serializable {
|
||||
@javax.persistence.Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Integer id;
|
||||
|
||||
@Column
|
||||
private String name;
|
||||
|
||||
@Column(name = "string_value")
|
||||
@Setter
|
||||
private String stringValue;
|
||||
|
||||
@Column(name = "double_value")
|
||||
@Setter
|
||||
private Double doubleValue;
|
||||
|
||||
@Column(name = "long_value")
|
||||
@Setter
|
||||
private Long longValue;
|
||||
|
||||
@Column(name = "created")
|
||||
private Instant created;
|
||||
|
||||
@Column(name = "updated")
|
||||
private Instant updated;
|
||||
|
||||
public String getValueAsString() {
|
||||
if(getLongValue() != null) {
|
||||
return getLongValue().toString();
|
||||
} else if(getDoubleValue() != null) {
|
||||
return getDoubleValue().toString();
|
||||
} else if(getStringValue() != null) {
|
||||
return getStringValue();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -27,9 +27,8 @@ public class AFeatureMode implements Serializable {
|
||||
@JoinColumn(name = "feature_flag_id", nullable = false)
|
||||
private AFeatureFlag featureFlag;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "feature_mode_id", nullable = false)
|
||||
private DefaultFeatureMode featureMode;
|
||||
@Column(name = "feature_mode")
|
||||
private String featureMode;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "server_id", nullable = false)
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
package dev.sheldan.abstracto.core.models.database;
|
||||
|
||||
import lombok.*;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
import java.time.Instant;
|
||||
|
||||
@Entity
|
||||
@Table(name="default_feature_flag")
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode
|
||||
@Cacheable
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class DefaultFeatureFlag implements Serializable {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Getter
|
||||
@Column(name = "id")
|
||||
public Long id;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@OneToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "feature_id", nullable = false)
|
||||
private AFeature feature;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(name = "enabled")
|
||||
private boolean enabled;
|
||||
|
||||
@Column(name = "created")
|
||||
private Instant created;
|
||||
|
||||
@Column(name = "updated")
|
||||
private Instant updated;
|
||||
|
||||
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
package dev.sheldan.abstracto.core.models.database;
|
||||
|
||||
import lombok.*;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
@Table(name="default_feature_mode")
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode
|
||||
@Cacheable
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class DefaultFeatureMode implements Serializable {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Getter
|
||||
@Column(name = "id")
|
||||
public Long id;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@OneToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "feature_id", nullable = false)
|
||||
private AFeature feature;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@OneToMany(fetch = FetchType.LAZY, mappedBy = "featureMode")
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private List<AFeatureMode> modes;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(name = "enabled")
|
||||
private boolean enabled;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(name = "mode")
|
||||
private String mode;
|
||||
|
||||
@Column(name = "created")
|
||||
private Instant created;
|
||||
|
||||
@Column(name = "updated")
|
||||
private Instant updated;
|
||||
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
package dev.sheldan.abstracto.core.models.database;
|
||||
|
||||
import lombok.*;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
import java.time.Instant;
|
||||
|
||||
@Entity
|
||||
@Table(name="default_posttarget")
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode
|
||||
@Cacheable
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class DefaultPostTarget implements Serializable {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Getter
|
||||
@Column(name = "id")
|
||||
private Long id;
|
||||
|
||||
@Getter
|
||||
@Column(name = "name")
|
||||
private String name;
|
||||
|
||||
@Column(name = "created")
|
||||
private Instant created;
|
||||
|
||||
@Column(name = "updated")
|
||||
private Instant updated;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package dev.sheldan.abstracto.core.models.property;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class FeatureFlagProperty {
|
||||
private String featureName;
|
||||
private Boolean enabled;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package dev.sheldan.abstracto.core.models.property;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class FeatureModeProperty {
|
||||
private String featureName;
|
||||
private String mode;
|
||||
private Boolean enabled;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package dev.sheldan.abstracto.core.models.property;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PostTargetProperty {
|
||||
private String name;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package dev.sheldan.abstracto.core.models.property;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class SystemConfigProperty {
|
||||
private String name;
|
||||
private Long longValue;
|
||||
private String stringValue;
|
||||
private Double doubleValue;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package dev.sheldan.abstracto.core.models.template.commands;
|
||||
|
||||
import dev.sheldan.abstracto.core.config.FeatureConfig;
|
||||
import dev.sheldan.abstracto.core.models.property.FeatureFlagProperty;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class DefaultFeatureFlagDisplay {
|
||||
private FeatureFlagProperty featureFlagProperty;
|
||||
private FeatureConfig featureConfig;
|
||||
}
|
||||
@@ -12,4 +12,5 @@ import java.util.List;
|
||||
@Setter
|
||||
public class FeaturesModel extends UserInitiatedServerContext {
|
||||
private List<FeatureFlagDisplay> features;
|
||||
private List<DefaultFeatureFlagDisplay> defaultFeatures;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package dev.sheldan.abstracto.core.models.template.commands;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.ADefaultConfig;
|
||||
import dev.sheldan.abstracto.core.models.property.SystemConfigProperty;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@@ -10,5 +10,5 @@ import lombok.Setter;
|
||||
@Builder
|
||||
public class SetupSystemConfigMessageModel {
|
||||
private String configKey;
|
||||
private ADefaultConfig defaultConfig;
|
||||
private SystemConfigProperty defaultConfig;
|
||||
}
|
||||
|
||||
@@ -12,6 +12,8 @@ public interface FeatureFlagService {
|
||||
void enableFeature(FeatureConfig name, AServer server);
|
||||
void disableFeature(FeatureConfig name, Long serverId);
|
||||
void disableFeature(FeatureConfig name, AServer server);
|
||||
AFeatureFlag createInstanceFromDefaultConfig(FeatureEnum name, Long serverId);
|
||||
AFeatureFlag createInstanceFromDefaultConfig(FeatureEnum name, AServer server);
|
||||
boolean getFeatureFlagValue(FeatureEnum key, Long serverId);
|
||||
boolean getFeatureFlagValue(FeatureEnum key, AServer server);
|
||||
AFeatureFlag updateFeatureFlag(FeatureEnum key, Long serverId, Boolean newValue);
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
package dev.sheldan.abstracto.core.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.ADefaultConfig;
|
||||
import dev.sheldan.abstracto.core.models.property.SystemConfigProperty;
|
||||
|
||||
public interface DefaultConfigManagementService {
|
||||
void createDefaultConfig(String key, String value);
|
||||
void createDefaultConfig(String key, Long value);
|
||||
void createDefaultConfig(String key, Double value);
|
||||
ADefaultConfig getDefaultConfig(String key);
|
||||
SystemConfigProperty getDefaultConfig(String key);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package dev.sheldan.abstracto.core.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.DefaultFeatureFlag;
|
||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||
import dev.sheldan.abstracto.core.models.database.AFeature;
|
||||
import dev.sheldan.abstracto.core.models.property.FeatureFlagProperty;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface DefaultFeatureFlagManagementService {
|
||||
List<String> getDefaultFeatureKeys();
|
||||
List<DefaultFeatureFlag> getAllDefaultFeatureFlags();
|
||||
FeatureFlagProperty getDefaultFeatureFlagProperty(AFeature feature);
|
||||
FeatureFlagProperty getDefaultFeatureFlagProperty(FeatureEnum feature);
|
||||
List<FeatureFlagProperty> getAllDefaultFeatureFlags();
|
||||
}
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package dev.sheldan.abstracto.core.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AFeature;
|
||||
import dev.sheldan.abstracto.core.models.database.DefaultFeatureMode;
|
||||
import dev.sheldan.abstracto.core.models.property.FeatureModeProperty;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface DefaultFeatureModeManagement {
|
||||
List<DefaultFeatureMode> getFeatureModesForFeature(AFeature feature);
|
||||
List<DefaultFeatureMode> getAll();
|
||||
Optional<DefaultFeatureMode> getFeatureModeOptional(AFeature feature, String mode);
|
||||
DefaultFeatureMode getFeatureMode(AFeature feature, String mode);
|
||||
List<FeatureModeProperty> getFeatureModesForFeature(AFeature feature);
|
||||
List<FeatureModeProperty> getAll();
|
||||
Optional<FeatureModeProperty> getFeatureModeOptional(AFeature feature, String mode);
|
||||
FeatureModeProperty getFeatureMode(AFeature feature, String mode);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package dev.sheldan.abstracto.core.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.DefaultPostTarget;
|
||||
import dev.sheldan.abstracto.core.models.property.PostTargetProperty;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface DefaultPostTargetManagementService {
|
||||
List<DefaultPostTarget> getAllDefaultPostTargets();
|
||||
List<PostTargetProperty> getAllDefaultPostTargets();
|
||||
List<String> getDefaultPostTargetKeys();
|
||||
}
|
||||
|
||||
@@ -5,13 +5,16 @@ import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface FeatureFlagManagementService {
|
||||
AFeatureFlag createFeatureFlag(AFeature feature, Long serverId, Boolean newValue);
|
||||
AFeatureFlag createFeatureFlag(AFeature feature, AServer server, Boolean newValue);
|
||||
AFeatureFlag getFeatureFlag(AFeature key, Long serverId);
|
||||
Optional<AFeatureFlag> getFeatureFlag(AFeature feature, Long serverId);
|
||||
Optional<AFeatureFlag> getFeatureFlag(String featureKey, Long serverId);
|
||||
Optional<AFeatureFlag> getFeatureFlag(String featureKey, AServer server);
|
||||
boolean featureFlagExists(AFeature feature, AServer server);
|
||||
AFeatureFlag getFeatureFlag(AFeature key, AServer server);
|
||||
Optional<AFeatureFlag> getFeatureFlag(AFeature feature, AServer server);
|
||||
List<AFeatureFlag> getFeatureFlagsOfServer(AServer server);
|
||||
AFeatureFlag setFeatureFlagValue(AFeature feature, Long serverId, Boolean newValue);
|
||||
AFeatureFlag setFeatureFlagValue(AFeature feature, AServer server, Boolean newValue);
|
||||
|
||||
Reference in New Issue
Block a user