Skip to content

Commit 21a194d

Browse files
committed
feat(endpoint-userfilter): add enum for gender
1 parent 0a06649 commit 21a194d

7 files changed

Lines changed: 34 additions & 22 deletions

File tree

src/main/java/com/xpeho/spring_boot_java_random_user/data/services/UserServiceImpl.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,17 @@ public void deleteById(long id) {
5151

5252
@Override
5353
public List<UserEntity> filterUsers(UserFilter filter) {
54-
String gender = filter.gender() != null ? "%" + filter.gender() + "%" : null;
55-
String firstname = filter.firstname() != null ? "%" + filter.firstname() + "%" : null;
56-
String lastname = filter.lastname() != null ? "%" + filter.lastname() + "%" : null;
57-
String civility = filter.civility() != null ? "%" + filter.civility() + "%" : null;
58-
String email = filter.email() != null ? "%" + filter.email() + "%" : null;
59-
String phone = filter.phone() != null ? "%" + filter.phone() + "%" : null;
60-
String nationality = filter.nat() != null ? "%" + filter.nat() + "%" : null;
54+
String gender = filter.gender() != null ? filter.gender().name().toLowerCase() : null;
6155

62-
return userRepository.findByFilters(gender, firstname, lastname, civility, email, phone, nationality)
63-
.stream()
56+
return userRepository.findByFilters(
57+
gender,
58+
filter.firstname(),
59+
filter.lastname(),
60+
filter.civility(),
61+
filter.email(),
62+
filter.phone(),
63+
filter.nat()
64+
).stream()
6465
.map(userConverter::toDomain)
6566
.toList();
6667
}

src/main/java/com/xpeho/spring_boot_java_random_user/data/sources/database/UserRepository.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@
1010
public interface UserRepository extends CrudRepository<User, Long> {
1111

1212
@Query("SELECT * FROM users WHERE " +
13-
"(:gender IS NULL OR LOWER(gender) LIKE LOWER(:gender)) AND " +
14-
"(:firstname IS NULL OR LOWER(firstname) LIKE LOWER(:firstname)) AND " +
15-
"(:lastname IS NULL OR LOWER(lastname) LIKE LOWER(:lastname)) AND " +
16-
"(:civility IS NULL OR LOWER(civility) LIKE LOWER(:civility)) AND " +
17-
"(:email IS NULL OR LOWER(email) LIKE LOWER(:email)) AND " +
18-
"(:phone IS NULL OR LOWER(phone) LIKE LOWER(:phone)) AND " +
19-
"(:nationality IS NULL OR LOWER(nationality) LIKE LOWER(:nationality))")
13+
"(:gender IS NULL OR LOWER(gender) = LOWER(:gender)) AND " +
14+
"(:firstname IS NULL OR LOWER(firstname) LIKE LOWER(CONCAT('%', :firstname, '%'))) AND " +
15+
"(:lastname IS NULL OR LOWER(lastname) LIKE LOWER(CONCAT('%', :lastname, '%'))) AND " +
16+
"(:civility IS NULL OR civility LIKE CONCAT('%', :civility, '%')) AND " +
17+
"(:email IS NULL OR email LIKE CONCAT('%', :email, '%')) AND " +
18+
"(:phone IS NULL OR phone LIKE CONCAT('%', :phone, '%')) AND " +
19+
"(:nationality IS NULL OR LOWER(nationality) LIKE LOWER(CONCAT('%', :nationality, '%')))")
2020
List<User> findByFilters(
2121
@Param("gender") String gender,
2222
@Param("firstname") String firstname,

src/main/java/com/xpeho/spring_boot_java_random_user/domain/entities/UserFilter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.xpeho.spring_boot_java_random_user.domain.entities;
22

3+
import com.xpeho.spring_boot_java_random_user.domain.enums.Gender;
4+
35
public record UserFilter(
4-
String gender,
6+
Gender gender,
57
String firstname,
68
String lastname,
79
String civility,
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.xpeho.spring_boot_java_random_user.domain.enums;
2+
3+
public enum Gender {
4+
MALE,
5+
FEMALE
6+
}

src/main/java/com/xpeho/spring_boot_java_random_user/presentation/controllers/UserController.java

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

33
import com.xpeho.spring_boot_java_random_user.domain.entities.UserEntity;
44
import com.xpeho.spring_boot_java_random_user.domain.entities.UserRequest;
5+
import com.xpeho.spring_boot_java_random_user.domain.enums.Gender;
56
import com.xpeho.spring_boot_java_random_user.domain.enums.UserSource;
67
import com.xpeho.spring_boot_java_random_user.presentation.dto.UserResponseDTO;
78
import io.swagger.v3.oas.annotations.Operation;
@@ -99,7 +100,7 @@ ResponseEntity<UserEntity> updateRandomUser(
99100
summary = "Filter users",
100101
description = "Search users by optional filters on gender, firstname, lastname, civility, email, phone and nationality. All filters are case-insensitive and support partial matching.",
101102
parameters = {
102-
@Parameter(name = "gender", description = "Filter by gender"),
103+
@Parameter(name = "gender", description = "Filter by gender (MALE or FEMALE)"),
103104
@Parameter(name = "firstname", description = "Filter by firstname"),
104105
@Parameter(name = "lastname", description = "Filter by lastname"),
105106
@Parameter(name = "civility", description = "Filter by civility"),
@@ -111,7 +112,7 @@ ResponseEntity<UserEntity> updateRandomUser(
111112
@ApiResponse(responseCode = "200", description = "Filtered list of users")
112113
@ApiResponse(responseCode = "500", description = "Internal server error")
113114
ResponseEntity<List<UserEntity>> filterUsers(
114-
@RequestParam(required = false) String gender,
115+
@RequestParam(required = false) Gender gender,
115116
@RequestParam(required = false) String firstname,
116117
@RequestParam(required = false) String lastname,
117118
@RequestParam(required = false) String civility,

src/main/java/com/xpeho/spring_boot_java_random_user/presentation/handlers/UserHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.xpeho.spring_boot_java_random_user.domain.entities.UserEntity;
55
import com.xpeho.spring_boot_java_random_user.domain.entities.UserFilter;
66
import com.xpeho.spring_boot_java_random_user.domain.entities.UserRequest;
7+
import com.xpeho.spring_boot_java_random_user.domain.enums.Gender;
78
import com.xpeho.spring_boot_java_random_user.domain.enums.UserSource;
89
import com.xpeho.spring_boot_java_random_user.domain.exceptions.InvalidPaginationException;
910
import com.xpeho.spring_boot_java_random_user.domain.exceptions.UserNotFoundException;
@@ -105,7 +106,7 @@ public ResponseEntity<UserEntity> createUser(@RequestBody UserRequest user) {
105106

106107
@Override
107108
public ResponseEntity<List<UserEntity>> filterUsers(
108-
String gender, String firstname, String lastname,
109+
Gender gender, String firstname, String lastname,
109110
String civility, String email, String phone, String nat
110111
) {
111112
UserFilter filter = new UserFilter(gender, firstname, lastname, civility, email, phone, nat);

src/test/java/com/xpeho/spring_boot_java_random_user/presentation/UserHandlerTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.xpeho.spring_boot_java_random_user.domain.entities.UserEntity;
55
import com.xpeho.spring_boot_java_random_user.domain.entities.UserFilter;
66
import com.xpeho.spring_boot_java_random_user.domain.entities.UserRequest;
7+
import com.xpeho.spring_boot_java_random_user.domain.enums.Gender;
78
import com.xpeho.spring_boot_java_random_user.domain.enums.UserSource;
89
import com.xpeho.spring_boot_java_random_user.domain.exceptions.InvalidPaginationException;
910
import com.xpeho.spring_boot_java_random_user.domain.exceptions.UserNotFoundException;
@@ -184,13 +185,13 @@ void shouldLogWarningWhenDeleteUserByIdFails() {
184185
@Test
185186
@DisplayName("Should return 200 and filtered users when filterUsers succeeds")
186187
void shouldReturnOkWhenFilterUsersSucceeds() {
187-
UserFilter filter = new UserFilter("male", null, null, null, null, null, "FR");
188+
UserFilter filter = new UserFilter(Gender.MALE, null, null, null, null, null, "FR");
188189
List<UserEntity> users = List.of(
189190
new UserEntity(1L, "male", "John", "Doe", "Mr", "john@example.com", "0600000000", "pic.jpg", "FR")
190191
);
191192
when(filterUsersUseCase.execute(filter)).thenReturn(users);
192193

193-
ResponseEntity<List<UserEntity>> response = userHandler.filterUsers("male", null, null, null, null, null, "FR");
194+
ResponseEntity<List<UserEntity>> response = userHandler.filterUsers(Gender.MALE, null, null, null, null, null, "FR");
194195

195196
assertEquals(HttpStatus.OK, response.getStatusCode());
196197
assertNotNull(response.getBody());

0 commit comments

Comments
 (0)