Skip to content

Commit 848851c

Browse files
committed
Use a filter to get users
1 parent 8c64eab commit 848851c

File tree

4 files changed

+37
-42
lines changed

4 files changed

+37
-42
lines changed

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.mikablondo.hibernate_reactive_test.controller;
22

33
import dev.mikablondo.hibernate_reactive_test.dto.User;
4+
import dev.mikablondo.hibernate_reactive_test.dto.UserFilter;
45
import dev.mikablondo.hibernate_reactive_test.services.UserService;
56
import io.smallrye.mutiny.Multi;
67
import io.smallrye.mutiny.Uni;
@@ -24,11 +25,8 @@ public class UserController {
2425
private final UserService userService;
2526

2627
@GetMapping
27-
public Multi<User> getUsers(@RequestParam(required = false) String nom) {
28-
if (nom != null) {
29-
return userService.getUsersByNom(nom);
30-
}
31-
return userService.getAllUsers();
28+
public Multi<User> getUsers(UserFilter filtre) {
29+
return userService.getUsers(filtre);
3230
}
3331

3432
@PostMapping
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package dev.mikablondo.hibernate_reactive_test.dto;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class UserFilter {
7+
private String nom;
8+
private String prenom;
9+
private Integer ageMin;
10+
private Integer ageMax;
11+
private String metier;
12+
}

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

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.mikablondo.hibernate_reactive_test.repository;
22

3+
import dev.mikablondo.hibernate_reactive_test.dto.UserFilter;
34
import dev.mikablondo.hibernate_reactive_test.entity.UserEntity;
45
import io.smallrye.mutiny.Multi;
56
import io.smallrye.mutiny.Uni;
@@ -23,27 +24,27 @@ public class UserRepository {
2324
/**
2425
* This method retrieves all users from the database.
2526
*
27+
* @param filtre the filter criteria for retrieving users
2628
* @return a Multi stream of UserEntity objects
2729
*/
28-
public Multi<UserEntity> findAll() {
29-
return sessionFactory.withSession(session ->
30-
session.createQuery("from UserEntity", UserEntity.class)
31-
.getResultList()
32-
).onItem().transformToMulti(users -> Multi.createFrom().iterable(users));
33-
}
30+
public Multi<UserEntity> findByFiltre(UserFilter filtre) {
31+
return sessionFactory.withSession(session -> {
32+
StringBuilder query = new StringBuilder("from UserEntity where 1=1");
33+
if (filtre.getNom() != null) query.append(" and lower(nom) = :nom");
34+
if (filtre.getPrenom() != null) query.append(" and lower(prenom) = :prenom");
35+
if (filtre.getAgeMin() != null) query.append(" and age >= :ageMin");
36+
if (filtre.getAgeMax() != null) query.append(" and age <= :ageMax");
37+
if (filtre.getMetier() != null) query.append(" and lower(metier) = :metier");
3438

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));
39+
var hQuery = session.createQuery(query.toString(), UserEntity.class);
40+
if (filtre.getNom() != null) hQuery.setParameter("nom", filtre.getNom().toLowerCase());
41+
if (filtre.getPrenom() != null) hQuery.setParameter("prenom", filtre.getPrenom().toLowerCase());
42+
if (filtre.getAgeMin() != null) hQuery.setParameter("ageMin", filtre.getAgeMin());
43+
if (filtre.getAgeMax() != null) hQuery.setParameter("ageMax", filtre.getAgeMax());
44+
if (filtre.getMetier() != null) hQuery.setParameter("metier", filtre.getMetier().toLowerCase());
45+
46+
return hQuery.getResultList();
47+
}).onItem().transformToMulti(users -> Multi.createFrom().iterable(users));
4748
}
4849

4950
/**

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

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.mikablondo.hibernate_reactive_test.services;
22

33
import dev.mikablondo.hibernate_reactive_test.dto.User;
4+
import dev.mikablondo.hibernate_reactive_test.dto.UserFilter;
45
import dev.mikablondo.hibernate_reactive_test.entity.UserEntity;
56
import dev.mikablondo.hibernate_reactive_test.repository.UserRepository;
67
import io.smallrye.mutiny.Multi;
@@ -26,8 +27,8 @@ public class UserService {
2627
*
2728
* @return a Multi stream of User DTO objects
2829
*/
29-
public Multi<User> getAllUsers() {
30-
return userRepository.findAll()
30+
public Multi<User> getUsers(UserFilter filtre) {
31+
return userRepository.findByFiltre(filtre)
3132
.onItem().transform(userEntity -> User.builder()
3233
.id(userEntity.getId())
3334
.nom(userEntity.getNom())
@@ -85,21 +86,4 @@ public Uni<User> getUserById(UUID uuid) {
8586
}
8687
});
8788
}
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-
}
10589
}

0 commit comments

Comments
 (0)