diff --git a/build.gradle b/build.gradle index 80c4608..9d6bfd1 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { } group = 'inc.sdt.controlcentermanagement' -version = '0.0.1' +version = '0.0.2' java { sourceCompatibility = '17' diff --git a/k8s/command/docker-build-push.sh b/k8s/command/docker-build-push.sh index a583e26..643b034 100644 --- a/k8s/command/docker-build-push.sh +++ b/k8s/command/docker-build-push.sh @@ -1,4 +1,4 @@ aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 003960268191.dkr.ecr.ap-northeast-2.amazonaws.com docker build --platform linux/amd64 -t control-center-management ../../ -docker tag control-center-management:latest 003960268191.dkr.ecr.ap-northeast-2.amazonaws.com/sdt-cloud/control-center-management:0.0.1 -docker push 003960268191.dkr.ecr.ap-northeast-2.amazonaws.com/sdt-cloud/control-center-management:0.0.1 \ No newline at end of file +docker tag control-center-management:latest 003960268191.dkr.ecr.ap-northeast-2.amazonaws.com/sdt-cloud/control-center-management:0.0.2 +docker push 003960268191.dkr.ecr.ap-northeast-2.amazonaws.com/sdt-cloud/control-center-management:0.0.2 \ No newline at end of file diff --git a/k8s/istio-setting.yaml b/k8s/istio-setting.yaml index d890628..58f22fc 100644 --- a/k8s/istio-setting.yaml +++ b/k8s/istio-setting.yaml @@ -28,7 +28,7 @@ spec: host: control-center-management.sdt-cloud.svc.cluster.local match: - uri: - prefix: "/chamber" + prefix: "/chambers" corsPolicy: maxAge: 1m allowCredentials: true diff --git a/rest/api.http b/rest/api.http index e57c03d..85324eb 100644 --- a/rest/api.http +++ b/rest/api.http @@ -5,6 +5,8 @@ PATCH http://13.209.39.139:32171/chamber/1/tube/toggle Content-Type: application/json Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb25JZCI6ImQxZGJlYWExLWY5ZTUtNGE4OC1hMWM4LTYzMWQ4NTMyOWJmYyIsInJvbGVzIjpbIlJPTEVfQURNSU5JU1RSQVRPUiJdLCJpZCI6IjcyYTUxZDUwLTYwMDEtNDAwYy04NjNmLWZlOGU2OGE1MGExMCIsInN1YiI6InNhLmphbmdAc2R0LmluYyIsImlhdCI6MTY5NDEzNjg4OCwiZXhwIjoxNjk0MTQwNDg4fQ.likh7Ix7p4Yf2iwankLG71VGrgCDzQzhn9Z7QJK0blg +{"command": "ON"} + //{ // "command" : "OFF", // "assetCode" : "NODEQ-TEST-1", @@ -14,4 +16,14 @@ Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb25JZCI6ImQxZGJlYWExL // ] //} -{"command": "ON"} \ No newline at end of file + +### offset 제어 +#PATCH http://localhost:8087/chambers/1/slots/1/tubes/1 +PATCH http://13.209.39.139:32171/chambers/1/slots/1/tubes/1 +Content-Type: application/json +Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb25JZCI6ImQxZGJlYWExLWY5ZTUtNGE4OC1hMWM4LTYzMWQ4NTMyOWJmYyIsInJvbGVzIjpbIlJPTEVfQURNSU5JU1RSQVRPUiJdLCJpZCI6IjcyYTUxZDUwLTYwMDEtNDAwYy04NjNmLWZlOGU2OGE1MGExMCIsInN1YiI6InNhLmphbmdAc2R0LmluYyIsImlhdCI6MTY5NDE2NTE2NywiZXhwIjoxNjk0MTY4NzY3fQ.bNmcz1I-zGQHZLFS6h6lp0FgI4WwKppNdHEYUp9hiFc + +{ + "voltageOffset" : 1.5, + "ampereOffset": 1.1 +} \ No newline at end of file diff --git a/src/main/java/inc/sdt/controlcentermanagement/application/DefaultTubeService.java b/src/main/java/inc/sdt/controlcentermanagement/application/DefaultTubeService.java index 6c2bd8e..58029fa 100644 --- a/src/main/java/inc/sdt/controlcentermanagement/application/DefaultTubeService.java +++ b/src/main/java/inc/sdt/controlcentermanagement/application/DefaultTubeService.java @@ -37,6 +37,12 @@ class DefaultTubeService implements TubeService { return slotRepositoryDelegate.get(chamberNumber); } + @Override + public Slot get(String chamberNumber, String slotNumber) { + log.info("[get] chamberNumber: {}, slotNumber: {}", chamberNumber, slotNumber); + return slotRepositoryDelegate.get(chamberNumber, slotNumber); + } + @Override public void controlByTubeCode(String authorization, Slot request) { log.info("[controlByTubeCode] request: {}", request); @@ -93,6 +99,41 @@ class DefaultTubeService implements TubeService { })); } + @Override + public void adjustOffset(Slot slot, String code, Tube request) { + log.info("[adjustOffset] slot: {}, tube: {}", slot, request); + + Slot slotData = this.get(slot.getChamberNumber(), slot.getSlotNumber()); + Map tubeMap = new LinkedHashMap<>(); + slotData.getTube().forEach(tube -> tubeMap.put(tube.getCode(), tube)); + Float oldVoltageOffset = null; + Float oldAmpereOffset = null; + for (Tube tube : slotData.getTube()) { + if (tube.getCode().equals(code)) { + oldVoltageOffset = tube.getVoltageOffset(); + oldAmpereOffset = tube.getAmpereOffset(); + } + } + Tube tube = Tube.builder() + .code(code) + .voltageOffset(request.getVoltageOffset() == null ? oldVoltageOffset : request.getVoltageOffset()) + .ampereOffset(request.getAmpereOffset() == null ? oldAmpereOffset : request.getAmpereOffset()) + .build(); + tubeMap.put(code, tube); + + List list = tubeMap.values().stream().toList(); + Slot param = Slot.builder() + .id(slotData.getId()) + .assetCode(slotData.getAssetCode()) + .chamberNumber(slot.getChamberNumber()) + .slotNumber(slot.getSlotNumber()) + .tube(list) + .build(); + + slotRepositoryDelegate.update(param); + } + + private Map tubeOffset() { int offset = 0; Map tubeOffsetMap = new HashMap<>(); diff --git a/src/main/java/inc/sdt/controlcentermanagement/application/SlotRepositoryDelegate.java b/src/main/java/inc/sdt/controlcentermanagement/application/SlotRepositoryDelegate.java index 9f9e443..f27faaf 100644 --- a/src/main/java/inc/sdt/controlcentermanagement/application/SlotRepositoryDelegate.java +++ b/src/main/java/inc/sdt/controlcentermanagement/application/SlotRepositoryDelegate.java @@ -9,4 +9,6 @@ import java.util.List; */ public interface SlotRepositoryDelegate { List get(String chamberNumber); + Slot get(String chamberNumber, String slotNumber); + void update(Slot slot); } diff --git a/src/main/java/inc/sdt/controlcentermanagement/application/TubeService.java b/src/main/java/inc/sdt/controlcentermanagement/application/TubeService.java index a05a0f9..f4d3887 100644 --- a/src/main/java/inc/sdt/controlcentermanagement/application/TubeService.java +++ b/src/main/java/inc/sdt/controlcentermanagement/application/TubeService.java @@ -2,6 +2,7 @@ package inc.sdt.controlcentermanagement.application; import inc.sdt.controlcentermanagement.domain.Command; import inc.sdt.controlcentermanagement.domain.Slot; +import inc.sdt.controlcentermanagement.domain.Tube; import java.util.List; @@ -10,6 +11,8 @@ import java.util.List; */ public interface TubeService { List get(String chamberNumber); + Slot get(String chamberNumber, String slotNumber); void controlByTubeCode(String authorization, Slot request); void controlAll(String authorization, List slots, Command command); + void adjustOffset(Slot slot, String code, Tube tube); } diff --git a/src/main/java/inc/sdt/controlcentermanagement/domain/Tube.java b/src/main/java/inc/sdt/controlcentermanagement/domain/Tube.java index 7edf063..7390238 100644 --- a/src/main/java/inc/sdt/controlcentermanagement/domain/Tube.java +++ b/src/main/java/inc/sdt/controlcentermanagement/domain/Tube.java @@ -36,4 +36,36 @@ public class Tube { ", ampereOffset=" + ampereOffset + '}'; } + + public static Builder builder() { + return new Builder(); + } + + public static final class Builder { + private String code; + private Float voltageOffset; + private Float ampereOffset; + + private Builder() { + } + + public Builder code(String code) { + this.code = code; + return this; + } + + public Builder voltageOffset(Float voltageOffset) { + this.voltageOffset = voltageOffset; + return this; + } + + public Builder ampereOffset(Float ampereOffset) { + this.ampereOffset = ampereOffset; + return this; + } + + public Tube build() { + return new Tube(code, voltageOffset, ampereOffset); + } + } } diff --git a/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/SlotDocument.java b/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/SlotDocument.java index 21d4fda..f6d6fea 100644 --- a/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/SlotDocument.java +++ b/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/SlotDocument.java @@ -55,4 +55,48 @@ public class SlotDocument { ", chamberNumber='" + chamberNumber + '\'' + '}'; } + + public static Builder builder() { + return new Builder(); + } + + public static final class Builder { + private String id; + private String slotNumber; + private String assetCode; + private List tube; + private String chamberNumber; + + private Builder() { + } + + public Builder id(String id) { + this.id = id; + return this; + } + + public Builder slotNumber(String slotNumber) { + this.slotNumber = slotNumber; + return this; + } + + public Builder assetCode(String assetCode) { + this.assetCode = assetCode; + return this; + } + + public Builder tube(List tube) { + this.tube = tube; + return this; + } + + public Builder chamberNumber(String chamberNumber) { + this.chamberNumber = chamberNumber; + return this; + } + + public SlotDocument build() { + return new SlotDocument(id, slotNumber, assetCode, tube, chamberNumber); + } + } } diff --git a/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/SlotNoSQLRepository.java b/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/SlotNoSQLRepository.java index 5bb78d2..fdabb95 100644 --- a/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/SlotNoSQLRepository.java +++ b/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/SlotNoSQLRepository.java @@ -32,6 +32,20 @@ public class SlotNoSQLRepository implements SlotRepositoryDelegate { .toList(); } + @Override + public Slot get(String chamberNumber, String slotNumber) { + log.debug("[get] chamberNumber: {}, slotNumber: {}", chamberNumber, slotNumber); + SlotDocument slotDocument = slotRepository.findByChamberNumberAndSlotNumber(chamberNumber, slotNumber); + return this.to(slotDocument); + } + + @Override + public void update(Slot slot) { + log.info("[update] slot: {}", slot); + SlotDocument slotDocument = this.from(slot); + slotRepository.save(slotDocument); + } + private Slot to(SlotDocument slotDocument) { return Slot.builder() .id(slotDocument.getId()) @@ -44,4 +58,17 @@ public class SlotNoSQLRepository implements SlotRepositoryDelegate { .toList()) .build(); } + + private SlotDocument from(Slot slot) { + return SlotDocument.builder() + .id(slot.getId()) + .slotNumber(slot.getSlotNumber()) + .assetCode(slot.getAssetCode()) + .chamberNumber(slot.getChamberNumber()) + .tube(slot.getTube() + .stream() + .map(tube -> new TubeDocument(tube.getCode(), tube.getVoltageOffset(), tube.getAmpereOffset())) + .toList()) + .build(); + } } diff --git a/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/SlotRepository.java b/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/SlotRepository.java index c7e6b69..eb78389 100644 --- a/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/SlotRepository.java +++ b/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/SlotRepository.java @@ -9,4 +9,5 @@ import java.util.List; */ public interface SlotRepository extends MongoRepository { List findAllByChamberNumber(String chamberNumber); + SlotDocument findByChamberNumberAndSlotNumber(String chamberNumber, String slotNumber); } diff --git a/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/TubeDocument.java b/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/TubeDocument.java index 6083313..a02f863 100644 --- a/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/TubeDocument.java +++ b/src/main/java/inc/sdt/controlcentermanagement/infrastructure/nosql/TubeDocument.java @@ -34,4 +34,36 @@ public class TubeDocument { ", ampereOffset=" + ampereOffset + '}'; } + + public static Builder builder() { + return new Builder(); + } + + public static final class Builder { + private String code; + private Float voltageOffset; + private Float ampereOffset; + + private Builder() { + } + + public Builder code(String code) { + this.code = code; + return this; + } + + public Builder voltageOffset(Float voltageOffset) { + this.voltageOffset = voltageOffset; + return this; + } + + public Builder ampereOffset(Float ampereOffset) { + this.ampereOffset = ampereOffset; + return this; + } + + public TubeDocument build() { + return new TubeDocument(code, voltageOffset, ampereOffset); + } + } } diff --git a/src/main/java/inc/sdt/controlcentermanagement/presentation/TubeController.java b/src/main/java/inc/sdt/controlcentermanagement/presentation/TubeController.java index a58f5fe..2f2eab0 100644 --- a/src/main/java/inc/sdt/controlcentermanagement/presentation/TubeController.java +++ b/src/main/java/inc/sdt/controlcentermanagement/presentation/TubeController.java @@ -2,6 +2,7 @@ package inc.sdt.controlcentermanagement.presentation; import inc.sdt.controlcentermanagement.application.TubeService; import inc.sdt.controlcentermanagement.domain.Slot; +import inc.sdt.controlcentermanagement.domain.Tube; import inc.sdt.controlcentermanagement.infrastructure.amqp.ResourceMapping; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,9 +25,9 @@ public class TubeController { this.log = LoggerFactory.getLogger(TubeController.class); } - @ResourceMapping(name = "Tube_Control", method = "PATCH", uri = "/chamber/{chamberNumber}/tube/toggle", description = "Tube On/Off 제어") + @ResourceMapping(name = "Tube_Control", method = "PATCH", uri = "/chambers/{chamberNumber}/tube/toggle", description = "Tube On/Off 제어") @ResponseStatus(HttpStatus.OK) - @PatchMapping("/chamber/{chamberNumber}/tube/toggle") + @PatchMapping("/chambers/{chamberNumber}/tube/toggle") public void toggle(@RequestHeader("Authorization") String authorization, @PathVariable String chamberNumber, @RequestBody Slot slot) { log.info("[toggle] chamberNumber: {}, slot: {}", chamberNumber, slot); List slots = tubeService.get(chamberNumber); @@ -38,4 +39,16 @@ public class TubeController { tubeService.controlAll(authorization, slots, slot.getCommand()); } } + + @ResourceMapping(name = "Tube_Offset_Control", method = "PATCH", uri = "/chambers/{chamberNumber}/slots/{slotNumber}/tubes/{code}", description = "Tube offset 설정") + @ResponseStatus(HttpStatus.OK) + @PatchMapping("/chambers/{chamberNumber}/slots/{slotNumber}/tubes/{code}") + public void adjustOffset(@PathVariable String chamberNumber, @PathVariable String slotNumber, @PathVariable String code, @RequestBody Tube tube) { + log.info("[adjustOffset] chamber: {}, slot: {}, tubeCode: {}, offset: {}", chamberNumber, slotNumber, code, tube); + Slot slot = Slot.builder() + .chamberNumber(chamberNumber) + .slotNumber(slotNumber) + .build(); + tubeService.adjustOffset(slot, code, tube); + } }