diff --git a/src/main/java/com/petshop/backend/controller/UserController.java b/src/main/java/com/petshop/backend/controller/UserController.java index b1ece730..ed48bab2 100644 --- a/src/main/java/com/petshop/backend/controller/UserController.java +++ b/src/main/java/com/petshop/backend/controller/UserController.java @@ -3,6 +3,7 @@ package com.petshop.backend.controller; import com.petshop.backend.dto.common.BulkDeleteRequest; import com.petshop.backend.dto.user.UserRequest; import com.petshop.backend.dto.user.UserResponse; +import com.petshop.backend.entity.User; import com.petshop.backend.service.UserService; import jakarta.validation.Valid; import org.springframework.data.domain.Page; @@ -26,8 +27,9 @@ public class UserController { @GetMapping public ResponseEntity> getAllUsers( @RequestParam(required = false) String q, + @RequestParam(required = false) User.Role role, Pageable pageable) { - return ResponseEntity.ok(userService.getAllUsers(q, pageable)); + return ResponseEntity.ok(userService.getAllUsers(q, role, pageable)); } @GetMapping("/{id}") diff --git a/src/main/java/com/petshop/backend/repository/UserRepository.java b/src/main/java/com/petshop/backend/repository/UserRepository.java index 775c1b18..6bec352f 100644 --- a/src/main/java/com/petshop/backend/repository/UserRepository.java +++ b/src/main/java/com/petshop/backend/repository/UserRepository.java @@ -16,6 +16,7 @@ public interface UserRepository extends JpaRepository { Optional findByEmail(String email); Optional findByPhone(String phone); boolean existsByUsername(String username); + Page findByRole(User.Role role, Pageable pageable); @Query("SELECT u FROM User u WHERE " + "LOWER(u.username) LIKE LOWER(CONCAT('%', :q, '%')) OR " + @@ -23,4 +24,11 @@ public interface UserRepository extends JpaRepository { "LOWER(COALESCE(u.email, '')) LIKE LOWER(CONCAT('%', :q, '%')) OR " + "LOWER(COALESCE(u.phone, '')) LIKE LOWER(CONCAT('%', :q, '%'))") Page searchUsers(@Param("q") String query, Pageable pageable); + + @Query("SELECT u FROM User u WHERE u.role = :role AND (" + + "LOWER(u.username) LIKE LOWER(CONCAT('%', :q, '%')) OR " + + "LOWER(COALESCE(u.fullName, '')) LIKE LOWER(CONCAT('%', :q, '%')) OR " + + "LOWER(COALESCE(u.email, '')) LIKE LOWER(CONCAT('%', :q, '%')) OR " + + "LOWER(COALESCE(u.phone, '')) LIKE LOWER(CONCAT('%', :q, '%')))") + Page searchUsersByRole(@Param("q") String query, @Param("role") User.Role role, Pageable pageable); } diff --git a/src/main/java/com/petshop/backend/service/UserService.java b/src/main/java/com/petshop/backend/service/UserService.java index a54aecd3..c68743ef 100644 --- a/src/main/java/com/petshop/backend/service/UserService.java +++ b/src/main/java/com/petshop/backend/service/UserService.java @@ -28,10 +28,15 @@ public class UserService { this.userBusinessLinkageService = userBusinessLinkageService; } - public Page getAllUsers(String query, Pageable pageable) { + public Page getAllUsers(String query, User.Role role, Pageable pageable) { Page users; - if (query != null && !query.trim().isEmpty()) { + boolean hasQuery = query != null && !query.trim().isEmpty(); + if (hasQuery && role != null) { + users = userRepository.searchUsersByRole(query, role, pageable); + } else if (hasQuery) { users = userRepository.searchUsers(query, pageable); + } else if (role != null) { + users = userRepository.findByRole(role, pageable); } else { users = userRepository.findAll(pageable); }