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 lanIp;
private String lanSubnet;
private String status;
@Enumerated(EnumType.STRING)
private RouterStatus status;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
@@ -63,11 +64,11 @@ public class Router {
this.lanSubnet = lanSubnet;
}
public String getStatus() {
public RouterStatus getStatus() {
return status;
}
public void setStatus(String status) {
public void setStatus(RouterStatus status) {
this.status = status;
}
@@ -32,7 +32,7 @@ public class RouterService {
router.setSerialNumber(request.getSerialNumber());
router.setLanIp(request.getLanIp());
router.setLanSubnet(request.getLanSubnet());
router.setStatus("PENDING");
router.setStatus(RouterStatus.PENDING);
router.setCreatedAt(now);
router.setUpdatedAt(now);
@@ -47,7 +47,16 @@ public class RouterService {
public Router updateStatus(UUID id, UpdateRouterStatusRequest request) {
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());
return repository.save(router);
@@ -57,4 +66,13 @@ public class RouterService {
Router router = findById(id);
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 {
@NotBlank
private String status;
private RouterStatus status;
public String getStatus() {
public RouterStatus getStatus() {
return status;
}
public void setStatus(String status) {
public void setStatus(RouterStatus status) {
this.status = status;
}
}