diff --git a/Dockerfile b/Dockerfile
index 46ee7d0..540b169 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,9 @@
-FROM eclipse-temurin:21-jdk-jammy
+FROM maven:3.9.6-eclipse-temurin-21
# build
WORKDIR app
-COPY pom.xml .
-RUN mvn -f /app/pom.xml clean package -Dmaven.test.skip=true
+COPY . .
+RUN mvn -f pom.xml clean package -Dmaven.test.skip=true
+# run
+RUN java -jar target/testSteamPrices .jar
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index fa8773c..3d1565e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,6 +7,7 @@
1.0-SNAPSHOT
jar
+
testSteamPrices
http://maven.apache.org
@@ -62,5 +63,6 @@
+ testSteamPrices
diff --git a/src/main/java/org/example/GameInfoMapper.java b/src/main/java/org/example/GameInfoMapper.java
new file mode 100644
index 0000000..db0923a
--- /dev/null
+++ b/src/main/java/org/example/GameInfoMapper.java
@@ -0,0 +1,61 @@
+package org.example;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import org.springframework.stereotype.Service;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Service
+public class GameInfoMapper
+{
+ public GameInfoResponse mapGameInfoJson(JsonNode node)
+ {
+ GameInfoResponse response = new GameInfoResponse();
+ response.setName(node.get("name").toString().replaceAll("\"", ""));
+ response.setPage_image(node.get("page_image").toString().replaceAll("\"", ""));
+ response.setSmall_logo(node.get("small_logo").toString().replaceAll("\"", ""));
+
+ if (node.get("apps").isArray())
+ {
+ ArrayList apps = new ArrayList<>();
+ for (JsonNode jsonNode : node.get("apps"))
+ {
+ apps.add(new GameInfoResponse.AppClass(jsonNode.get("id").asInt(), jsonNode.get("name").toString().replaceAll("\"", "")));
+ }
+ response.setApps(apps);
+ }
+ GameInfoResponse.Price price = null;
+ if (node.get("price") != null)
+ {
+ price = new GameInfoResponse.Price(node.get("price").get("currency").toString().replaceAll("\"", ""), node.get("price").get("initial").asInt(), node.get("price").get("final").asInt(), node.get("price").get("discount_percent").asInt(), node.get("price").get("individual").asInt());
+ }
+ response.setPrice(price);
+
+ GameInfoResponse.Platforms platforms = new GameInfoResponse.Platforms(node.get("platforms").get("windows").asBoolean(), node.get("platforms").get("mac").asBoolean(), node.get("platforms").get("linux").asBoolean());
+ response.setPlatforms(platforms);
+
+ GameInfoResponse.Controller controller = new GameInfoResponse.Controller(node.get("controller").get("full_gamepad").asBoolean());
+ response.setController(controller);
+
+ GameInfoResponse.ReleaseDate releaseDate = null;
+ try
+ {
+ String jsonDate = node.get("release_date").get("date").toString().replaceAll("\"", "");
+ Date formattedDate = null;
+ if (!jsonDate.isEmpty())
+ {
+ formattedDate = new SimpleDateFormat("dd MMM, yyyy", Locale.ENGLISH).parse(jsonDate);
+ }
+ releaseDate = new GameInfoResponse.ReleaseDate(node.get("release_date").get("coming_soon").asBoolean(), formattedDate);
+ }
+ catch (ParseException e)
+ {
+ throw new RuntimeException(e);
+ }
+ response.setRelease_date(releaseDate);
+
+ return response;
+ }
+}
diff --git a/src/main/java/org/example/GameInfoResponse.java b/src/main/java/org/example/GameInfoResponse.java
index cc320b7..3d51edc 100644
--- a/src/main/java/org/example/GameInfoResponse.java
+++ b/src/main/java/org/example/GameInfoResponse.java
@@ -1,34 +1,267 @@
package org.example;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
+import java.util.ArrayList;
import java.util.Date;
-import java.util.List;
-import java.util.Map;
-@Getter
-@Setter
-@NoArgsConstructor
-final class GameInfoResponse
+public class GameInfoResponse
{
+ private String name;
- private Map data;
- private List