From b39bbcfb656dd8c9f4688e9210805f9239c61e69 Mon Sep 17 00:00:00 2001 From: KimTaeWook Date: Sat, 8 Jun 2024 16:29:03 +0900 Subject: [PATCH] fix : Admin authentication --- .../syncd/adapter/in/web/AdminController.java | 34 +++++++++++++------ .../in/admin/CreateProjectAdminUsecase.java | 10 +++++- .../port/in/admin/CreateUserAdminUsecase.java | 7 +++- .../in/admin/DeleteProjectAdminUsecase.java | 9 ++++- .../port/in/admin/DeleteUserAdminUsecase.java | 9 ++++- .../in/admin/GetAllProjectAdminUsecase.java | 7 +++- .../port/in/admin/GetAllUserAdminUsecase.java | 7 +++- .../in/admin/GetChatgptPriceAdminUsecase.java | 8 ++++- .../in/admin/SearchProjectAdminUsecase.java | 9 ++++- .../port/in/admin/SearchUserAdminUsecase.java | 8 ++++- .../in/admin/UpdateProjectAdminUsecase.java | 18 +++++++--- .../port/in/admin/UpdateUserAdminUsecase.java | 16 ++++++--- .../application/service/AdminService.java | 22 ++++++------ .../syncd/exceptions/ValidationMessages.java | 1 + 14 files changed, 125 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/syncd/adapter/in/web/AdminController.java b/src/main/java/com/syncd/adapter/in/web/AdminController.java index e608add..954f75d 100644 --- a/src/main/java/com/syncd/adapter/in/web/AdminController.java +++ b/src/main/java/com/syncd/adapter/in/web/AdminController.java @@ -53,24 +53,29 @@ public CreateAdminResponseDto createAdmin(@RequestBody CreateAdminRequestDto req @GetMapping("/user") public GetAllUserResponseDto getAllUser(HttpServletRequest request){ - return getAllUserAdminUsecase.getAllUser(); + String token = jwtService.resolveToken(request); + return getAllUserAdminUsecase.getAllUser(jwtService.getAdminIdFromToken(token)); } @PostMapping("/user/add") public CreateUserResponseDto addUser(HttpServletRequest request, @RequestBody CreateUserRequestDto requestDto){ - return createUserAdminUsecase.addUser(requestDto.email(), + String token = jwtService.resolveToken(request); + return createUserAdminUsecase.addUser( + jwtService.getAdminIdFromToken(token), requestDto.email(), requestDto.name(), requestDto.status(), requestDto.profileImg(), requestDto.projectIds()); } @PostMapping("/user/delete") public DeleteUserResponseDto deleteUser(HttpServletRequest request, @RequestBody DeleteUserRequestDto requestDto){ - return deleteUserAdminUsecase.deleteUser(requestDto.userId()); + String token = jwtService.resolveToken(request); + return deleteUserAdminUsecase.deleteUser(jwtService.getAdminIdFromToken(token), requestDto.userId()); } @PostMapping("/user/update") public UpdateUserResponseDto updateUser(HttpServletRequest request, @RequestBody UpdateUserRequestDto requestDto){ - return updateUserAdminUsecase.updateUser(requestDto.userId(), requestDto.email(),requestDto.name(), requestDto.status(), requestDto.profileImg(), requestDto.projectIds()); + String token = jwtService.resolveToken(request); + return updateUserAdminUsecase.updateUser(jwtService.getAdminIdFromToken(token), requestDto.userId(), requestDto.email(),requestDto.name(), requestDto.status(), requestDto.profileImg(), requestDto.projectIds()); } @GetMapping("/user/search") @@ -79,7 +84,8 @@ public SearchUserAdminResponseDto searchUsers( @RequestParam(required = false) String status, @RequestParam(required = false) String searchType, @RequestParam(required = false) String searchText) { - return searchUserAdminUsecase.searchUsers(status, searchType, searchText); + String token = jwtService.resolveToken(request); + return searchUserAdminUsecase.searchUsers(jwtService.getAdminIdFromToken(token), status, searchType, searchText); } // ====================================== // PROJECT @@ -87,22 +93,26 @@ public SearchUserAdminResponseDto searchUsers( @GetMapping("/project") public GetAllProjectResponseDto getAllProject(HttpServletRequest request){ - return getAllProjectAdminUsecase.getAllProject(); + String token = jwtService.resolveToken(request); + return getAllProjectAdminUsecase.getAllProject(jwtService.getAdminIdFromToken(token)); } @PostMapping("/project/create") public CreateProjectAdminResponseDto createProject(HttpServletRequest request, @RequestBody CreateProjectAdminRequestDto requestDto){ - return createProjectAdminUsecase.createProject(requestDto.name(), requestDto.description(), requestDto.img(), requestDto.users(), requestDto.progress(),requestDto.leftChanceForUserstory()); + String token = jwtService.resolveToken(request); + return createProjectAdminUsecase.createProject(jwtService.getAdminIdFromToken(token), requestDto.name(), requestDto.description(), requestDto.img(), requestDto.users(), requestDto.progress(),requestDto.leftChanceForUserstory()); } @PostMapping("/project/delete") public DeleteProjectAdminResponseDto deleteProject(HttpServletRequest request, @RequestBody DeleteProjectAdminRequestDto requestDto){ - return deleteProjectAdminUsecase.deleteProject(requestDto.projectId()); + String token = jwtService.resolveToken(request); + return deleteProjectAdminUsecase.deleteProject(jwtService.getAdminIdFromToken(token), requestDto.projectId()); } @PostMapping("/project/update") public UpdateProjectAdminResponseDto updateProject(HttpServletRequest request, @RequestBody UpdateProjectAdminRequestDto requestDto){ - return updateProjectAdminUsecase.updateProject(requestDto.projectId(), requestDto.name(), requestDto.description(),requestDto.img(),requestDto.users(),requestDto.progress(),requestDto.leftChanceForUserstory()) ; + String token = jwtService.resolveToken(request); + return updateProjectAdminUsecase.updateProject(jwtService.getAdminIdFromToken(token), requestDto.projectId(), requestDto.name(), requestDto.description(),requestDto.img(),requestDto.users(),requestDto.progress(),requestDto.leftChanceForUserstory()) ; } @GetMapping("/project/search") @@ -117,7 +127,8 @@ public SearchProjectAdminResponseDto searchProjects( @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int pageSize ) { - return searchProjectAdminUsecase.searchProjects(name, userId, leftChanceForUserstory, startDate, endDate, progress, page, pageSize); + String token = jwtService.resolveToken(request); + return searchProjectAdminUsecase.searchProjects(jwtService.getAdminIdFromToken(token), name, userId, leftChanceForUserstory, startDate, endDate, progress, page, pageSize); } // ====================================== @@ -125,6 +136,7 @@ public SearchProjectAdminResponseDto searchProjects( // ====================================== @GetMapping("/chatgpt") public GetChatgptPriceResponseDto GetChatgptPrice(HttpServletRequest request){ - return getChatgptPriceAdminUsecase.getChatgptPrice(); + String token = jwtService.resolveToken(request); + return getChatgptPriceAdminUsecase.getChatgptPrice(jwtService.getAdminIdFromToken(token)); } } diff --git a/src/main/java/com/syncd/application/port/in/admin/CreateProjectAdminUsecase.java b/src/main/java/com/syncd/application/port/in/admin/CreateProjectAdminUsecase.java index 5a1d773..d3946ab 100644 --- a/src/main/java/com/syncd/application/port/in/admin/CreateProjectAdminUsecase.java +++ b/src/main/java/com/syncd/application/port/in/admin/CreateProjectAdminUsecase.java @@ -1,6 +1,8 @@ package com.syncd.application.port.in.admin; import com.syncd.enums.Role; +import com.syncd.exceptions.ValidationMessages; +import jakarta.validation.constraints.NotBlank; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -9,7 +11,13 @@ public interface CreateProjectAdminUsecase { // ====================================== // METHOD // ====================================== - CreateProjectAdminResponseDto createProject(String name, String description, String img, List users, int progress, int leftChanceForUserstory); + CreateProjectAdminResponseDto createProject( + @NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK) + String adminId, + String name, String description, String img, + List users, + int progress, int leftChanceForUserstory + ); // ====================================== // DTO diff --git a/src/main/java/com/syncd/application/port/in/admin/CreateUserAdminUsecase.java b/src/main/java/com/syncd/application/port/in/admin/CreateUserAdminUsecase.java index 4fbe9ed..2c65860 100644 --- a/src/main/java/com/syncd/application/port/in/admin/CreateUserAdminUsecase.java +++ b/src/main/java/com/syncd/application/port/in/admin/CreateUserAdminUsecase.java @@ -1,6 +1,8 @@ package com.syncd.application.port.in.admin; import com.syncd.enums.UserAccountStatus; +import com.syncd.exceptions.ValidationMessages; +import jakarta.validation.constraints.NotBlank; import java.util.List; @@ -9,7 +11,10 @@ public interface CreateUserAdminUsecase { // ====================================== // METHOD // ====================================== - CreateUserResponseDto addUser(String email, String name, UserAccountStatus status, String profileImg, List projectIds); + CreateUserResponseDto addUser( + @NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK) + String adminId, + String email, String name, UserAccountStatus status, String profileImg, List projectIds); // ====================================== // DTO diff --git a/src/main/java/com/syncd/application/port/in/admin/DeleteProjectAdminUsecase.java b/src/main/java/com/syncd/application/port/in/admin/DeleteProjectAdminUsecase.java index 1956a30..a637d4b 100644 --- a/src/main/java/com/syncd/application/port/in/admin/DeleteProjectAdminUsecase.java +++ b/src/main/java/com/syncd/application/port/in/admin/DeleteProjectAdminUsecase.java @@ -1,10 +1,17 @@ package com.syncd.application.port.in.admin; +import com.syncd.exceptions.ValidationMessages; +import jakarta.validation.constraints.NotBlank; + public interface DeleteProjectAdminUsecase { // ====================================== // METHOD // ====================================== - DeleteProjectAdminResponseDto deleteProject(String projectId); + DeleteProjectAdminResponseDto deleteProject( + @NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK) + String adminId, + String projectId + ); // ====================================== // DTO diff --git a/src/main/java/com/syncd/application/port/in/admin/DeleteUserAdminUsecase.java b/src/main/java/com/syncd/application/port/in/admin/DeleteUserAdminUsecase.java index 8e372b4..1aa0bc6 100644 --- a/src/main/java/com/syncd/application/port/in/admin/DeleteUserAdminUsecase.java +++ b/src/main/java/com/syncd/application/port/in/admin/DeleteUserAdminUsecase.java @@ -1,11 +1,18 @@ package com.syncd.application.port.in.admin; +import com.syncd.exceptions.ValidationMessages; +import jakarta.validation.constraints.NotBlank; + public interface DeleteUserAdminUsecase { // ====================================== // METHOD // ====================================== - DeleteUserResponseDto deleteUser(String userId); + DeleteUserResponseDto deleteUser( + @NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK) + String adminId, + String userId + ); // ====================================== // DTO diff --git a/src/main/java/com/syncd/application/port/in/admin/GetAllProjectAdminUsecase.java b/src/main/java/com/syncd/application/port/in/admin/GetAllProjectAdminUsecase.java index 35df3df..7528948 100644 --- a/src/main/java/com/syncd/application/port/in/admin/GetAllProjectAdminUsecase.java +++ b/src/main/java/com/syncd/application/port/in/admin/GetAllProjectAdminUsecase.java @@ -1,6 +1,8 @@ package com.syncd.application.port.in.admin; import com.syncd.adapter.out.persistence.repository.project.ProjectEntity; +import com.syncd.exceptions.ValidationMessages; +import jakarta.validation.constraints.NotBlank; import java.util.List; @@ -9,7 +11,10 @@ public interface GetAllProjectAdminUsecase { // ====================================== // METHOD // ====================================== - GetAllProjectResponseDto getAllProject(); + GetAllProjectResponseDto getAllProject( + @NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK) + String adminId + ); // ====================================== // DTO diff --git a/src/main/java/com/syncd/application/port/in/admin/GetAllUserAdminUsecase.java b/src/main/java/com/syncd/application/port/in/admin/GetAllUserAdminUsecase.java index c3f7ea2..28a8084 100644 --- a/src/main/java/com/syncd/application/port/in/admin/GetAllUserAdminUsecase.java +++ b/src/main/java/com/syncd/application/port/in/admin/GetAllUserAdminUsecase.java @@ -1,6 +1,8 @@ package com.syncd.application.port.in.admin; import com.syncd.adapter.out.persistence.repository.user.UserEntity; +import com.syncd.exceptions.ValidationMessages; +import jakarta.validation.constraints.NotBlank; import java.util.List; @@ -9,7 +11,10 @@ public interface GetAllUserAdminUsecase { // ====================================== // METHOD // ====================================== - GetAllUserResponseDto getAllUser(); + GetAllUserResponseDto getAllUser( + @NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK) + String adminId + ); // ====================================== diff --git a/src/main/java/com/syncd/application/port/in/admin/GetChatgptPriceAdminUsecase.java b/src/main/java/com/syncd/application/port/in/admin/GetChatgptPriceAdminUsecase.java index a85df9b..ecc90ca 100644 --- a/src/main/java/com/syncd/application/port/in/admin/GetChatgptPriceAdminUsecase.java +++ b/src/main/java/com/syncd/application/port/in/admin/GetChatgptPriceAdminUsecase.java @@ -1,11 +1,17 @@ package com.syncd.application.port.in.admin; +import com.syncd.exceptions.ValidationMessages; +import jakarta.validation.constraints.NotBlank; + public interface GetChatgptPriceAdminUsecase { // ====================================== // METHOD // ====================================== - GetChatgptPriceResponseDto getChatgptPrice(); + GetChatgptPriceResponseDto getChatgptPrice( + @NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK) + String adminId + ); // ====================================== // DTO diff --git a/src/main/java/com/syncd/application/port/in/admin/SearchProjectAdminUsecase.java b/src/main/java/com/syncd/application/port/in/admin/SearchProjectAdminUsecase.java index a21003a..bd50d7e 100644 --- a/src/main/java/com/syncd/application/port/in/admin/SearchProjectAdminUsecase.java +++ b/src/main/java/com/syncd/application/port/in/admin/SearchProjectAdminUsecase.java @@ -2,6 +2,8 @@ import com.syncd.adapter.out.persistence.repository.project.ProjectEntity; import com.syncd.adapter.out.persistence.repository.user.UserEntity; +import com.syncd.exceptions.ValidationMessages; +import jakarta.validation.constraints.NotBlank; import java.util.List; import java.util.Map; @@ -11,7 +13,12 @@ public interface SearchProjectAdminUsecase { // ====================================== // METHOD // ====================================== - SearchProjectAdminResponseDto searchProjects(String name, String userId, Integer leftChanceForUserstory, String startDate, String endDate, Integer progress, int page, int pageSize); + SearchProjectAdminResponseDto searchProjects( + @NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK) + String adminId, + String name, String userId, Integer leftChanceForUserstory, + String startDate, String endDate, Integer progress, int page, int pageSize + ); // ====================================== // Search DTO diff --git a/src/main/java/com/syncd/application/port/in/admin/SearchUserAdminUsecase.java b/src/main/java/com/syncd/application/port/in/admin/SearchUserAdminUsecase.java index 551001c..3ee082f 100644 --- a/src/main/java/com/syncd/application/port/in/admin/SearchUserAdminUsecase.java +++ b/src/main/java/com/syncd/application/port/in/admin/SearchUserAdminUsecase.java @@ -2,6 +2,8 @@ import com.syncd.adapter.out.persistence.repository.project.ProjectEntity; import com.syncd.adapter.out.persistence.repository.user.UserEntity; +import com.syncd.exceptions.ValidationMessages; +import jakarta.validation.constraints.NotBlank; import java.util.List; @@ -10,7 +12,11 @@ public interface SearchUserAdminUsecase { // ====================================== // METHOD // ====================================== - SearchUserAdminResponseDto searchUsers(String status, String searchType, String searchText); + SearchUserAdminResponseDto searchUsers( + @NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK) + String adminId, + String status, String searchType, String searchText + ); // ====================================== // DTO diff --git a/src/main/java/com/syncd/application/port/in/admin/UpdateProjectAdminUsecase.java b/src/main/java/com/syncd/application/port/in/admin/UpdateProjectAdminUsecase.java index 7cb0d39..3768bdb 100644 --- a/src/main/java/com/syncd/application/port/in/admin/UpdateProjectAdminUsecase.java +++ b/src/main/java/com/syncd/application/port/in/admin/UpdateProjectAdminUsecase.java @@ -1,6 +1,8 @@ package com.syncd.application.port.in.admin; import com.syncd.enums.Role; +import com.syncd.exceptions.ValidationMessages; +import jakarta.validation.constraints.NotBlank; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -10,11 +12,17 @@ public interface UpdateProjectAdminUsecase { // ====================================== // METHOD // ====================================== - UpdateProjectAdminResponseDto updateProject(String projectId, String name, String description, - String img, - List users, - int progress, - int leftChanceForUserstory); + UpdateProjectAdminResponseDto updateProject( + @NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK) + String adminId, + String projectId, + String name, + String description, + String img, + List users, + int progress, + int leftChanceForUserstory + ); // ====================================== // DTO diff --git a/src/main/java/com/syncd/application/port/in/admin/UpdateUserAdminUsecase.java b/src/main/java/com/syncd/application/port/in/admin/UpdateUserAdminUsecase.java index 70d1762..27a3936 100644 --- a/src/main/java/com/syncd/application/port/in/admin/UpdateUserAdminUsecase.java +++ b/src/main/java/com/syncd/application/port/in/admin/UpdateUserAdminUsecase.java @@ -2,6 +2,8 @@ import com.syncd.adapter.out.persistence.repository.user.UserEntity; import com.syncd.enums.UserAccountStatus; +import com.syncd.exceptions.ValidationMessages; +import jakarta.validation.constraints.NotBlank; import java.util.List; @@ -10,11 +12,15 @@ public interface UpdateUserAdminUsecase { // ====================================== // METHOD // ====================================== - UpdateUserResponseDto updateUser(String userId, String email, - String name, - UserAccountStatus status, - String profileImg, - List projectIds); + UpdateUserResponseDto updateUser( + @NotBlank(message = ValidationMessages.ADMIN_ID_NOT_BLANK) + String adminId, + String userId, String email, + String name, + UserAccountStatus status, + String profileImg, + List projectIds + ); record UpdateUserRequestDto( String userId, diff --git a/src/main/java/com/syncd/application/service/AdminService.java b/src/main/java/com/syncd/application/service/AdminService.java index caf0d9a..5d4e8f8 100644 --- a/src/main/java/com/syncd/application/service/AdminService.java +++ b/src/main/java/com/syncd/application/service/AdminService.java @@ -58,7 +58,8 @@ public CreateAdminResponseDto createAdmin(String email, String password, String } @Override - public CreateProjectAdminResponseDto createProject( String name, + public CreateProjectAdminResponseDto createProject( String adminId, + String name, String description, String img, List users, @@ -89,7 +90,7 @@ public CreateProjectAdminResponseDto createProject( String name, return new CreateProjectAdminResponseDto(savedProject.getId()); } @Override - public CreateUserResponseDto addUser(String email, String name, UserAccountStatus status, String profileImg, List projectIds) { + public CreateUserResponseDto addUser(String adminId, String email, String name, UserAccountStatus status, String profileImg, List projectIds) { UserEntity user = new UserEntity(); user.setEmail(email); user.setName(name); @@ -101,7 +102,7 @@ public CreateUserResponseDto addUser(String email, String name, UserAccountStatu return new CreateUserResponseDto(savedUser.getId()); } @Override - public DeleteProjectAdminResponseDto deleteProject(String projectId) { + public DeleteProjectAdminResponseDto deleteProject(String adminId, String projectId) { Optional projectOpt = projectDao.findById(projectId); if (projectOpt.isPresent()) { @@ -113,7 +114,7 @@ public DeleteProjectAdminResponseDto deleteProject(String projectId) { } @Override - public DeleteUserResponseDto deleteUser(String userId) { + public DeleteUserResponseDto deleteUser(String adminId, String userId) { Optional userOpt = userDao.findById(userId); if (userOpt.isPresent()) { userDao.delete(userOpt.get()); @@ -124,19 +125,19 @@ public DeleteUserResponseDto deleteUser(String userId) { } @Override - public GetAllProjectResponseDto getAllProject() { + public GetAllProjectResponseDto getAllProject(String adminId) { List projects = projectDao.findAll(); return new GetAllProjectResponseDto(projects); } @Override - public GetAllUserResponseDto getAllUser() { + public GetAllUserResponseDto getAllUser(String adminId) { List users = userDao.findAll(); return new GetAllUserResponseDto(users); } @Override - public UpdateProjectAdminResponseDto updateProject(String projectId, String name, String description, + public UpdateProjectAdminResponseDto updateProject(String adminId, String projectId, String name, String description, String img, List users, int progress, int leftChanceForUserstory) { @@ -169,7 +170,7 @@ public UpdateProjectAdminResponseDto updateProject(String projectId, String name } @Override - public UpdateUserResponseDto updateUser(String userId, String email, String name, UserAccountStatus status, + public UpdateUserResponseDto updateUser(String adminId, String userId, String email, String name, UserAccountStatus status, String profileImg, List projectIds) { Optional userOpt = userDao.findById(userId); @@ -189,7 +190,7 @@ public UpdateUserResponseDto updateUser(String userId, String email, String name } @Override - public SearchUserAdminResponseDto searchUsers(String status, String searchType, String searchText) { + public SearchUserAdminResponseDto searchUsers(String adminId, String status, String searchType, String searchText) { List users = userDao.findAll(); List userWithProjects = users.stream() @@ -214,6 +215,7 @@ public SearchUserAdminResponseDto searchUsers(String status, String searchType, @Override public SearchProjectAdminResponseDto searchProjects( + String adminId, String name, String userId, Integer leftChanceForUserstory, @@ -278,7 +280,7 @@ public SearchProjectAdminResponseDto searchProjects( } @Override - public GetChatgptPriceResponseDto getChatgptPrice(){ + public GetChatgptPriceResponseDto getChatgptPrice(String adminId){ return new GetChatgptPriceResponseDto("3.2","4.5","10.4","11.2","40.3"); } } diff --git a/src/main/java/com/syncd/exceptions/ValidationMessages.java b/src/main/java/com/syncd/exceptions/ValidationMessages.java index 593df90..b9c638c 100644 --- a/src/main/java/com/syncd/exceptions/ValidationMessages.java +++ b/src/main/java/com/syncd/exceptions/ValidationMessages.java @@ -8,6 +8,7 @@ public class ValidationMessages { public static final String PROJECT_ID_NOT_BLANK = "Project ID must not be blank"; public static final String PROJECT_NAME_NOT_BLANK = "Project Name must not be blank"; public static final String USER_ID_NOT_BLANK = "User ID cannot be blank"; + public static final String ADMIN_ID_NOT_BLANK = "Admin ID cannot be blank"; public static final String ROOM_ID_NOT_BLANK = "ROOM ID cannot be blank"; public static final String PROJECT_PROGRESS_NOT_NULL = "Project progress must not be null"; public static final String SCENARIOS_NOT_NULL = "Scenarios cannot be null";