diff --git a/src/main/java/org/ros/chatto/controller/AdminRESTController.java b/src/main/java/org/ros/chatto/controller/AdminRESTController.java index 6b98ace..bf43483 100644 --- a/src/main/java/org/ros/chatto/controller/AdminRESTController.java +++ b/src/main/java/org/ros/chatto/controller/AdminRESTController.java @@ -3,6 +3,7 @@ package org.ros.chatto.controller; import java.security.Principal; import java.time.Instant; import java.util.List; +import java.util.Optional; import javax.validation.Valid; @@ -13,6 +14,7 @@ import org.ros.chatto.dto.ChatMessageDTO; import org.ros.chatto.dto.ReencryptionDTO; import org.ros.chatto.service.AdminService; import org.ros.chatto.service.ChatService; +import org.ros.chatto.service.UserDTOSpec; import org.ros.chatto.service.UserService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -22,6 +24,7 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import lombok.RequiredArgsConstructor; @@ -62,14 +65,21 @@ public class AdminRESTController { return chatMessageDTOs; } - @GetMapping("/regular-users") - public List getAllRegularUsers() { - return userService.getAllRegularUsers(); - } - @GetMapping("/get/users") - public List getAllOtherUsers(Principal principal) { - return adminService.getOtherUsers(principal.getName()); + public List getUsers(Principal principal, + @RequestParam Optional select) { + if (select.isPresent()) { + switch (select.get()) { + case "all": + return adminService.getUsers("", UserDTOSpec.ALL_USERS); + + case "regular": + return adminService.getUsers("", UserDTOSpec.REGULAR_USERS); + + } + } + return adminService.getUsers(principal.getName(), + UserDTOSpec.OTHER_USERS); } @DeleteMapping("/delete/users/{userName}") diff --git a/src/main/java/org/ros/chatto/repository/AdminUserRepository.java b/src/main/java/org/ros/chatto/repository/AdminUserRepository.java new file mode 100644 index 0000000..7d7d58e --- /dev/null +++ b/src/main/java/org/ros/chatto/repository/AdminUserRepository.java @@ -0,0 +1,25 @@ +package org.ros.chatto.repository; + +import java.util.List; + +import org.ros.chatto.dto.AdminUserDTO; +import org.ros.chatto.model.ChatUser; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +@Repository +public interface AdminUserRepository extends JpaRepository { + + @Query("select new org.ros.chatto.dto.AdminUserDTO(u.userID, u.userName, ur.role.name, u.joinDate )" + + " from ChatUser u join u.userRoles ur where u.userName != ?1") + public List getOtherUsers(String principal); + + @Query("select new org.ros.chatto.dto.AdminUserDTO(u.userID, u.userName, ur.role.name, u.joinDate )" + + " from ChatUser u join u.userRoles ur ") + public List getAllUsers(); + + @Query("select new org.ros.chatto.dto.AdminUserDTO(u.userID, u.userName, ur.role.name, u.joinDate )" + + " from ChatUser u join u.userRoles ur where ur.role.roleID = 2") + public List getRegularUsers(); +} \ No newline at end of file diff --git a/src/main/java/org/ros/chatto/repository/UserRepository.java b/src/main/java/org/ros/chatto/repository/UserRepository.java index cd477d8..8887b2d 100644 --- a/src/main/java/org/ros/chatto/repository/UserRepository.java +++ b/src/main/java/org/ros/chatto/repository/UserRepository.java @@ -19,8 +19,4 @@ public interface UserRepository extends JpaRepository { @Query("select count(u) from ChatUser u") public Long totalUsers(); - - @Query("select new org.ros.chatto.dto.AdminUserDTO(u.userID, u.userName, ur.role.name, u.joinDate )" - + " from ChatUser u join u.userRoles ur ") - public List getOtherUsers(String principal); } diff --git a/src/main/java/org/ros/chatto/service/AdminService.java b/src/main/java/org/ros/chatto/service/AdminService.java index bd29928..d838919 100644 --- a/src/main/java/org/ros/chatto/service/AdminService.java +++ b/src/main/java/org/ros/chatto/service/AdminService.java @@ -7,8 +7,10 @@ import com.spencerwi.either.Result; import org.ros.chatto.dto.AdminUserDTO; import org.ros.chatto.model.ChatUser; +import org.ros.chatto.repository.AdminUserRepository; import org.ros.chatto.repository.UserRepository; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -16,11 +18,22 @@ import lombok.extern.slf4j.Slf4j; @Service @RequiredArgsConstructor @Slf4j +@Transactional public class AdminService { private final UserRepository userRepository; + private final AdminUserRepository adminUserRepository; - public List getOtherUsers(String principal) { - return userRepository.getOtherUsers(principal); + public List getUsers(String principal, UserDTOSpec spec) { + switch (spec) { + case OTHER_USERS: + return adminUserRepository.getOtherUsers(principal); + case ALL_USERS: + return adminUserRepository.getAllUsers(); + case REGULAR_USERS: + return adminUserRepository.getRegularUsers(); + default: + throw new UnsupportedOperationException(); + } } public Result deleteUser(String userName) { diff --git a/src/main/java/org/ros/chatto/service/UserDTOSpec.java b/src/main/java/org/ros/chatto/service/UserDTOSpec.java new file mode 100644 index 0000000..fb15203 --- /dev/null +++ b/src/main/java/org/ros/chatto/service/UserDTOSpec.java @@ -0,0 +1,5 @@ +package org.ros.chatto.service; + +public enum UserDTOSpec { + ALL_USERS, OTHER_USERS, REGULAR_USERS +} \ No newline at end of file