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 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user