Skip to content

Commit 02467d0

Browse files
committed
create imperative version of user service
1 parent 7822553 commit 02467d0

File tree

10 files changed

+60
-66
lines changed

10 files changed

+60
-66
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ RUN mvn clean package -DskipTests
1010
FROM eclipse-temurin:21-jdk-alpine
1111
WORKDIR /app
1212
COPY --from=build /app/target/user-0.0.1-SNAPSHOT.jar app.jar
13-
ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=webflux"]
13+
ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=webmvc"]

docker-compose.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
services:
2-
user-webflux:
2+
user-webmvc:
33
build: .
4-
container_name: user-webflux
4+
container_name: user-webmvc
55
environment:
66
- SERVER_PORT=8181
77
ports:

justfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ build:
33

44
run:
55
mvn spring-boot:run \
6-
-Dspring-boot.run.profiles=webflux
6+
-Dspring-boot.run.profiles=webmvc
77

88
up:
99
docker compose up --build --detach

pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<artifactId>user</artifactId>
1313
<version>0.0.1-SNAPSHOT</version>
1414
<name>user</name>
15-
<description>User Webflux Service</description>
15+
<description>User WebMVC Service</description>
1616
<url/>
1717
<licenses>
1818
<license/>
@@ -38,17 +38,17 @@
3838
</dependency>
3939
<dependency>
4040
<groupId>org.springframework.boot</groupId>
41-
<artifactId>spring-boot-starter-webflux</artifactId>
41+
<artifactId>spring-boot-starter-web</artifactId>
4242
</dependency>
4343

4444
<!-- Storage dependencies -->
4545
<dependency>
4646
<groupId>org.springframework.boot</groupId>
47-
<artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
47+
<artifactId>spring-boot-starter-data-mongodb</artifactId>
4848
</dependency>
4949
<dependency>
5050
<groupId>org.springframework.boot</groupId>
51-
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
51+
<artifactId>spring-boot-starter-data-redis</artifactId>
5252
</dependency>
5353

5454
<!-- Cloud dependencies -->

src/main/java/br/edu/ufrn/user/UserApplication.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
5-
import org.springframework.web.reactive.config.EnableWebFlux;
5+
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
66

