hosting-asset-validation-for-cloud-server-to-webspace #54
@ -60,7 +60,7 @@ public class HsHostingAssetController implements HsHostingAssetsApi {
|
||||
|
||||
final var entityToSave = mapper.map(body, HsHostingAssetEntity.class, RESOURCE_TO_ENTITY_POSTMAPPER);
|
||||
|
||||
final var saved = assetRepo.save(entityToSave);
|
||||
final var saved = assetRepo.save(valid(entityToSave));
|
||||
|
||||
final var uri =
|
||||
MvcUriComponentsBuilder.fromController(getClass())
|
||||
@ -71,6 +71,11 @@ public class HsHostingAssetController implements HsHostingAssetsApi {
|
||||
return ResponseEntity.created(uri).body(mapped);
|
||||
}
|
||||
|
||||
private HsHostingAssetEntity valid(final HsHostingAssetEntity entityToSave) {
|
||||
HsHostingAssetValidator.forType(entityToSave.getType()).validate(entityToSave);
|
||||
return entityToSave;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public ResponseEntity<HsHostingAssetResource> getAssetByUuid(
|
||||
|
@ -0,0 +1,95 @@
|
||||
package net.hostsharing.hsadminng.hs.hosting.asset;
|
||||
|
||||
import lombok.With;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
class Validator {
|
||||
}
|
||||
|
||||
@SuperBuilder
|
||||
class PropertyValidator extends Validator {
|
||||
String propertyName;
|
||||
}
|
||||
|
||||
@SuperBuilder
|
||||
class NumericPropertyValidator extends PropertyValidator {
|
||||
|
||||
private String unit;
|
||||
private Integer min;
|
||||
private Integer max;
|
||||
private Integer step;
|
||||
|
||||
static NumericPropertyValidatorBuilder numericProperty(final String propertyName) {
|
||||
return NumericPropertyValidator.builder().propertyName(propertyName);
|
||||
}
|
||||
}
|
||||
|
||||
@With
|
||||
@SuperBuilder
|
||||
class EnumPropertyValidator extends PropertyValidator {
|
||||
|
||||
private String[] values;
|
||||
|
||||
static EnumPropertyValidatorBuilderExtension enumProperty(final String propertyName) {
|
||||
return new EnumPropertyValidatorBuilderExtension(propertyName);
|
||||
}
|
||||
static class EnumPropertyValidatorBuilderExtension extends ValidatorBuilder<EnumPropertyValidator, EnumPropertyValidatorBuilderExtension> {
|
||||
|
||||
private final String propertyName;
|
||||
private String[] values;
|
||||
|
||||
EnumPropertyValidatorBuilderExtension(final String propertyName) {
|
||||
this.propertyName = propertyName;
|
||||
}
|
||||
|
||||
|
||||
public EnumPropertyValidatorBuilderExtension values(final String... values) {
|
||||
this.values = values;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected EnumPropertyValidatorBuilderExtension self() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumPropertyValidator build() {
|
||||
return EnumPropertyValidator.builder().propertyName(propertyName).values(values).build();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuperBuilder
|
||||
class BooleanPropertyValidator extends PropertyValidator {
|
||||
|
||||
private Map.Entry<String, String> falseIf;
|
||||
static BooleanPropertyValidatorBuilderExtension booleanProperty(final String propertyName) {
|
||||
return new BooleanPropertyValidatorBuilderExtension(propertyName);
|
||||
}
|
||||
|
||||
static class BooleanPropertyValidatorBuilderExtension extends PropertyValidatorBuilder<BooleanPropertyValidator, BooleanPropertyValidatorBuilderExtension> {
|
||||
|
||||
|
||||
BooleanPropertyValidatorBuilderExtension(final String propertyName) {
|
||||
super.propertyName(propertyName);
|
||||
}
|
||||
|
||||
|
||||
BooleanPropertyValidatorBuilderExtension falseIf(final String propertyName, final String propertyValue) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BooleanPropertyValidatorBuilderExtension self() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanPropertyValidator build() {
|
||||
return new BooleanPropertyValidator()
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package net.hostsharing.hsadminng.hs.hosting.asset;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import static java.util.Map.entry;
|
||||
import static net.hostsharing.hsadminng.hs.hosting.asset.BooleanPropertyValidator.booleanProperty;
|
||||
import static net.hostsharing.hsadminng.hs.hosting.asset.EnumPropertyValidator.enumProperty;
|
||||
import static net.hostsharing.hsadminng.hs.hosting.asset.NumericPropertyValidator.numericProperty;
|
||||
|
||||
public class HsHostingAssetValidator {
|
||||
|
||||
private static final Map<HsHostingAssetType, HsHostingAssetValidator> validators = Map.ofEntries(
|
||||
entry(HsHostingAssetType.CLOUD_SERVER, new HsHostingAssetValidator(
|
||||
numericProperty("CPUs").min(1).max(32).build(),
|
||||
numericProperty("RAM").unit("GB").min(1).max(128).build(),
|
||||
numericProperty("SSD").unit("GB").min(25).max(1000).step(25).build(),
|
||||
numericProperty("HDD").unit("GB").min(0).max(4000).step(250).build(),
|
||||
numericProperty("Traffic").unit("GB").min(250).max(10000).step(250).build(),
|
||||
enumProperty("SLA-Infrastructure").values("BASIC", "EXT8H", "EXT4H", "EXT2H").build())),
|
||||
entry(HsHostingAssetType.MANAGED_SERVER, new HsHostingAssetValidator(
|
||||
numericProperty("CPUs").min(1).max(32).build(),
|
||||
numericProperty("RAM").unit("GB").min(1).max(128).build(),
|
||||
numericProperty("SSD").unit("GB").min(25).max(1000).step(25).build(),
|
||||
numericProperty("HDD").unit("GB").min(0).max(4000).step(250).build(),
|
||||
numericProperty("Traffic").unit("GB").min(250).max(10000).step(250).build(),
|
||||
enumProperty("SLA-Platform").values("BASIC", "EXT8H", "EXT4H", "EXT2H").build(),
|
||||
booleanProperty("SLA-EMail").falseIf("SLA-Platform", "BASIC").build(),
|
||||
booleanProperty("SLA-Maria").falseIf("SLA-Platform", "BASIC").build(),
|
||||
booleanProperty("SLA-PgSQL").falseIf("SLA-Platform", "BASIC").build(),
|
||||
booleanProperty("SLA-Office").falseIf("SLA-Platform", "BASIC").build(),
|
||||
booleanProperty("SLA-Web").falseIf("SLA-Platform", "BASIC").build())),
|
||||
entry(HsHostingAssetType.MANAGED_WEBSPACE, new HsHostingAssetValidator(
|
||||
numericProperty("SSD").unit("GB").min(1).max(100).step(1).build(),
|
||||
numericProperty("HDD").unit("GB").min(0).max(250).step(10).build(),
|
||||
numericProperty("Traffic").unit("GB").min(10).max(1000).step(10).build(),
|
||||
enumProperty("SLA-Platform").values("BASIC", "EXT24H").build(),
|
||||
numericProperty("Daemons").min(0).max(10).build(),
|
||||
booleanProperty("Online Office Server").build())
|
||||
));
|
||||
|
||||
public static HsHostingAssetValidator forType(final HsHostingAssetType type) {
|
||||
return validators.get(type);
|
||||
}
|
||||
|
||||
HsHostingAssetValidator(final Validator... validators) {
|
||||
|
||||
}
|
||||
|
||||
public void validate(final HsHostingAssetEntity entityToSave) {
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user