Refactor router status transitions and remove READY state
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user