7+
@EnableWebMvc
78
@SpringBootApplication
8-
@EnableWebFlux
99
public class UserApplication {
1010

1111
public static void main(String[] args) {

src/main/java/br/edu/ufrn/user/config/WebConfig.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
import org.springframework.context.annotation.Configuration;
44
import org.springframework.web.bind.annotation.RestController;
5-
import org.springframework.web.reactive.config.PathMatchConfigurer;
6-
import org.springframework.web.reactive.config.WebFluxConfigurer;
5+
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
6+
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
77

88
@Configuration
9-
public class WebConfig implements WebFluxConfigurer {
9+
public class WebConfig implements WebMvcConfigurer {
1010

1111
@Override
12-
public void configurePathMatching(PathMatchConfigurer configurer) {
12+
public void configurePathMatch(PathMatchConfigurer configurer) {
1313
configurer.addPathPrefix(
1414
"/restapi",
1515
c -> c.isAnnotationPresent(RestController.class)
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package br.edu.ufrn.user.controller;
22

3+
import java.util.List;
4+
35
import org.springframework.beans.factory.annotation.Autowired;
46
import org.springframework.graphql.data.method.annotation.Argument;
57
import org.springframework.graphql.data.method.annotation.MutationMapping;
@@ -9,8 +11,6 @@
911
import br.edu.ufrn.user.record.CreateUserDTO;
1012
import br.edu.ufrn.user.record.UserDTO;
1113
import br.edu.ufrn.user.service.UserService;
12-
import reactor.core.publisher.Flux;
13-
import reactor.core.publisher.Mono;
1414

1515
@Controller
1616
public class UserGraphQLController {
@@ -19,23 +19,23 @@ public class UserGraphQLController {
1919
private UserService userService;
2020

2121
@QueryMapping
22-
public Flux<UserDTO> getAll() {
22+
public List<UserDTO> getAll() {
2323
return userService.getAll();
2424
}
2525

2626
@QueryMapping
27-
public Mono<UserDTO> getById(@Argument String id) {
27+
public UserDTO getById(@Argument String id) {
2828
return userService.getById(id);
2929
}
3030

3131
@MutationMapping
32-
public Mono<UserDTO> save(@Argument("createUserInput") CreateUserDTO createUserDTO) {
32+
public UserDTO save(@Argument("createUserInput") CreateUserDTO createUserDTO) {
3333
return userService.save(createUserDTO);
3434
}
3535

3636
@MutationMapping
37-
public Mono<Void> delete(@Argument String id) {
38-
return userService.delete(id);
37+
public void delete(@Argument String id) {
38+
userService.delete(id);
3939
}
4040

4141
}
Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package br.edu.ufrn.user.controller;
22

3+
import java.util.List;
4+
35
import org.springframework.beans.factory.annotation.Autowired;
4-
import org.springframework.http.MediaType;
56
import org.springframework.web.bind.annotation.DeleteMapping;
67
import org.springframework.web.bind.annotation.GetMapping;
78
import org.springframework.web.bind.annotation.PathVariable;
@@ -13,8 +14,6 @@
1314
import br.edu.ufrn.user.record.CreateUserDTO;
1415
import br.edu.ufrn.user.record.UserDTO;
1516
import br.edu.ufrn.user.service.UserService;
16-
import reactor.core.publisher.Flux;
17-
import reactor.core.publisher.Mono;
1817

1918
@RestController
2019
@RequestMapping("/users")
@@ -23,24 +22,24 @@ public class UserRestAPIController {
2322
@Autowired
2423
private UserService userService;
2524

26-
@GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE)
27-
public Flux<UserDTO> getAll() {
25+
@GetMapping
26+
public List<UserDTO> getAll() {
2827
return userService.getAll();
2928
}
3029

3130
@GetMapping("/{id}")
32-
public Mono<UserDTO> getById(@PathVariable String id) {
31+
public UserDTO getById(@PathVariable String id) {
3332
return userService.getById(id);
3433
}
3534

3635
@PostMapping
37-
public Mono<UserDTO> save(@RequestBody CreateUserDTO createUserDTO) {
36+
public UserDTO save(@RequestBody CreateUserDTO createUserDTO) {
3837
return userService.save(createUserDTO);
3938
}
4039

4140
@DeleteMapping("/{id}")
42-
public Mono<Void> delete(@PathVariable String id) {
43-
return userService.delete(id);
41+
public void delete(@PathVariable String id) {
42+
userService.delete(id);
4443
}
4544

4645
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package br.edu.ufrn.user.repository;
22

3-
import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
3+
import org.springframework.data.mongodb.repository.MongoRepository;
44
import org.springframework.stereotype.Repository;
55

66
import br.edu.ufrn.user.model.User;
77

88
@Repository
9-
public interface UserRepository extends ReactiveMongoRepository<User, String> {}
9+
public interface UserRepository extends MongoRepository<User, String> {}
Lines changed: 29 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,59 @@
11
package br.edu.ufrn.user.service;
22

3+
import java.util.List;
4+
35
import org.springframework.beans.factory.annotation.Autowired;
46
import org.springframework.stereotype.Service;
57

68
import br.edu.ufrn.user.model.User;
79
import br.edu.ufrn.user.record.CreateUserDTO;
810
import br.edu.ufrn.user.record.UserDTO;
911
import br.edu.ufrn.user.repository.UserRepository;
10-
import reactor.core.publisher.Flux;
11-
import reactor.core.publisher.Mono;
1212

1313
@Service
1414
public class UserService {
1515

1616
@Autowired
1717
private UserRepository userRepository;
1818

19-
public Flux<UserDTO> getAll() {
19+
public List<UserDTO> getAll() {
2020
return userRepository.findAll()
21-
.map(
22-
user -> new UserDTO(
23-
user.getId(),
24-
user.getName(),
25-
user.getAge(),
26-
user.getCreatedAt()
27-
)
28-
);
21+
.stream()
22+
.map(user -> new UserDTO(
23+
user.getId(),
24+
user.getName(),
25+
user.getAge(),
26+
user.getCreatedAt()
27+
))
28+
.toList();
2929
}
3030

31-
public Mono<UserDTO> getById(String id) {
32-
return userRepository.findById(id)
33-
.map(
34-
user -> new UserDTO(
35-
user.getId(),
36-
user.getName(),
37-
user.getAge(),
38-
user.getCreatedAt()
39-
)
40-
);
31+
public UserDTO getById(String id) {
32+
User user = userRepository.findById(id).get();
33+
return new UserDTO(
34+
user.getId(),
35+
user.getName(),
36+
user.getAge(),
37+
user.getCreatedAt());
4138
}
4239

43-
public Mono<UserDTO> save(CreateUserDTO createUserDTO) {
44-
User userModel = new User(
40+
public UserDTO save(CreateUserDTO createUserDTO) {
41+
User user = new User(
4542
createUserDTO.name(),
4643
createUserDTO.age()
4744
);
4845

49-
return userRepository.save(userModel)
50-
.map(
51-
user -> new UserDTO(
52-
user.getId(),
53-
user.getName(),
54-
user.getAge(),
55-
user.getCreatedAt()
56-
)
57-
);
46+
User savedUser = userRepository.save(user);
47+
48+
return new UserDTO(
49+
savedUser.getId(),
50+
savedUser.getName(),
51+
savedUser.getAge(),
52+
savedUser.getCreatedAt());
5853
}
5954

60-
public Mono<Void> delete(String id) {
61-
return userRepository.deleteById(id);
55+
public void delete(String id) {
56+
userRepository.deleteById(id);
6257
}
6358

6459
}

0 commit comments

Comments
 (0)