diff --git a/src/tamagotchi-service/src/main/java/com/sap/tamagotchi/configuration/ApplicationConfiguration.java b/src/tamagotchi-service/src/main/java/com/sap/tamagotchi/configuration/ApplicationConfiguration.java new file mode 100644 index 0000000..aa36473 --- /dev/null +++ b/src/tamagotchi-service/src/main/java/com/sap/tamagotchi/configuration/ApplicationConfiguration.java @@ -0,0 +1,22 @@ +package com.sap.tamagotchi.configuration; + + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class ApplicationConfiguration { + + @Bean + public ObjectMapper objectMapper() { + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true); + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); + return objectMapper; + } +} diff --git a/src/tamagotchi-service/src/main/java/com/sap/tamagotchi/controller/DeviceController.java b/src/tamagotchi-service/src/main/java/com/sap/tamagotchi/controller/DeviceController.java index 30596e9..bc303e5 100644 --- a/src/tamagotchi-service/src/main/java/com/sap/tamagotchi/controller/DeviceController.java +++ b/src/tamagotchi-service/src/main/java/com/sap/tamagotchi/controller/DeviceController.java @@ -10,7 +10,9 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; import static org.springframework.http.ResponseEntity.ok; @@ -35,7 +37,11 @@ public class DeviceController { } @PostMapping("/devices") - public ResponseEntity createDevice(@RequestBody CreateDevicePayload payload) { - return ok(tamagotchiService.createDevice(new Device(payload.getOwner(), payload.getColor()))); + public ResponseEntity createDevice(@RequestBody Collection payload) { + List devices = new ArrayList<>(); + for (CreateDevicePayload p : payload) { + devices.add(tamagotchiService.createDevice(new Device(p.getOwner(), p.getColor()))); + } + return ok(devices); } } diff --git a/src/tamagotchi-service/src/main/java/com/sap/tamagotchi/model/CreateDevicePayload.java b/src/tamagotchi-service/src/main/java/com/sap/tamagotchi/model/CreateDevicePayload.java index fa9c81f..b9f4774 100644 --- a/src/tamagotchi-service/src/main/java/com/sap/tamagotchi/model/CreateDevicePayload.java +++ b/src/tamagotchi-service/src/main/java/com/sap/tamagotchi/model/CreateDevicePayload.java @@ -1,18 +1,24 @@ package com.sap.tamagotchi.model; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + public class CreateDevicePayload { private final String owner; private final Color color; - public CreateDevicePayload(String owner, Color color) { + @JsonCreator + public CreateDevicePayload(@JsonProperty("owner") String owner, @JsonProperty("color") Color color) { this.owner = owner; this.color = color; } + @JsonProperty("owner") public String getOwner() { return owner; } + @JsonProperty("color") public Color getColor() { return color; } diff --git a/src/tamagotchi-service/src/main/java/com/sap/tamagotchi/model/Device.java b/src/tamagotchi-service/src/main/java/com/sap/tamagotchi/model/Device.java index 5fe8b0e..0d42d6a 100644 --- a/src/tamagotchi-service/src/main/java/com/sap/tamagotchi/model/Device.java +++ b/src/tamagotchi-service/src/main/java/com/sap/tamagotchi/model/Device.java @@ -1,46 +1,65 @@ package com.sap.tamagotchi.model; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + import java.time.Instant; +import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.Queue; import java.util.UUID; import java.util.concurrent.ConcurrentLinkedQueue; -public class Device extends Thread { +@JsonIgnoreProperties(ignoreUnknown = true) +public class Device { + @JsonProperty("id") private final String getDeviceId = UUID.randomUUID().toString(); + @JsonProperty("owner") private final String owner; + @JsonProperty("color") private final Color color; + @JsonProperty("born") private final Instant born = Instant.now(); - private final Queue messages = new ConcurrentLinkedQueue(); + private final Queue messages = new ConcurrentLinkedQueue<>(); public Device(String owner, Color color) { this.owner = owner; this.color = color; } + @JsonProperty("id") public String getDeviceId() { return getDeviceId; } + @JsonProperty("owner") public String getOwner() { return owner; } + @JsonProperty("color") public Color getColor() { return color; } + @JsonProperty("born") public Instant getBorn() { return born; } + @JsonIgnore public boolean hasMessages() { return !messages.isEmpty(); } + @JsonIgnore public Collection getMessages() { - return Collections.emptyList(); + ArrayList m = new ArrayList<>(); + while (!messages.isEmpty()) { + m.add(messages.poll()); + } + return m; } }