Refactor router status transitions and remove READY state

This commit is contained in:
litoral05
2026-05-05 10:34:26 +01:00
parent 59989ce652
commit 423fd3971c
4 changed files with 36 additions and 8 deletions
@@ -15,7 +15,8 @@ public class Router {
private String serialNumber; private String serialNumber;
private String lanIp; private String lanIp;
private String lanSubnet; private String lanSubnet;
private String status; @Enumerated(EnumType.STRING)
private RouterStatus status;
private LocalDateTime createdAt; private LocalDateTime createdAt;
private LocalDateTime updatedAt; private LocalDateTime updatedAt;
@@ -63,11 +64,11 @@ public class Router {
this.lanSubnet = lanSubnet; this.lanSubnet = lanSubnet;
} }
public String getStatus() { public RouterStatus getStatus() {
return status; return status;
} }
public void setStatus(String status) { public void setStatus(RouterStatus status) {
this.status = status; this.status = status;
} }
@@ -32,7 +32,7 @@ public class RouterService {
router.setSerialNumber(request.getSerialNumber()); router.setSerialNumber(request.getSerialNumber());
router.setLanIp(request.getLanIp()); router.setLanIp(request.getLanIp());
router.setLanSubnet(request.getLanSubnet()); router.setLanSubnet(request.getLanSubnet());
router.setStatus("PENDING"); router.setStatus(RouterStatus.PENDING);
router.setCreatedAt(now); router.setCreatedAt(now);
router.setUpdatedAt(now); router.setUpdatedAt(now);
@@ -47,7 +47,16 @@ public class RouterService {
public Router updateStatus(UUID id, UpdateRouterStatusRequest request) { public Router updateStatus(UUID id, UpdateRouterStatusRequest request) {
Router router = findById(id); Router router = findById(id);
router.setStatus(request.getStatus()); RouterStatus current = router.getStatus();
RouterStatus next = request.getStatus();
if (!isValidTransition(current, next)) {
throw new IllegalArgumentException(
"Invalid status transition: " + current + "" + next
);
}
router.setStatus(next);
router.setUpdatedAt(LocalDateTime.now()); router.setUpdatedAt(LocalDateTime.now());
return repository.save(router); return repository.save(router);
@@ -57,4 +66,13 @@ public class RouterService {
Router router = findById(id); Router router = findById(id);
repository.delete(router); repository.delete(router);
} }
private boolean isValidTransition(RouterStatus current, RouterStatus next) {
return switch (current) {
case PENDING, FAILED -> next == RouterStatus.PROVISIONING;
case PROVISIONING -> next == RouterStatus.PROVISIONED || next == RouterStatus.FAILED;
case PROVISIONED -> next == RouterStatus.REMOVED;
case REMOVED -> false;
};
}
} }
@@ -0,0 +1,9 @@
package com.litoralregas.openvpn.router;
public enum RouterStatus {
PENDING,
PROVISIONING,
PROVISIONED,
FAILED,
REMOVED
}
@@ -5,13 +5,13 @@ import jakarta.validation.constraints.NotBlank;
public class UpdateRouterStatusRequest { public class UpdateRouterStatusRequest {
@NotBlank @NotBlank
private String status; private RouterStatus status;
public String getStatus() { public RouterStatus getStatus() {
return status; return status;
} }
public void setStatus(String status) { public void setStatus(RouterStatus status) {
this.status = status; this.status = status;
} }
} }