Skip to content

Commit 511c556

Browse files
authored
Merge pull request #17
16-find-user
2 parents c7c1460 + ecc2b8d commit 511c556

File tree

3 files changed

+71
-1
lines changed

3 files changed

+71
-1
lines changed

src/main/java/dev/mikablondo/hibernate_reactive_test/controller/UserController.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ public class UserController {
2424
private final UserService userService;
2525

2626
@GetMapping
27-
public Multi<User> getAllUsers() {
27+
public Multi<User> getUsersByNom(@RequestParam(required = false) String nom) {
28+
if (nom != null) {
29+
return userService.getUsersByNom(nom);
30+
}
2831
return userService.getAllUsers();
2932
}
3033

@@ -46,4 +49,17 @@ public Uni<ResponseEntity<Void>> deleteUser(@PathVariable String id) {
4649
return Uni.createFrom().item(ResponseEntity.status(HttpStatus.BAD_REQUEST).build());
4750
}
4851
}
52+
53+
@GetMapping("/{id}")
54+
public Uni<ResponseEntity<User>> getUserById(@PathVariable String id) {
55+
try {
56+
UUID uuid = UUID.fromString(id);
57+
return userService.getUserById(uuid)
58+
.map(user -> user != null
59+
? ResponseEntity.ok(user)
60+
: ResponseEntity.status(HttpStatus.NOT_FOUND).build());
61+
} catch (IllegalArgumentException e) {
62+
return Uni.createFrom().item(ResponseEntity.status(HttpStatus.BAD_REQUEST).build());
63+
}
64+
}
4965
}

src/main/java/dev/mikablondo/hibernate_reactive_test/repository/UserRepository.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,20 @@ public Multi<UserEntity> findAll() {
3232
).onItem().transformToMulti(users -> Multi.createFrom().iterable(users));
3333
}
3434

35+
/**
36+
* This method retrieves all users with a specific name from the database.
37+
*
38+
* @param nom the name of the users to be retrieved
39+
* @return a Multi stream of UserEntity objects
40+
*/
41+
public Multi<UserEntity> findAll(String nom) {
42+
return sessionFactory.withSession(session ->
43+
session.createQuery("from UserEntity where lower(nom) = :nom", UserEntity.class)
44+
.setParameter("nom", nom.toLowerCase())
45+
.getResultList()
46+
).onItem().transformToMulti(users -> Multi.createFrom().iterable(users));
47+
}
48+
3549
/**
3650
* This method creates a new user in the database.
3751
*

src/main/java/dev/mikablondo/hibernate_reactive_test/services/UserService.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,44 @@ public Uni<Void> createUser(User user) {
6262
public Uni<Boolean> deleteUser(UUID id) {
6363
return userRepository.deleteUser(id);
6464
}
65+
66+
/**
67+
* This method retrieves a user by its UUID from the database.
68+
*
69+
* @param uuid the UUID of the user to be retrieved
70+
* @return a Uni<User> containing the user DTO if found, or null if not found
71+
*/
72+
public Uni<User> getUserById(UUID uuid) {
73+
return userRepository.findById(uuid)
74+
.onItem().transform(userEntity -> {
75+
if (userEntity != null) {
76+
return User.builder()
77+
.id(userEntity.getId())
78+
.nom(userEntity.getNom())
79+
.prenom(userEntity.getPrenom())
80+
.age(userEntity.getAge())
81+
.metier(userEntity.getMetier())
82+
.build();
83+
} else {
84+
return null;
85+
}
86+
});
87+
}
88+
89+
/**
90+
* This method retrieves users by their name from the database.
91+
*
92+
* @param nom the name of the users to be retrieved
93+
* @return a Multi stream of User DTO objects
94+
*/
95+
public Multi<User> getUsersByNom(String nom) {
96+
return userRepository.findAll(nom)
97+
.onItem().transform(userEntity -> User.builder()
98+
.id(userEntity.getId())
99+
.nom(userEntity.getNom())
100+
.prenom(userEntity.getPrenom())
101+
.age(userEntity.getAge())
102+
.metier(userEntity.getMetier())
103+
.build());
104+
}
65105
}

0 commit comments

Comments
 (0)