diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/application/DefaultDeployerService.java b/src/main/java/inc/sdt/blokworks/devicedeployer/application/DefaultDeployerService.java index c0b73e1..b98998b 100644 --- a/src/main/java/inc/sdt/blokworks/devicedeployer/application/DefaultDeployerService.java +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/application/DefaultDeployerService.java @@ -3,7 +3,7 @@ package inc.sdt.blokworks.devicedeployer.application; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import inc.sdt.blokworks.devicedeployer.domain.AssetApp; -import inc.sdt.blokworks.devicedeployer.domain.DeployMessage; +import inc.sdt.blokworks.devicedeployer.domain.OutboundMessage; import inc.sdt.blokworks.devicedeployer.domain.OperationType; import inc.sdt.blokworks.devicedeployer.infrastructure.mqtt.InboundDeployMessagePayload; import inc.sdt.blokworks.devicedeployer.infrastructure.mqtt.OutboundMessagePayload; @@ -12,6 +12,7 @@ import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import reactor.core.publisher.Mono; @@ -32,15 +33,14 @@ public class DefaultDeployerService implements DeployerService{ } @Override - public void publish(DeployMessage deployMessage, String assetCode) { + public void publish(OutboundMessage deployMessage, String assetCode) { log.info("[publish]"); try { OutboundMessagePayload payload = new OutboundMessagePayload( deployMessage.getUrl(), deployMessage.getName(), - deployMessage.getPorts(), - deployMessage.getEnv(), deployMessage.getCommand(), + deployMessage.getEnv(), OperationType.DEPLOY, deployMessage.getRequestId() ); @@ -59,10 +59,18 @@ public class DefaultDeployerService implements DeployerService{ public Mono apply(InboundDeployMessagePayload inboundDeployMessagePayload) { log.info("[apply] inboundDeployMessagePayload = {}", inboundDeployMessagePayload); // 배포된 앱 정보 저장 - deployerRepositoryDelegate.save(fromMessage(inboundDeployMessagePayload)); + // request Id 판별 + + AssetApp assetApp = deployerRepositoryDelegate.save(fromMessage(inboundDeployMessagePayload)); return null; } + @Override + public Page getAll(String assetCode, int page, int size) { + log.debug("[getAll] assetCode = {}, page = {}, size = {}", assetCode, page, size); + return deployerRepositoryDelegate.findAllByAssetCode(assetCode, page, size); + } + private AssetApp fromMessage(InboundDeployMessagePayload payload) { return AssetApp.builder() .assetCode(payload.assetCode()) diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerRepositoryDelegate.java b/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerRepositoryDelegate.java index 79eeaff..51eb118 100644 --- a/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerRepositoryDelegate.java +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerRepositoryDelegate.java @@ -1,8 +1,9 @@ package inc.sdt.blokworks.devicedeployer.application; import inc.sdt.blokworks.devicedeployer.domain.AssetApp; -import inc.sdt.blokworks.devicedeployer.domain.DeployMessage; +import org.springframework.data.domain.Page; public interface DeployerRepositoryDelegate { AssetApp save(AssetApp assetApp); + Page findAllByAssetCode(String assetCode, int page, int size); } diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerService.java b/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerService.java index e635b19..083f550 100644 --- a/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerService.java +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerService.java @@ -1,11 +1,14 @@ package inc.sdt.blokworks.devicedeployer.application; -import inc.sdt.blokworks.devicedeployer.domain.DeployMessage; +import inc.sdt.blokworks.devicedeployer.domain.AssetApp; +import inc.sdt.blokworks.devicedeployer.domain.OutboundMessage; import inc.sdt.blokworks.devicedeployer.infrastructure.mqtt.InboundDeployMessagePayload; +import org.springframework.data.domain.Page; import reactor.core.publisher.Mono; import java.util.function.Function; public interface DeployerService extends Function> { - void publish(DeployMessage assetApp, String assetCode); + void publish(OutboundMessage assetApp, String assetCode); + Page getAll(String assetCode, int page, int size); } diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/domain/AssetApp.java b/src/main/java/inc/sdt/blokworks/devicedeployer/domain/AssetApp.java index a7a8ac8..cdbdf40 100644 --- a/src/main/java/inc/sdt/blokworks/devicedeployer/domain/AssetApp.java +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/domain/AssetApp.java @@ -1,7 +1,5 @@ package inc.sdt.blokworks.devicedeployer.domain; -import java.sql.Timestamp; - public class AssetApp { private String assetCode; private String name; diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/domain/DeployMessage.java b/src/main/java/inc/sdt/blokworks/devicedeployer/domain/OutboundMessage.java similarity index 84% rename from src/main/java/inc/sdt/blokworks/devicedeployer/domain/DeployMessage.java rename to src/main/java/inc/sdt/blokworks/devicedeployer/domain/OutboundMessage.java index 9b72d08..113ec55 100644 --- a/src/main/java/inc/sdt/blokworks/devicedeployer/domain/DeployMessage.java +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/domain/OutboundMessage.java @@ -3,16 +3,15 @@ package inc.sdt.blokworks.devicedeployer.domain; import java.util.HashMap; import java.util.Set; -public class DeployMessage { +public class OutboundMessage { private String url; private String name; - private Set ports; private HashMap env; private String command; private OperationType operationType; private String requestId; - protected DeployMessage() {} + protected OutboundMessage() {} public String getUrl() { return url; @@ -22,10 +21,6 @@ public class DeployMessage { return name; } - public Set getPorts() { - return ports; - } - public HashMap getEnv() { return env; } @@ -51,7 +46,6 @@ public class DeployMessage { return "AssetApp{" + "url='" + url + '\'' + ", name='" + name + '\'' + - ", ports=" + ports + ", env=" + env + ", command='" + command + '\'' + ", operationType=" + operationType + @@ -66,7 +60,6 @@ public class DeployMessage { public static final class Builder { private String url; private String name; - private Set ports; private HashMap env; private String command; private OperationType operationType; @@ -82,11 +75,6 @@ public class DeployMessage { return this; } - public Builder ports(Set ports) { - this.ports = ports; - return this; - } - public Builder env(HashMap env) { this.env = env; return this; @@ -107,11 +95,10 @@ public class DeployMessage { return this; } - public DeployMessage build() { - DeployMessage deployMessage = new DeployMessage(); + public OutboundMessage build() { + OutboundMessage deployMessage = new OutboundMessage(); deployMessage.url = this.url; deployMessage.name = this.name; - deployMessage.ports = this.ports; deployMessage.env = this.env; deployMessage.command = this.command; deployMessage.operationType = this.operationType; diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/InboundDeployMessagePayload.java b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/InboundDeployMessagePayload.java index 6fdf3b8..c01bdd5 100644 --- a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/InboundDeployMessagePayload.java +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/InboundDeployMessagePayload.java @@ -8,6 +8,7 @@ public record InboundDeployMessagePayload( String name, Long size, Long releasedAt, - Long modifiedAt + Long modifiedAt, + String requestId ) { } diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/OutboundMessagePayload.java b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/OutboundMessagePayload.java index 0e971a6..0be144e 100644 --- a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/OutboundMessagePayload.java +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/OutboundMessagePayload.java @@ -11,9 +11,8 @@ import java.util.Set; public record OutboundMessagePayload( String url, String name, - Set ports, - HashMap env, String command, + HashMap env, OperationType operationType, String requestId ) { diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppEntity.java b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppEntity.java index 60f6fd4..06f944a 100644 --- a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppEntity.java +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppEntity.java @@ -23,8 +23,7 @@ class AssetAppEntity { protected AssetAppEntity() {} - public AssetAppEntity(String id, String assetCode, String name, long size, Long releasedAt, Long modifiedAt) { - this.id = id; + public AssetAppEntity(String assetCode, String name, long size, Long releasedAt, Long modifiedAt) { this.assetCode = assetCode; this.name = name; this.size = size; diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppJpaRepository.java b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppJpaRepository.java index 6dbecc7..cf12018 100644 --- a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppJpaRepository.java +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppJpaRepository.java @@ -1,7 +1,9 @@ package inc.sdt.blokworks.devicedeployer.infrastructure.relational; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; public interface AssetAppJpaRepository extends JpaRepository { - + Page findAllByAssetCode(String assetCode, Pageable pageable); } diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppRelationalRepository.java b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppRelationalRepository.java index e3afce1..7e8bfcd 100644 --- a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppRelationalRepository.java +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppRelationalRepository.java @@ -2,9 +2,12 @@ package inc.sdt.blokworks.devicedeployer.infrastructure.relational; import inc.sdt.blokworks.devicedeployer.application.DeployerRepositoryDelegate; import inc.sdt.blokworks.devicedeployer.domain.AssetApp; -import inc.sdt.blokworks.devicedeployer.domain.DeployMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Component; @Component @@ -17,10 +20,40 @@ public class AssetAppRelationalRepository implements DeployerRepositoryDelegate this.assetAppJpaRepository = assetAppJpaRepository; } + // 앱 정보 저장 @Override - public AssetApp save(AssetApp deployMessage) { + public AssetApp save(AssetApp assetApp) { + AssetAppEntity entity = this.toEntity(assetApp); + assetAppJpaRepository.save(entity); + return assetApp; + } - return null; + @Override + public Page findAllByAssetCode(String assetCode, int page, int size) { + log.debug("[findAllByAssetCode] assetCode = {}", assetCode); + Pageable pageable = page < 0 ? Pageable.unpaged() : PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "releasedAt")); + return assetAppJpaRepository.findAllByAssetCode(assetCode, pageable) + .map(this::fromEntity); + } + + private AssetAppEntity toEntity(AssetApp assetApp) { + return new AssetAppEntity( + assetApp.getAssetCode(), + assetApp.getName(), + assetApp.getSize(), + assetApp.getReleaseAt(), + assetApp.getModifiedAt() + ); + } + + private AssetApp fromEntity(AssetAppEntity entity) { + return AssetApp.builder() + .assetCode(entity.getAssetCode()) + .name(entity.getName()) + .size(entity.getSize()) + .releasedAt(entity.getReleasedAt()) + .modifiedAt(entity.getModifiedAt()) + .build(); } } diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResource.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResource.java index 3176add..360757e 100644 --- a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResource.java +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResource.java @@ -1,18 +1,10 @@ package inc.sdt.blokworks.devicedeployer.presentation; -import org.wildfly.common.annotation.NotNull; - -import java.util.HashMap; -import java.util.Set; - record AssetAppResource( - @NotNull - String url, - @NotNull + String assetCode, String name, - Set ports, - HashMap env, - String command + Long size, + Long releaseAt, + Long modifiedAt ) { - } diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResourceConverter.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResourceConverter.java index 47f271a..de0d664 100644 --- a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResourceConverter.java +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResourceConverter.java @@ -1,41 +1,28 @@ package inc.sdt.blokworks.devicedeployer.presentation; -import inc.sdt.blokworks.devicedeployer.domain.DeployMessage; +import inc.sdt.blokworks.devicedeployer.domain.AssetApp; import org.springframework.stereotype.Component; -import java.util.HashSet; -import java.util.stream.Collectors; - @Component public class AssetAppResourceConverter { - private final PortResourceConverter portResourceConverter; - public AssetAppResourceConverter(PortResourceConverter portResourceConverter) { - this.portResourceConverter = portResourceConverter; + public AssetApp fromResource(AssetAppResource resource) { + return AssetApp.builder() + .assetCode(resource.assetCode()) + .name(resource.name()) + .size(resource.size()) + .releasedAt(resource.releaseAt()) + .modifiedAt(resource.modifiedAt()) + .build(); } - public AssetAppResource toResource(DeployMessage deployMessage) { + public AssetAppResource toResource(AssetApp assetApp) { return new AssetAppResource( - deployMessage.getUrl(), - deployMessage.getName(), - deployMessage.getPorts() != null - ? deployMessage.getPorts().stream().map(portResourceConverter::toResource).collect(Collectors.toSet()) - : null, - deployMessage.getEnv(), - deployMessage.getCommand() + assetApp.getAssetCode(), + assetApp.getName(), + assetApp.getSize(), + assetApp.getReleaseAt(), + assetApp.getModifiedAt() ); } - - public DeployMessage fromResource(AssetAppResource resource) { - return DeployMessage.builder() - .url(resource.url()) - .name(resource.name()) - .ports(resource.ports() != null - ? resource.ports().stream().map(portResourceConverter::fromResource).collect(Collectors.toSet()) - : new HashSet<>()) - .env(resource.env()) - .command(resource.command()) - .build(); - - } } diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/DeployerController.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/DeployerController.java index e6b83d1..134b751 100644 --- a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/DeployerController.java +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/DeployerController.java @@ -1,24 +1,33 @@ package inc.sdt.blokworks.devicedeployer.presentation; import inc.sdt.blokworks.devicedeployer.application.DeployerService; -import inc.sdt.blokworks.devicedeployer.domain.DeployMessage; +import inc.sdt.blokworks.devicedeployer.domain.AssetApp; +import inc.sdt.blokworks.devicedeployer.domain.OperationType; +import inc.sdt.blokworks.devicedeployer.domain.OutboundMessage; +import jakarta.servlet.http.HttpSession; import jakarta.validation.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; +import java.util.UUID; + @RestController public class DeployerController { private final Logger log; private final DeployerService deployerService; - private final AssetAppResourceConverter appResourceConverter; + private final OutboundMessageResourceConverter outboundMessageResourceConverter; + private final AssetAppResourceConverter assetAppResourceConverter; public DeployerController(DeployerService deployerService, - AssetAppResourceConverter appResourceConverter) { + OutboundMessageResourceConverter outboundMessageResourceConverter, + AssetAppResourceConverter assetAppResourceConverter) { this.log = LoggerFactory.getLogger(this.getClass()); this.deployerService = deployerService; - this.appResourceConverter = appResourceConverter; + this.outboundMessageResourceConverter = outboundMessageResourceConverter; + this.assetAppResourceConverter = assetAppResourceConverter; } /** @@ -29,20 +38,24 @@ public class DeployerController { @ResponseStatus(HttpStatus.CREATED) @PostMapping("/assets/{assetCode}/apps") public void deploy(@PathVariable String assetCode, - @Valid @RequestBody AssetAppResource assetAppResource) { + @Valid @RequestBody OutboundMessageResource assetAppResource) { log.info("[deploy] assetCode = {}, assetAppResource = {}", assetCode, assetAppResource); - DeployMessage deployMessage = appResourceConverter.fromResource(assetAppResource); - deployMessage.setRequestId("requestId"); - deployerService.publish(appResourceConverter.fromResource(assetAppResource), assetCode); + OutboundMessage outboundMessage = outboundMessageResourceConverter.fromResource(assetAppResource); + outboundMessage.setRequestId("requestId"); + deployerService.publish(outboundMessageResourceConverter.fromResource(assetAppResource), assetCode); } /** - * 배포된 앱 정보 조회 + * 배포된 앱 정보 조회 (페이지 조회) * @param assetCode 자산 코드 */ @ResponseStatus(HttpStatus.OK) @GetMapping("/assets/{assetCode}/apps") - public void get(@PathVariable String assetCode) { - log.info("[get] assetCode = {}", assetCode); + public PageableResponse get(@PathVariable String assetCode, + @RequestParam(required = false, defaultValue = "0") int page, + @RequestParam(required = false, defaultValue = "20") int size) { + log.info("[get] assetCode = {}, page = {}, size = {}", assetCode, page, size); + Page assetApps = deployerService.getAll(assetCode, page, size); + return PageableResponse.from(assetApps, assetAppResourceConverter::toResource); } } diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/MqttMessageHandler.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/MqttMessageHandler.java index 8206914..5b8bd5e 100644 --- a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/MqttMessageHandler.java +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/MqttMessageHandler.java @@ -1,5 +1,6 @@ package inc.sdt.blokworks.devicedeployer.presentation; +import com.fasterxml.jackson.databind.ObjectMapper; import inc.sdt.blokworks.devicedeployer.application.DeployerService; import inc.sdt.blokworks.devicedeployer.application.ProcessService; import inc.sdt.blokworks.devicedeployer.infrastructure.mqtt.InboundDeployMessagePayload; @@ -8,6 +9,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.integration.annotation.MessageEndpoint; import org.springframework.integration.annotation.ServiceActivator; +import org.springframework.integration.mqtt.support.MqttHeaders; import org.springframework.messaging.Message; @MessageEndpoint @@ -15,16 +17,19 @@ public class MqttMessageHandler { private final Logger log; private final DeployerService deployerService; private final ProcessService processService; + private final ObjectMapper objectMapper; private final MqttMessageConverter deployMessagePayloadConverter; private final MqttMessageConverter processMessagePayloadConverter; public MqttMessageHandler(DeployerService deployerService, ProcessService processService, + ObjectMapper objectMapper, MqttMessageConverter deployMessagePayloadConverter, MqttMessageConverter processMessagePayloadConverter) { this.log = LoggerFactory.getLogger(this.getClass()); this.deployerService = deployerService; this.processService = processService; + this.objectMapper = objectMapper; this.deployMessagePayloadConverter = deployMessagePayloadConverter; this.processMessagePayloadConverter = processMessagePayloadConverter; } @@ -34,7 +39,20 @@ public class MqttMessageHandler { log.debug("[handleMessage] message={}", message); if(!message.getPayload().contains("pid")) { + String topic = String.valueOf(message.getHeaders().get(MqttHeaders.RECEIVED_TOPIC)); + String id = topic.split("/")[1]; + + log.info("[handleMessage] topic = {}, id = {}", topic, id); + deployMessagePayloadConverter.convertFromByte(message.getPayload(), InboundDeployMessagePayload.class) + .map(p -> new InboundDeployMessagePayload( + p.status(), + p.assetCode(), + p.name(), + p.size(), + p.releasedAt(), + p.modifiedAt(), + id)) .flatMap(deployerService) .subscribe(); }else { diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/OutboundMessageResource.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/OutboundMessageResource.java new file mode 100644 index 0000000..26418d3 --- /dev/null +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/OutboundMessageResource.java @@ -0,0 +1,16 @@ +package inc.sdt.blokworks.devicedeployer.presentation; + +import org.wildfly.common.annotation.NotNull; + +import java.util.HashMap; + +record OutboundMessageResource( + @NotNull + String url, + @NotNull + String name, + String command, + HashMap env +) { + +} diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/OutboundMessageResourceConverter.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/OutboundMessageResourceConverter.java new file mode 100644 index 0000000..109f661 --- /dev/null +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/OutboundMessageResourceConverter.java @@ -0,0 +1,27 @@ +package inc.sdt.blokworks.devicedeployer.presentation; + +import inc.sdt.blokworks.devicedeployer.domain.OutboundMessage; +import org.springframework.stereotype.Component; + +@Component +public class OutboundMessageResourceConverter { + + public OutboundMessageResource toResource(OutboundMessage outboundMessage) { + return new OutboundMessageResource( + outboundMessage.getUrl(), + outboundMessage.getName(), + outboundMessage.getCommand(), + outboundMessage.getEnv() + ); + } + + public OutboundMessage fromResource(OutboundMessageResource resource) { + return OutboundMessage.builder() + .url(resource.url()) + .name(resource.name()) + .command(resource.command()) + .env(resource.env()) + .build(); + + } +} diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResource.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResource.java new file mode 100644 index 0000000..c3c093a --- /dev/null +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResource.java @@ -0,0 +1,8 @@ +package inc.sdt.blokworks.devicedeployer.presentation; + +interface PageableResource { + long getTotalElements(); + int getTotalPages(); + int getSize(); + int getPage(); +} diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResourceImpl.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResourceImpl.java new file mode 100644 index 0000000..135641a --- /dev/null +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResourceImpl.java @@ -0,0 +1,45 @@ +package inc.sdt.blokworks.devicedeployer.presentation; + +import org.springframework.data.domain.Page; + +class PageableResourceImpl implements PageableResource { + private final long totalElements; + private final int totalPages; + private final int size; + private final int page; + + PageableResourceImpl(long totalElements, int totalPages, int size, int page) { + this.totalElements = totalElements; + this.totalPages = totalPages; + this.size = size; + this.page = page; + } + + static PageableResourceImpl from(Page page) { + return new PageableResourceImpl( + page.getTotalElements(), + page.getTotalPages(), + page.getSize(), + page.getPageable().getPageNumber()); + } + + @Override + public long getTotalElements() { + return 0; + } + + @Override + public int getTotalPages() { + return 0; + } + + @Override + public int getSize() { + return 0; + } + + @Override + public int getPage() { + return 0; + } +} diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResponse.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResponse.java new file mode 100644 index 0000000..7b854ca --- /dev/null +++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResponse.java @@ -0,0 +1,28 @@ +package inc.sdt.blokworks.devicedeployer.presentation; + +import org.springframework.data.domain.Page; + +import java.util.List; +import java.util.function.Function; + +class PageableResponse { + private final List content; + private final PageableResource pageable; + + PageableResponse(List content, PageableResource pageable) { + this.content = content; + this.pageable = pageable; + } + + static PageableResponse from(Page page, Function converter) { + return new PageableResponse<>(page.map(converter).getContent(), PageableResourceImpl.from(page)); + } + + public List getContent() { + return content; + } + + public PageableResource getPageable() { + return pageable; + } +} diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index a33f789..c5b7052 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -16,9 +16,5 @@ inbound: username: sdt password: 251327 topics: - - /assets/+/apps/process - - /assets/+/apps/deploy -outbound: - mqtt: - topic: - - /assets/+/command-req/+ \ No newline at end of file + - /assets/+/command-req/+ + - /assets/+/apps/process \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 56cacee..90a30bd 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -12,9 +12,5 @@ inbound: username: sdt password: 251327 topics: - - /assets/+/apps/process - - /assets/+/apps/deploy -outbound: - mqtt: - topic: - - /assets/+/command-req/+ \ No newline at end of file + - /assets/+/command-req/+ + - /assets/+/apps/process \ No newline at end of file