Skip to content

Commit 3fe1a20

Browse files
committed
Implement mongo repo
1 parent 91100ab commit 3fe1a20

File tree

9 files changed

+135
-7
lines changed

9 files changed

+135
-7
lines changed

build.gradle

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,21 @@ repositories {
1313
}
1414

1515
dependencies {
16-
// implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
1716
implementation 'org.springframework.boot:spring-boot-starter'
17+
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
1818
implementation 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:2.0.2'
1919
implementation 'com.amazonaws:aws-lambda-java-core:1.2.3'
2020
implementation 'com.amazonaws:aws-lambda-java-events:3.14.0'
2121

2222
testImplementation 'org.springframework.boot:spring-boot-starter-test'
23+
testImplementation "org.springframework.boot:spring-boot-testcontainers"
24+
testImplementation 'org.testcontainers:mongodb'
25+
testImplementation "org.testcontainers:junit-jupiter"
2326

2427
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
2528
testRuntimeOnly 'org.springframework.boot:spring-boot-starter-tomcat'
2629

30+
2731
compileOnly 'org.projectlombok:lombok'
2832

2933
annotationProcessor 'org.projectlombok:lombok'

src/main/java/com/example/springlambda/Customer.java renamed to src/main/java/com/example/springlambda/customer/Customer.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
package com.example.springlambda;
1+
package com.example.springlambda.customer;
2+
3+
import java.util.List;
4+
5+
import org.bson.types.ObjectId;
26

37
import lombok.AllArgsConstructor;
48
import lombok.Data;
@@ -8,7 +12,9 @@
812
@AllArgsConstructor
913
@NoArgsConstructor
1014
public class Customer {
11-
private String id;
15+
private ObjectId id;
1216
private String firstName;
1317
private String lastName;
18+
19+
private List<String> log;
1420
}

src/main/java/com/example/springlambda/CustomerController.java renamed to src/main/java/com/example/springlambda/customer/CustomerController.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
1-
package com.example.springlambda;
1+
package com.example.springlambda.customer;
22

33
import java.util.List;
44

55
import org.springframework.web.bind.annotation.GetMapping;
66
import org.springframework.web.bind.annotation.RequestMapping;
77
import org.springframework.web.bind.annotation.RestController;
88

9+
import lombok.AllArgsConstructor;
10+
911
@RestController
1012
@RequestMapping("/customer")
13+
@AllArgsConstructor
1114
public class CustomerController {
1215

16+
private final CustomerRepository customerRepository;
1317
@GetMapping
14-
public List<Customer> getCustomers() {
15-
return List.of(new Customer("1", "John", "Doe"));
18+
public List<CustomerView> getCustomers() {
19+
return customerRepository.listCustomers();
1620
}
1721
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.example.springlambda.customer;
2+
3+
import java.util.List;
4+
import java.util.Optional;
5+
6+
import org.springframework.data.mongodb.core.MongoOperations;
7+
import org.springframework.stereotype.Component;
8+
9+
import lombok.AllArgsConstructor;
10+
11+
@Component
12+
@AllArgsConstructor
13+
public class CustomerRepository {
14+
15+
private final MongoOperations mongoOperations;
16+
public Optional<Customer> getCustomer(String id) {
17+
return Optional.ofNullable(mongoOperations.findById(id, Customer.class));
18+
}
19+
20+
public Customer saveCustomer(Customer customer) {
21+
return mongoOperations.save(customer);
22+
}
23+
24+
public List<CustomerView> listCustomers() {
25+
return mongoOperations.query(Customer.class).as(CustomerView.class).all();
26+
}
27+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.example.springlambda.customer;
2+
3+
public record CustomerView(String id, String firstName, String lastName) {
4+
}

src/main/resources/application.properties

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
spring:
2+
application:
3+
name: spring-lambda
4+
data:
5+
mongodb:
6+
repositories:
7+
type: NONE
8+
9+
logging:
10+
level:
11+
org.springframework.data.mongodb.core: DEBUG
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.example.springlambda.customer;
2+
3+
import java.util.List;
4+
5+
import org.junit.jupiter.api.Test;
6+
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
7+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
8+
import org.springframework.test.web.servlet.MockMvc;
9+
10+
import jakarta.annotation.Resource;
11+
12+
import static org.mockito.Mockito.when;
13+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
14+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
15+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
16+
17+
@WebMvcTest(CustomerController.class)
18+
class CustomerControllerTest {
19+
@MockitoBean
20+
private CustomerRepository customerRepository;
21+
22+
@Resource
23+
private MockMvc mockMvc;
24+
25+
@Test
26+
void testGetCustomers() throws Exception {
27+
var customer = new CustomerView("1", "John", "Doe");
28+
when(customerRepository.listCustomers()).thenReturn(List.of(customer));
29+
30+
mockMvc.perform(get("/customer"))
31+
.andExpect(status().isOk())
32+
.andExpect(jsonPath("$[0].id").value("1"))
33+
.andExpect(jsonPath("$[0].firstName").value("John"))
34+
.andExpect(jsonPath("$[0].lastName").value("Doe"));
35+
}
36+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.example.springlambda.customer;
2+
3+
import java.util.List;
4+
5+
import org.junit.jupiter.api.Test;
6+
import org.springframework.boot.test.context.SpringBootTest;
7+
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
8+
import org.testcontainers.containers.MongoDBContainer;
9+
import org.testcontainers.junit.jupiter.Container;
10+
import org.testcontainers.junit.jupiter.Testcontainers;
11+
12+
import jakarta.annotation.Resource;
13+
14+
import static org.junit.jupiter.api.Assertions.*;
15+
16+
@SpringBootTest
17+
@Testcontainers
18+
class CustomerRepositoryTest {
19+
20+
@Container
21+
@ServiceConnection
22+
private static final MongoDBContainer MONGO_DB_CONTAINER = new MongoDBContainer();
23+
@Resource
24+
private CustomerRepository customerRepository;
25+
26+
@Test
27+
public void testListCustomer() {
28+
var customer = new Customer(null, "John", "Doe", List.of("log1", "log2"));
29+
var savedCustomer = customerRepository.saveCustomer(customer);
30+
31+
var result = customerRepository.listCustomers();
32+
33+
assertEquals(1, result.size());
34+
assertEquals(savedCustomer.getId().toString(), result.getFirst().id());
35+
}
36+
37+
}

0 commit comments

Comments
 (0)