diff --git a/batch-quartz/src/main/java/com/spring/domain/user/api/UserManagementApi.java b/batch-quartz/src/main/java/com/spring/domain/user/api/UserManagementApi.java index 05af61c..bcf1deb 100644 --- a/batch-quartz/src/main/java/com/spring/domain/user/api/UserManagementApi.java +++ b/batch-quartz/src/main/java/com/spring/domain/user/api/UserManagementApi.java @@ -4,12 +4,15 @@ import java.util.List; import javax.validation.Valid; -import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.spring.domain.user.dto.ChangeUserRoleApproveRequest; +import com.spring.domain.user.dto.UserFindRequest; +import com.spring.domain.user.dto.UserManagementResponse; import com.spring.domain.user.service.UserManagementService; import lombok.RequiredArgsConstructor; @@ -21,8 +24,13 @@ public class UserManagementApi { private final UserManagementService userManagementService; - @PostMapping("/change-role-approve") - public void signUp(@RequestBody @Valid List requests) { + @GetMapping + public List getUsers(UserFindRequest request) { + return userManagementService.getUsers(request); + } + + @PutMapping("/change-role-approve") + public void changeRoleApprove(@RequestBody @Valid List requests) { userManagementService.changeRoleApprove(requests); } diff --git a/batch-quartz/src/main/java/com/spring/domain/user/dto/ChangeUserRoleApproveRequest.java b/batch-quartz/src/main/java/com/spring/domain/user/dto/ChangeUserRoleApproveRequest.java index 343fde3..a21677b 100644 --- a/batch-quartz/src/main/java/com/spring/domain/user/dto/ChangeUserRoleApproveRequest.java +++ b/batch-quartz/src/main/java/com/spring/domain/user/dto/ChangeUserRoleApproveRequest.java @@ -13,8 +13,8 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class ChangeUserRoleApproveRequest { - @NotBlank(message = "사용자ID는 필수값 입니다.") - private final String userId; + @NotBlank(message = "ID는 필수값 입니다.") + private final String id; @EnumValid(target = AgentUserRole.class, message = "권한은 필수값 입니다.") private final AgentUserRole userRole; diff --git a/batch-quartz/src/main/java/com/spring/domain/user/dto/UserFindRequest.java b/batch-quartz/src/main/java/com/spring/domain/user/dto/UserFindRequest.java new file mode 100644 index 0000000..ab79208 --- /dev/null +++ b/batch-quartz/src/main/java/com/spring/domain/user/dto/UserFindRequest.java @@ -0,0 +1,42 @@ +package com.spring.domain.user.dto; + +import com.spring.domain.user.entity.AgentUser; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public class UserFindRequest { + + private final String userId; + private final String userName; + private final String email; + private final String approved; + + public static boolean matchesCriteria(AgentUser user, UserFindRequest request) { + return matchesUserId(user, request.getUserId()) && + matchesUserName(user, request.getUserName()) && + matchesEmail(user, request.getEmail()) && + matchesApprovedCriteria(request.getApproved(), user.isApproved()); + } + + public static boolean matchesUserId(AgentUser user, String userId) { + return userId == null || userId.isEmpty() || user.getUserId().contains(userId); + } + + public static boolean matchesUserName(AgentUser user, String userName) { + return userName == null || userName.isEmpty() || user.getMemberName().contains(userName); + } + + public static boolean matchesEmail(AgentUser user, String email) { + return email == null || email.isEmpty() || user.getEmail().contains(email); + } + + public static boolean matchesApprovedCriteria(String approved, boolean userApproved) { + return "all".equals(approved) || + ("true".equals(approved) && userApproved) || + ("false".equals(approved) && !userApproved); + } + +} diff --git a/batch-quartz/src/main/java/com/spring/domain/user/dto/UserManagementResponse.java b/batch-quartz/src/main/java/com/spring/domain/user/dto/UserManagementResponse.java index fb84b8d..257edbf 100644 --- a/batch-quartz/src/main/java/com/spring/domain/user/dto/UserManagementResponse.java +++ b/batch-quartz/src/main/java/com/spring/domain/user/dto/UserManagementResponse.java @@ -1,5 +1,6 @@ package com.spring.domain.user.dto; +import com.spring.domain.user.entity.AgentUser; import com.spring.domain.user.entity.AgentUserRole; import lombok.Getter; @@ -9,9 +10,22 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class UserManagementResponse { + private final String id; private final String userId; private final String userName; private final String email; + private final boolean isApproved; private final AgentUserRole userRole; + public static UserManagementResponse valueOf(AgentUser user) { + return new UserManagementResponse( + user.getId().toString(), + user.getUserId(), + user.getMemberName(), + user.getEmail(), + user.isApproved(), + user.getUserRole() + ); + } + } diff --git a/batch-quartz/src/main/java/com/spring/domain/user/service/UserManagementService.java b/batch-quartz/src/main/java/com/spring/domain/user/service/UserManagementService.java index a7a913c..192ff1c 100644 --- a/batch-quartz/src/main/java/com/spring/domain/user/service/UserManagementService.java +++ b/batch-quartz/src/main/java/com/spring/domain/user/service/UserManagementService.java @@ -1,11 +1,15 @@ package com.spring.domain.user.service; import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.spring.domain.user.dto.ChangeUserRoleApproveRequest; +import com.spring.domain.user.dto.UserFindRequest; +import com.spring.domain.user.dto.UserManagementResponse; import com.spring.domain.user.entity.AgentUser; import com.spring.domain.user.error.UserNotFoundException; import com.spring.domain.user.repository.AgentUserRepository; @@ -18,10 +22,19 @@ public class UserManagementService { private final AgentUserRepository agentUserRepository; + @Transactional(readOnly = true) + public List getUsers(UserFindRequest request) { + return agentUserRepository.findAll().stream() + .filter(user -> UserFindRequest.matchesCriteria(user, request)) + .map(UserManagementResponse::valueOf) + .collect(Collectors.toList()); + } + @Transactional public void changeRoleApprove(List requests) { for (ChangeUserRoleApproveRequest request : requests) { - AgentUser user = agentUserRepository.findByUserId(request.getUserId()).orElseThrow(UserNotFoundException::new); + AgentUser user = agentUserRepository.findById(UUID.fromString(request.getId())) + .orElseThrow(UserNotFoundException::new); user.changeUserRole(request.getUserRole()); user.changeApproved(request.isApproved()); } diff --git a/batch-quartz/src/main/resources/static/js/apis/user-api.js b/batch-quartz/src/main/resources/static/js/apis/user-api.js index 6351413..98a4905 100644 --- a/batch-quartz/src/main/resources/static/js/apis/user-api.js +++ b/batch-quartz/src/main/resources/static/js/apis/user-api.js @@ -1,9 +1,9 @@ import apiClient from '../common/axios-instance.js'; const userService = { - getUserList: async () => { - const response = await apiClient.get('/api/user'); - return response.data; + getUsers: async (searchParams) => { + const response = await apiClient.get('/api/user', { params: searchParams }); + return response.data.data; }, changeRoleApprove: async (users) => { diff --git a/batch-quartz/src/main/resources/static/js/pages/user/user-management.js b/batch-quartz/src/main/resources/static/js/pages/user/user-management.js index 5a0c693..c95917e 100644 --- a/batch-quartz/src/main/resources/static/js/pages/user/user-management.js +++ b/batch-quartz/src/main/resources/static/js/pages/user/user-management.js @@ -1,59 +1,72 @@ import userService from '../../apis/user-api.js'; -let users = []; // 사용자 목록을 저장할 배열 +let users = []; document.addEventListener('DOMContentLoaded', () => { - loadUserList(); - document.getElementById('saveChanges').addEventListener('click', saveChanges); + fetchDataAndRender(); + setupEventListeners(); }); -const loadUserList = async () => { - users = await userService.getUserList(); - const userTableBody = document.getElementById('userTableBody'); - userTableBody.innerHTML = ''; // 기존 내용 초기화 +const setupEventListeners = () => { + document.getElementById('searchForm').addEventListener('submit', async (e) => { + e.preventDefault(); + fetchDataAndRender(); + }); + document.getElementById('saveChangesBtn').addEventListener('click', saveChanges); +}; - users.forEach(user => { - const row = document.createElement('tr'); - row.innerHTML = ` - ${user.userId} - ${user.email} - ${user.userName} - - + ${ROLES.length > 0 ? ROLES.map(role => ` + + `).join('') : ''} - - + + - - + + - `; - userTableBody.appendChild(row); - }); + + `).join(''); }; const saveChanges = async () => { const updatedUsers = users.map(user => { const selectElement = document.querySelector(`select[data-user-id="${user.id}"]`); - const checkboxElement = document.querySelector(`input[data-user-id="${user.id}"]`); - + const checkboxElement = document.querySelector(`input[data-user-approved="${user.approved}"]`); + const userRole = selectElement ? selectElement.value : null; + const isApproved = checkboxElement ? checkboxElement.checked : false; return { id: user.id, - role: selectElement.value, - isApproved: checkboxElement.checked + userRole: userRole, + isApproved: isApproved }; }); - await userService.updateUsers(updatedUsers); // 배열로 사용자 정보를 전송 - alert('모든 변경 사항이 저장되었습니다.'); - loadUserList(); // 사용자 목록 새로 고침 + await userService.changeRoleApprove(updatedUsers); + alert('회원정보가 수정 되었습니다.'); + fetchDataAndRender(); }; const deleteUser = async (userId) => { await userService.deleteUser(userId); alert('사용자가 삭제되었습니다.'); - loadUserList(); // 사용자 목록 새로 고침 + fetchDataAndRender(); }; \ No newline at end of file diff --git a/batch-quartz/src/main/resources/templates/fragments/left.html b/batch-quartz/src/main/resources/templates/fragments/left.html index 7892b78..1050cf1 100644 --- a/batch-quartz/src/main/resources/templates/fragments/left.html +++ b/batch-quartz/src/main/resources/templates/fragments/left.html @@ -8,6 +8,9 @@ + + User Management + \ No newline at end of file diff --git a/batch-quartz/src/main/resources/templates/pages/user/user-management.html b/batch-quartz/src/main/resources/templates/pages/user/user-management.html index f7f89c4..bee43a4 100644 --- a/batch-quartz/src/main/resources/templates/pages/user/user-management.html +++ b/batch-quartz/src/main/resources/templates/pages/user/user-management.html @@ -4,30 +4,113 @@ layout:decorate="~{layouts/layout}" layout:fragment="content" lang="ko" xml:lang="ko"> - User Management + 사용자 관리 -
-
-

회원 관리

- - - - - - - - - - - - - -
아이디이메일사용자명권한승인 여부작업
- +
+
+
+
+

사용자 관리

+
+
+ +
+
-
+
+
+
+
+
+
+ 사용자 검색 +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ 사용자 목록 + +
+
+ + + + + + + + + + + + + +
사용자 ID 사용자명 이메일 권한 승인 여부 액션
+
+
+
+
+
+
- + + + \ No newline at end of file