From 6a95bff2575c0bbca0e6a5c84fed3ba5d31908f5 Mon Sep 17 00:00:00 2001 From: Peter Siegmund Date: Fri, 16 Aug 2024 21:24:13 +0200 Subject: [PATCH] trivial implementation to test cloud run Signed-off-by: Peter Siegmund --- .run/Application.run.xml | 9 +++++ Dockerfile | 33 +++++++++++++++++++ pom.xml | 9 +++++ ...rviceApplication.java => Application.java} | 4 +-- .../domain/model/request/TimeZoneRequest.java | 5 +++ .../model/response/TimeZoneResponse.java | 5 +++ .../web/controllers/TimeZoneController.java | 18 ++++++++++ ...cationTests.java => ApplicationTests.java} | 2 +- 8 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 .run/Application.run.xml create mode 100644 Dockerfile rename src/main/java/dev/mars3142/fhq/timezone_service/{TimezoneServiceApplication.java => Application.java} (68%) create mode 100644 src/main/java/dev/mars3142/fhq/timezone_service/timezone/domain/model/request/TimeZoneRequest.java create mode 100644 src/main/java/dev/mars3142/fhq/timezone_service/timezone/domain/model/response/TimeZoneResponse.java create mode 100644 src/main/java/dev/mars3142/fhq/timezone_service/timezone/web/controllers/TimeZoneController.java rename src/test/java/dev/mars3142/fhq/timezone_service/{TimezoneServiceApplicationTests.java => ApplicationTests.java} (82%) diff --git a/.run/Application.run.xml b/.run/Application.run.xml new file mode 100644 index 0000000..4bf1bce --- /dev/null +++ b/.run/Application.run.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..73b0f4e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,33 @@ +# Stage that builds the application, a prerequisite for the running stage +FROM eclipse-temurin:21-jdk-jammy as build + +ARG SERVICE_ROOT + +RUN apt-get update -qq + +# Stop running as root at this point +RUN useradd -m app +WORKDIR /usr/src/app/ +RUN chown app:app /usr/src/app/ +USER app + +# Copy pom.xml and prefetch dependencies so a repeated build can continue from the next step with existing dependencies +COPY --chown=app ${SERVICE_ROOT}/.mvn/ .mvn +COPY --chown=app ${SERVICE_ROOT}/mvnw ${SERVICE_ROOT}/pom.xml ./ + +# Copy all needed project files to a folder +COPY --chown=app:app ${SERVICE_ROOT}/src ./src + +# Build the production package +RUN ./mvnw --batch-mode clean verify -DskipTests + +# Running stage: the part that is used for running the application +FROM eclipse-temurin:21-jre-jammy + +RUN useradd -m app +USER app + +COPY --chown=app --from=build /usr/src/app/target/*.jar /usr/app/app.jar + +EXPOSE 8080 +CMD java -jar /usr/app/app.jar diff --git a/pom.xml b/pom.xml index 800bcdb..c285df7 100644 --- a/pom.xml +++ b/pom.xml @@ -55,6 +55,15 @@ spring-modulith-starter-test test + + org.springframework.boot + spring-boot-devtools + runtime + + + org.springframework.boot + spring-boot-starter-actuator + diff --git a/src/main/java/dev/mars3142/fhq/timezone_service/TimezoneServiceApplication.java b/src/main/java/dev/mars3142/fhq/timezone_service/Application.java similarity index 68% rename from src/main/java/dev/mars3142/fhq/timezone_service/TimezoneServiceApplication.java rename to src/main/java/dev/mars3142/fhq/timezone_service/Application.java index 3715066..e4a3928 100644 --- a/src/main/java/dev/mars3142/fhq/timezone_service/TimezoneServiceApplication.java +++ b/src/main/java/dev/mars3142/fhq/timezone_service/Application.java @@ -4,10 +4,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -public class TimezoneServiceApplication { +public class Application { public static void main(String[] args) { - SpringApplication.run(TimezoneServiceApplication.class, args); + SpringApplication.run(Application.class, args); } } diff --git a/src/main/java/dev/mars3142/fhq/timezone_service/timezone/domain/model/request/TimeZoneRequest.java b/src/main/java/dev/mars3142/fhq/timezone_service/timezone/domain/model/request/TimeZoneRequest.java new file mode 100644 index 0000000..8042ca8 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/timezone_service/timezone/domain/model/request/TimeZoneRequest.java @@ -0,0 +1,5 @@ +package dev.mars3142.fhq.timezone_service.timezone.domain.model.request; + +public record TimeZoneRequest(String timezone) { + +} diff --git a/src/main/java/dev/mars3142/fhq/timezone_service/timezone/domain/model/response/TimeZoneResponse.java b/src/main/java/dev/mars3142/fhq/timezone_service/timezone/domain/model/response/TimeZoneResponse.java new file mode 100644 index 0000000..68177c7 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/timezone_service/timezone/domain/model/response/TimeZoneResponse.java @@ -0,0 +1,5 @@ +package dev.mars3142.fhq.timezone_service.timezone.domain.model.response; + +public record TimeZoneResponse(String timezone) { + +} diff --git a/src/main/java/dev/mars3142/fhq/timezone_service/timezone/web/controllers/TimeZoneController.java b/src/main/java/dev/mars3142/fhq/timezone_service/timezone/web/controllers/TimeZoneController.java new file mode 100644 index 0000000..d81d2c8 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/timezone_service/timezone/web/controllers/TimeZoneController.java @@ -0,0 +1,18 @@ +package dev.mars3142.fhq.timezone_service.timezone.web.controllers; + +import dev.mars3142.fhq.timezone_service.timezone.domain.model.request.TimeZoneRequest; +import dev.mars3142.fhq.timezone_service.timezone.domain.model.response.TimeZoneResponse; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("v1/timezone") +public class TimeZoneController { + + @PostMapping() + public TimeZoneResponse getTimeZone(@RequestBody TimeZoneRequest request) { + return new TimeZoneResponse(request.timezone()); + } +} diff --git a/src/test/java/dev/mars3142/fhq/timezone_service/TimezoneServiceApplicationTests.java b/src/test/java/dev/mars3142/fhq/timezone_service/ApplicationTests.java similarity index 82% rename from src/test/java/dev/mars3142/fhq/timezone_service/TimezoneServiceApplicationTests.java rename to src/test/java/dev/mars3142/fhq/timezone_service/ApplicationTests.java index 24a766b..1e620cb 100644 --- a/src/test/java/dev/mars3142/fhq/timezone_service/TimezoneServiceApplicationTests.java +++ b/src/test/java/dev/mars3142/fhq/timezone_service/ApplicationTests.java @@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest -class TimezoneServiceApplicationTests { +class ApplicationTests { @Test void contextLoads() {