diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 00000000..c91c1fc3
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,33 @@
+version: "3.8"
+services:
+ mongodb:
+ image: mongo
+ container_name: mongo
+ ports:
+ - "27017:27017"
+ volumes:
+ - data:/data
+ environment:
+ - MONGO_INITDB_ROOT_USERNAME=mongodb_user
+ - MONGO_INITDB_ROOT_PASSWORD=mongodb_pwd
+
+ mongo-express:
+ image: mongo-express
+ container_name: mongo-express
+ restart: always
+ ports:
+ - "9090:8081"
+ environment:
+ - ME_CONFIG_MONGODB_ADMINUSERNAME=mongodb_user
+ - ME_CONFIG_MONGODB_ADMINPASSWORD=mongodb_pwd
+ - ME_CONFIG_MONGODB_SERVER=mongo
+ - ME_CONFIG_MONGODB_AUTH_USERNAME=admin
+ - ME_CONFIG_MONGODB_AUTH_PASSWORD=pass
+
+volumes:
+ data: {}
+
+networks:
+ default:
+ name: mongodb_network
+
diff --git a/pom.xml b/pom.xml
index 928fef47..d861aa3e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,24 +28,24 @@
org.springframework.boot
- spring-boot-starter-actuator
+ spring-boot-configuration-processor
+ true
org.springframework.boot
- spring-boot-starter-webflux
+ spring-boot-starter-actuator
-
org.springframework.boot
- spring-boot-devtools
- runtime
- true
+ spring-boot-starter-webflux
+
org.springframework.boot
- spring-boot-configuration-processor
- true
+ spring-boot-starter-data-mongodb
+
+
org.springframework.boot
spring-boot-starter-thymeleaf
@@ -55,17 +55,52 @@
thymeleaf-extras-springsecurity6
+
+ org.springframework.boot
+ spring-boot-devtools
+ runtime
+ true
+
+
+ org.springframework.boot
+ spring-boot-docker-compose
+
org.projectlombok
lombok
true
+
org.springframework.boot
spring-boot-starter-test
test
+
+ org.springframework.boot
+ spring-boot-testcontainers
+ test
+
+
+ org.testcontainers
+ mongodb
+ ${testcontainers.version}
+ test
+
+
+ org.testcontainers
+ testcontainers
+ ${testcontainers.version}
+ test
+
+
+ org.testcontainers
+ junit-jupiter
+ ${testcontainers.version}
+ test
+
+
diff --git a/src/main/java/com/github/nramc/dev/journey/api/JourneyApiApplication.java b/src/main/java/com/github/nramc/dev/journey/api/JourneyApiApplication.java
index 3dedba23..ad5fddce 100644
--- a/src/main/java/com/github/nramc/dev/journey/api/JourneyApiApplication.java
+++ b/src/main/java/com/github/nramc/dev/journey/api/JourneyApiApplication.java
@@ -1,13 +1,31 @@
package com.github.nramc.dev.journey.api;
+import com.github.nramc.dev.journey.api.data.entity.LocationEntity;
+import com.github.nramc.dev.journey.api.data.repository.LocationRepository;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
@SpringBootApplication
+@Slf4j
public class JourneyApiApplication {
- public static void main(String[] args) {
- SpringApplication.run(JourneyApiApplication.class, args);
- }
+ public static void main(String[] args) {
+ SpringApplication.run(JourneyApiApplication.class, args);
+ }
+
+ @Bean
+ CommandLineRunner commandLineRunner(LocationRepository locationRepository) {
+ return args -> {
+ LocationEntity entity = new LocationEntity("Munich");
+ locationRepository.save(entity);
+
+ log.info("Number of documents found: {}", locationRepository.count());
+
+ locationRepository.findAll().forEach(location -> log.info("Found: {}", location));
+ };
+ }
}
diff --git a/src/main/java/com/github/nramc/dev/journey/api/data/entity/LocationEntity.java b/src/main/java/com/github/nramc/dev/journey/api/data/entity/LocationEntity.java
new file mode 100644
index 00000000..dbf602f1
--- /dev/null
+++ b/src/main/java/com/github/nramc/dev/journey/api/data/entity/LocationEntity.java
@@ -0,0 +1,18 @@
+package com.github.nramc.dev.journey.api.data.entity;
+
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document("location")
+@Data
+public class LocationEntity {
+ @Id
+ private String id;
+
+ private String name;
+
+ public LocationEntity(String name) {
+ this.name = name;
+ }
+}
diff --git a/src/main/java/com/github/nramc/dev/journey/api/data/repository/LocationRepository.java b/src/main/java/com/github/nramc/dev/journey/api/data/repository/LocationRepository.java
new file mode 100644
index 00000000..297e646a
--- /dev/null
+++ b/src/main/java/com/github/nramc/dev/journey/api/data/repository/LocationRepository.java
@@ -0,0 +1,7 @@
+package com.github.nramc.dev.journey.api.data.repository;
+
+import com.github.nramc.dev.journey.api.data.entity.LocationEntity;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+public interface LocationRepository extends MongoRepository {
+}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
new file mode 100644
index 00000000..e69de29b
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
new file mode 100644
index 00000000..b65064d4
--- /dev/null
+++ b/src/main/resources/application-prod.yml
@@ -0,0 +1,7 @@
+spring:
+ data:
+ mongodb:
+ database: ${DATABASE_NAME}
+ uri: ${MONGODB_CONNECTION_URL}
+
+
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index a98e838d..ecdcaf6c 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -2,6 +2,10 @@
spring:
application:
name: ${app.name}
+ data:
+ mongodb:
+ database: journey-dev
+ auto-index-creation: true
app:
name: Journey API
diff --git a/src/test/java/com/github/nramc/dev/journey/api/JourneyApiApplicationTests.java b/src/test/java/com/github/nramc/dev/journey/api/JourneyApiApplicationTests.java
index 9e0e0ef5..eb238187 100644
--- a/src/test/java/com/github/nramc/dev/journey/api/JourneyApiApplicationTests.java
+++ b/src/test/java/com/github/nramc/dev/journey/api/JourneyApiApplicationTests.java
@@ -4,11 +4,21 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
import org.springframework.context.ApplicationContext;
import org.springframework.test.web.reactive.server.WebTestClient;
+import org.testcontainers.containers.MongoDBContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
+import org.testcontainers.utility.DockerImageName;
+@Testcontainers
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class JourneyApiApplicationTests {
+ @Container
+ @ServiceConnection
+ static MongoDBContainer mongoDBContainer = new MongoDBContainer(DockerImageName.parse("mongo:latest"));
+
@Autowired
private ApplicationContext applicationContext;
@Autowired
diff --git a/src/test/java/com/github/nramc/dev/journey/api/web/resources/mvc/home/HomeResourceTest.java b/src/test/java/com/github/nramc/dev/journey/api/web/resources/mvc/home/HomeResourceTest.java
index 4a7f607b..c6065325 100644
--- a/src/test/java/com/github/nramc/dev/journey/api/web/resources/mvc/home/HomeResourceTest.java
+++ b/src/test/java/com/github/nramc/dev/journey/api/web/resources/mvc/home/HomeResourceTest.java
@@ -1,10 +1,12 @@
package com.github.nramc.dev.journey.api.web.resources.mvc.home;
import com.github.nramc.dev.journey.api.config.ApplicationProperties;
+import com.github.nramc.dev.journey.api.data.repository.LocationRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
@@ -15,6 +17,7 @@
@WebMvcTest(HomeResource.class)
@ActiveProfiles({"prod", "test"})
@EnableConfigurationProperties({ApplicationProperties.class})
+@MockBean({LocationRepository.class})
class HomeResourceTest {
@Autowired
private MockMvc mvc;