diff --git a/src/main/java/com/kamco/cd/kamcoback/auth/CustomAuthenticationProvider.java b/src/main/java/com/kamco/cd/kamcoback/auth/CustomAuthenticationProvider.java index 33b440ad..c89f793e 100644 --- a/src/main/java/com/kamco/cd/kamcoback/auth/CustomAuthenticationProvider.java +++ b/src/main/java/com/kamco/cd/kamcoback/auth/CustomAuthenticationProvider.java @@ -25,7 +25,7 @@ public class CustomAuthenticationProvider implements AuthenticationProvider { // 1. 유저 조회 MemberEntity member = membersRepository - .findByEmployeeNo(username) + .findByUserId(username) .orElseThrow(() -> new BadCredentialsException("ID 또는 비밀번호가 일치하지 않습니다.")); // 2. jBCrypt + 커스텀 salt 로 저장된 패스워드 비교 diff --git a/src/main/java/com/kamco/cd/kamcoback/auth/CustomUserDetails.java b/src/main/java/com/kamco/cd/kamcoback/auth/CustomUserDetails.java index deac82c7..b65be3f0 100644 --- a/src/main/java/com/kamco/cd/kamcoback/auth/CustomUserDetails.java +++ b/src/main/java/com/kamco/cd/kamcoback/auth/CustomUserDetails.java @@ -16,7 +16,6 @@ public class CustomUserDetails implements UserDetails { @Override public Collection getAuthorities() { - // 권한을 Member에서 가져오는 경우 바꾸면 됩니다 — 일단 기본값 return Collections.emptyList(); } diff --git a/src/main/java/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.java b/src/main/java/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.java index 2071af47..3827603b 100644 --- a/src/main/java/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.java @@ -1,5 +1,9 @@ package com.kamco.cd.kamcoback.code.dto; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.kamco.cd.kamcoback.common.utils.html.HtmlEscapeDeserializer; +import com.kamco.cd.kamcoback.common.utils.html.HtmlUnescapeSerializer; import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotEmpty; @@ -27,8 +31,13 @@ public class CommonCodeDto { private boolean used; private Long parentId; + @JsonDeserialize(using = HtmlEscapeDeserializer.class) private String props1; + + @JsonDeserialize(using = HtmlEscapeDeserializer.class) private String props2; + + @JsonDeserialize(using = HtmlEscapeDeserializer.class) private String props3; } @@ -42,8 +51,13 @@ public class CommonCodeDto { private String description; private boolean used; + @JsonDeserialize(using = HtmlEscapeDeserializer.class) private String props1; + + @JsonDeserialize(using = HtmlEscapeDeserializer.class) private String props2; + + @JsonDeserialize(using = HtmlEscapeDeserializer.class) private String props3; } @@ -83,8 +97,13 @@ public class CommonCodeDto { @JsonFormatDttm private ZonedDateTime updatedDttm; + @JsonSerialize(using = HtmlUnescapeSerializer.class) private String props1; + + @JsonSerialize(using = HtmlUnescapeSerializer.class) private String props2; + + @JsonSerialize(using = HtmlUnescapeSerializer.class) private String props3; @JsonFormatDttm private ZonedDateTime deletedDttm; diff --git a/src/main/java/com/kamco/cd/kamcoback/common/utils/html/HtmlEscapeDeserializer.java b/src/main/java/com/kamco/cd/kamcoback/common/utils/html/HtmlEscapeDeserializer.java new file mode 100644 index 00000000..7496a2d8 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/common/utils/html/HtmlEscapeDeserializer.java @@ -0,0 +1,20 @@ +package com.kamco.cd.kamcoback.common.utils.html; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import java.io.IOException; +import org.springframework.web.util.HtmlUtils; + +public class HtmlEscapeDeserializer extends JsonDeserializer { + + @Override + public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + String value = jsonParser.getValueAsString(); + System.out.println("🔥 HtmlEscapeDeserializer 실행됨: " + value); + System.out.println("convert : " + (value == null ? null : HtmlUtils.htmlEscape(value))); + return value == null ? null : HtmlUtils.htmlEscape(value); + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/common/utils/html/HtmlUnescapeSerializer.java b/src/main/java/com/kamco/cd/kamcoback/common/utils/html/HtmlUnescapeSerializer.java new file mode 100644 index 00000000..181a0eff --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/common/utils/html/HtmlUnescapeSerializer.java @@ -0,0 +1,20 @@ +package com.kamco.cd.kamcoback.common.utils.html; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import java.io.IOException; +import org.springframework.web.util.HtmlUtils; + +public class HtmlUnescapeSerializer extends JsonSerializer { + @Override + public void serialize( + String value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) + throws IOException { + if (value == null) { + jsonGenerator.writeNull(); + } else { + jsonGenerator.writeString(HtmlUtils.htmlUnescape(value)); + } + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java b/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java index 9133902a..a30842d5 100644 --- a/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java +++ b/src/main/java/com/kamco/cd/kamcoback/config/GlobalExceptionHandler.java @@ -241,11 +241,8 @@ public class GlobalExceptionHandler { String codeName = ""; switch (e.getField()) { - case EMPLOYEE_NO -> { - codeName = "DUPLICATE_EMPLOYEEID"; - } - case EMAIL -> { - codeName = "DUPLICATE_EMAIL"; + case USER_ID -> { + codeName = "DUPLICATE_DATA"; } default -> { codeName = "DUPLICATE_DATA"; diff --git a/src/main/java/com/kamco/cd/kamcoback/members/AdminApiController.java b/src/main/java/com/kamco/cd/kamcoback/members/AdminApiController.java index 72131dae..6839e605 100644 --- a/src/main/java/com/kamco/cd/kamcoback/members/AdminApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/members/AdminApiController.java @@ -16,11 +16,12 @@ import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +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; -@Tag(name = "회원정보 관리자 관리", description = "회원정보 관리자 관리 API") +@Tag(name = "관리자 관리", description = "관리자 관리 API") @RestController @RequestMapping("/api/admin/members") @RequiredArgsConstructor @@ -28,12 +29,12 @@ public class AdminApiController { private final AdminService adminService; - @Operation(summary = "회원가입", description = "회원가입") + @Operation(summary = "관리자 계정 등록", description = "관리자 계정 등록") @ApiResponses( value = { @ApiResponse( responseCode = "201", - description = "회원가입 성공", + description = "등록 성공", content = @Content( mediaType = "application/json", @@ -45,7 +46,7 @@ public class AdminApiController { @PostMapping("/join") public ApiResponseDto saveMember( @io.swagger.v3.oas.annotations.parameters.RequestBody( - description = "회원가입", + description = "관리자 계정 등록", required = true, content = @Content( @@ -58,94 +59,34 @@ public class AdminApiController { return ApiResponseDto.createOK(adminService.saveMember(addReq)); } - @Operation(summary = "역할 추가", description = "uuid 기준으로 역할 추가") + @Operation(summary = "관리자 계정 수정", description = "관리자 계정 수정") @ApiResponses( value = { @ApiResponse( responseCode = "201", - description = "역할 추가", + description = "수정 성공", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = UUID.class))), + schema = @Schema(implementation = Long.class))), @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) }) - @PostMapping("/roles/add") - public ApiResponseDto saveRoles( + @PutMapping("/{uuid}") + public ApiResponseDto updateMembers( @io.swagger.v3.oas.annotations.parameters.RequestBody( - description = "역할 추가", + description = "관리자 계정 수정", required = true, content = @Content( mediaType = "application/json", - schema = @Schema(implementation = MembersDto.RolesDto.class))) - @RequestBody - @Valid - MembersDto.RolesDto rolesDto) { - adminService.saveRoles(rolesDto); - return ApiResponseDto.createOK(rolesDto.getUuid()); - } - - @Operation(summary = "역할 삭제", description = "uuid 기준으로 역할 삭제") - @ApiResponses( - value = { - @ApiResponse( - responseCode = "201", - description = "역할 삭제", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = UUID.class))), - @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), - @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), - @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) - }) - @DeleteMapping("/roles/rm") - public ApiResponseDto deleteRoles( - @io.swagger.v3.oas.annotations.parameters.RequestBody( - description = "역할 삭제", - required = true, - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = MembersDto.RolesDto.class))) - @RequestBody - @Valid - MembersDto.RolesDto rolesDto) { - adminService.deleteRoles(rolesDto); - return ApiResponseDto.createOK(rolesDto.getUuid()); - } - - @Operation(summary = "상태 수정", description = "상태 수정") - @ApiResponses( - value = { - @ApiResponse( - responseCode = "201", - description = "상태 수정", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = UUID.class))), - @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), - @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), - @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) - }) - @PatchMapping("{uuid}/status") - public ApiResponseDto updateStatus( - @io.swagger.v3.oas.annotations.parameters.RequestBody( - description = "상태 수정", - required = true, - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = MembersDto.StatusDto.class))) + schema = @Schema(implementation = MembersDto.UpdateReq.class))) @PathVariable UUID uuid, - @RequestBody @Valid MembersDto.StatusDto statusDto) { - adminService.updateStatus(uuid, statusDto); - return ApiResponseDto.createOK(uuid); + @RequestBody MembersDto.UpdateReq updateReq) { + adminService.updateMembers(uuid, updateReq); + return ApiResponseDto.createOK(UUID.randomUUID()); } @Operation(summary = "회원 탈퇴", description = "회원 탈퇴") diff --git a/src/main/java/com/kamco/cd/kamcoback/members/AuthController.java b/src/main/java/com/kamco/cd/kamcoback/members/AuthController.java index f76ebf0e..2fe356b8 100644 --- a/src/main/java/com/kamco/cd/kamcoback/members/AuthController.java +++ b/src/main/java/com/kamco/cd/kamcoback/members/AuthController.java @@ -86,7 +86,7 @@ public class AuthController { .build(); response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString()); - return ApiResponseDto.ok(new TokenResponse(accessToken)); + return ApiResponseDto.ok(new TokenResponse(accessToken, refreshToken)); } @PostMapping("/refresh") @@ -133,7 +133,7 @@ public class AuthController { .build(); response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString()); - return ResponseEntity.ok(new TokenResponse(newAccessToken)); + return ResponseEntity.ok(new TokenResponse(newAccessToken, newRefreshToken)); } @PostMapping("/logout") @@ -166,5 +166,5 @@ public class AuthController { return ApiResponseDto.createOK(ResponseEntity.noContent().build()); } - public record TokenResponse(String accessToken) {} + public record TokenResponse(String accessToken, String refreshToken) {} } diff --git a/src/main/java/com/kamco/cd/kamcoback/members/MembersApiController.java b/src/main/java/com/kamco/cd/kamcoback/members/MembersApiController.java index 1da4a74f..08114c6f 100644 --- a/src/main/java/com/kamco/cd/kamcoback/members/MembersApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/members/MembersApiController.java @@ -65,7 +65,7 @@ public class MembersApiController { @PutMapping("/{uuid}") public ApiResponseDto updateMember( @PathVariable UUID uuid, @RequestBody MembersDto.UpdateReq updateReq) { - membersService.updateMember(uuid, updateReq); + // membersService.updateMember(uuid, updateReq); return ApiResponseDto.createOK(uuid); } } diff --git a/src/main/java/com/kamco/cd/kamcoback/members/dto/MemberDetails.java b/src/main/java/com/kamco/cd/kamcoback/members/dto/MemberDetails.java index ad945dc9..9c1b06f4 100644 --- a/src/main/java/com/kamco/cd/kamcoback/members/dto/MemberDetails.java +++ b/src/main/java/com/kamco/cd/kamcoback/members/dto/MemberDetails.java @@ -32,7 +32,7 @@ public class MemberDetails implements UserDetails { public String getUsername() { // 로그인 ID 로 무엇을 쓸지 선택 // 1) 이메일 로그인: - return member.getEmail(); + return member.getUserId(); // 2) 사번으로 로그인하고 싶으면: // return member.getEmployeeNo(); diff --git a/src/main/java/com/kamco/cd/kamcoback/members/dto/MembersDto.java b/src/main/java/com/kamco/cd/kamcoback/members/dto/MembersDto.java index 4997a12d..b42c1d5e 100644 --- a/src/main/java/com/kamco/cd/kamcoback/members/dto/MembersDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/members/dto/MembersDto.java @@ -90,28 +90,34 @@ public class MembersDto { @Setter public static class AddReq { - @Schema(description = "사번", example = "11111") + @Schema(description = "관리자 유형", example = "ROLE_ADMIN") @NotBlank @Size(max = 50) - private String employeeNo; + private String userRole; @Schema(description = "이름", example = "홍길동") @NotBlank @Size(min = 2, max = 100) private String name; - @Schema(hidden = true) - private String password; + @Schema(description = "ID", example = "gildong") + @NotBlank + @Size(min = 2, max = 50) + private String userId; - @Schema(description = "이메일", example = "gildong@daum.net") - @Size(max = 100) - private String email; + @Schema(description = "임시 비밀번호", example = "q!w@e#r4") + private String tempPassword; - public AddReq(String employeeNo, String name, String password, String email) { - this.employeeNo = employeeNo; + @Schema(description = "사번", example = "123456") + private String employeeNo; + + public AddReq( + String userRole, String name, String userId, String tempPassword, String employeeNo) { + this.userRole = userRole; this.name = name; - this.password = password; - this.email = email; + this.userId = userId; + this.tempPassword = tempPassword; + this.employeeNo = employeeNo; } } @@ -129,17 +135,12 @@ public class MembersDto { @Schema(description = "패스워드", example = "") @Size(max = 255) - private String password; + private String tempPassword; - @Schema(description = "이메일", example = "gildong@daum.net") - @Size(max = 100) - private String email; - - public UpdateReq(String employeeNo, String name, String password, String email) { + public UpdateReq(String employeeNo, String name, String tempPassword) { this.employeeNo = employeeNo; this.name = name; - this.password = password; - this.email = email; + this.tempPassword = tempPassword; } } diff --git a/src/main/java/com/kamco/cd/kamcoback/members/dto/SignInRequest.java b/src/main/java/com/kamco/cd/kamcoback/members/dto/SignInRequest.java index d6c802be..a13992b3 100644 --- a/src/main/java/com/kamco/cd/kamcoback/members/dto/SignInRequest.java +++ b/src/main/java/com/kamco/cd/kamcoback/members/dto/SignInRequest.java @@ -11,7 +11,7 @@ import lombok.ToString; @ToString(exclude = "password") public class SignInRequest { - @Schema(description = "사번", example = "11111") + @Schema(description = "사용자 ID", example = "admin") private String username; @Schema(description = "비밀번호", example = "kamco1234!") diff --git a/src/main/java/com/kamco/cd/kamcoback/members/exception/MemberException.java b/src/main/java/com/kamco/cd/kamcoback/members/exception/MemberException.java index 55c83419..b8dce363 100644 --- a/src/main/java/com/kamco/cd/kamcoback/members/exception/MemberException.java +++ b/src/main/java/com/kamco/cd/kamcoback/members/exception/MemberException.java @@ -10,8 +10,7 @@ public class MemberException { public static class DuplicateMemberException extends RuntimeException { public enum Field { - EMPLOYEE_NO, - EMAIL, + USER_ID, DEFAULT } diff --git a/src/main/java/com/kamco/cd/kamcoback/members/service/AdminService.java b/src/main/java/com/kamco/cd/kamcoback/members/service/AdminService.java index 7174d9b5..948d2454 100644 --- a/src/main/java/com/kamco/cd/kamcoback/members/service/AdminService.java +++ b/src/main/java/com/kamco/cd/kamcoback/members/service/AdminService.java @@ -6,7 +6,6 @@ import com.kamco.cd.kamcoback.postgres.core.MembersCoreService; import java.util.UUID; import lombok.RequiredArgsConstructor; import org.mindrot.jbcrypt.BCrypt; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -17,9 +16,6 @@ public class AdminService { private final MembersCoreService membersCoreService; - @Value("${member.init_password}") - private String password; - /** * 회원가입 * @@ -29,14 +25,18 @@ public class AdminService { @Transactional public Long saveMember(MembersDto.AddReq addReq) { // salt 생성, 사번이 salt - String salt = BCryptSaltGenerator.generateSaltWithEmployeeNo(addReq.getEmployeeNo().trim()); + String salt = BCryptSaltGenerator.generateSaltWithEmployeeNo(addReq.getUserId().trim()); // 패스워드 암호화, 초기 패스워드 고정 - String hashedPassword = BCrypt.hashpw(password, salt); - addReq.setPassword(hashedPassword); + String hashedPassword = BCrypt.hashpw(addReq.getTempPassword(), salt); + addReq.setTempPassword(hashedPassword); return membersCoreService.saveMembers(addReq); } + public void updateMembers(UUID uuid, MembersDto.UpdateReq updateReq) { + membersCoreService.updateMembers(uuid, updateReq); + } + /** * 역할 추가 * @@ -44,7 +44,7 @@ public class AdminService { */ @Transactional public void saveRoles(MembersDto.RolesDto rolesDto) { - membersCoreService.saveRoles(rolesDto); + // membersCoreService.saveRoles(rolesDto); } /** @@ -53,7 +53,7 @@ public class AdminService { * @param rolesDto */ public void deleteRoles(MembersDto.RolesDto rolesDto) { - membersCoreService.deleteRoles(rolesDto); + // membersCoreService.deleteRoles(rolesDto); } /** @@ -62,7 +62,7 @@ public class AdminService { * @param statusDto */ public void updateStatus(UUID uuid, MembersDto.StatusDto statusDto) { - membersCoreService.updateStatus(uuid, statusDto); + // membersCoreService.updateStatus(uuid, statusDto); } /** @@ -71,7 +71,7 @@ public class AdminService { * @param uuid */ public void deleteAccount(UUID uuid) { - membersCoreService.deleteAccount(uuid); + // membersCoreService.deleteAccount(uuid); } /** @@ -80,6 +80,6 @@ public class AdminService { * @param id */ public void resetPassword(Long id) { - membersCoreService.resetPassword(id); + // membersCoreService.resetPassword(id); } } diff --git a/src/main/java/com/kamco/cd/kamcoback/members/service/MembersService.java b/src/main/java/com/kamco/cd/kamcoback/members/service/MembersService.java index 383097bd..fe85e06c 100644 --- a/src/main/java/com/kamco/cd/kamcoback/members/service/MembersService.java +++ b/src/main/java/com/kamco/cd/kamcoback/members/service/MembersService.java @@ -1,17 +1,11 @@ package com.kamco.cd.kamcoback.members.service; -import com.kamco.cd.kamcoback.auth.BCryptSaltGenerator; -import com.kamco.cd.kamcoback.common.exception.CustomApiException; import com.kamco.cd.kamcoback.members.dto.MembersDto; import com.kamco.cd.kamcoback.members.dto.MembersDto.Basic; import com.kamco.cd.kamcoback.postgres.core.MembersCoreService; -import java.util.UUID; import java.util.regex.Pattern; import lombok.RequiredArgsConstructor; -import org.apache.commons.lang3.StringUtils; -import org.mindrot.jbcrypt.BCrypt; import org.springframework.data.domain.Page; -import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -29,7 +23,7 @@ public class MembersService { * @return */ public Page findByMembers(MembersDto.SearchReq searchReq) { - return membersCoreService.findByMembers(searchReq); + return null; // membersCoreService.findByMembers(searchReq); } /** @@ -38,29 +32,29 @@ public class MembersService { * @param uuid * @param updateReq */ - public void updateMember(UUID uuid, MembersDto.UpdateReq updateReq) { - - if (StringUtils.isNotBlank(updateReq.getPassword())) { - - if (!this.isValidPassword(updateReq.getPassword())) { - throw new CustomApiException("WRONG_PASSWORD", HttpStatus.BAD_REQUEST); - } - - if (StringUtils.isBlank(updateReq.getEmployeeNo())) { - throw new CustomApiException("BAD_REQUEST", HttpStatus.BAD_REQUEST); - } - - // salt 생성, 사번이 salt - String salt = - BCryptSaltGenerator.generateSaltWithEmployeeNo(updateReq.getEmployeeNo().trim()); - - // 패스워드 암호화, 초기 패스워드 고정 - String hashedPassword = BCrypt.hashpw(updateReq.getPassword(), salt); - updateReq.setPassword(hashedPassword); - } - - membersCoreService.updateMembers(uuid, updateReq); - } + // public void updateMember(UUID uuid, MembersDto.UpdateReq updateReq) { + // + // if (StringUtils.isNotBlank(updateReq.getPassword())) { + // + // if (!this.isValidPassword(updateReq.getPassword())) { + // throw new CustomApiException("WRONG_PASSWORD", HttpStatus.BAD_REQUEST); + // } + // + // if (StringUtils.isBlank(updateReq.getEmployeeNo())) { + // throw new CustomApiException("BAD_REQUEST", HttpStatus.BAD_REQUEST); + // } + // + // // salt 생성, 사번이 salt + // String salt = + // BCryptSaltGenerator.generateSaltWithEmployeeNo(updateReq.getEmployeeNo().trim()); + // + // // 패스워드 암호화, 초기 패스워드 고정 + // String hashedPassword = BCrypt.hashpw(updateReq.getPassword(), salt); + // updateReq.setPassword(hashedPassword); + // } + // + // membersCoreService.updateMembers(uuid, updateReq); + // } /** * 대문자 1개 이상 소문자 1개 이상 숫자 1개 이상 특수문자(!@#$) 1개 이상 diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java index e58e8764..d6acd8a9 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java @@ -1,24 +1,16 @@ package com.kamco.cd.kamcoback.postgres.core; -import com.kamco.cd.kamcoback.auth.BCryptSaltGenerator; import com.kamco.cd.kamcoback.members.dto.MembersDto; -import com.kamco.cd.kamcoback.members.exception.MemberException; +import com.kamco.cd.kamcoback.members.dto.MembersDto.AddReq; +import com.kamco.cd.kamcoback.members.exception.MemberException.DuplicateMemberException; +import com.kamco.cd.kamcoback.members.exception.MemberException.DuplicateMemberException.Field; import com.kamco.cd.kamcoback.members.exception.MemberException.MemberNotFoundException; -import com.kamco.cd.kamcoback.postgres.entity.MemberArchivedEntity; -import com.kamco.cd.kamcoback.postgres.entity.MemberArchivedEntityId; import com.kamco.cd.kamcoback.postgres.entity.MemberEntity; -import com.kamco.cd.kamcoback.postgres.entity.MemberRoleEntity; -import com.kamco.cd.kamcoback.postgres.entity.MemberRoleEntityId; import com.kamco.cd.kamcoback.postgres.repository.members.MembersArchivedRepository; import com.kamco.cd.kamcoback.postgres.repository.members.MembersRepository; -import com.kamco.cd.kamcoback.postgres.repository.members.MembersRoleRepository; -import java.time.ZonedDateTime; import java.util.UUID; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; -import org.mindrot.jbcrypt.BCrypt; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; @Service @@ -26,34 +18,25 @@ import org.springframework.stereotype.Service; public class MembersCoreService { private final MembersRepository membersRepository; - private final MembersRoleRepository memberRoleRepository; private final MembersArchivedRepository memberArchivedRepository; - @Value("${member.init_password}") - private String password; - /** * 회원가입 * * @param addReq * @return */ - public Long saveMembers(MembersDto.AddReq addReq) { - if (membersRepository.existsByEmployeeNo(addReq.getEmployeeNo())) { - throw new MemberException.DuplicateMemberException( - MemberException.DuplicateMemberException.Field.EMPLOYEE_NO, addReq.getEmployeeNo()); + public Long saveMembers(AddReq addReq) { + if (membersRepository.existsByUserId(addReq.getUserId())) { + throw new DuplicateMemberException(Field.USER_ID, addReq.getUserId()); } - - if (membersRepository.existsByEmail(addReq.getEmail())) { - throw new MemberException.DuplicateMemberException( - MemberException.DuplicateMemberException.Field.EMAIL, addReq.getEmail()); - } - MemberEntity memberEntity = new MemberEntity(); - memberEntity.setEmployeeNo(addReq.getEmployeeNo()); + memberEntity.setUserId(addReq.getUserId()); + memberEntity.setUserRole(addReq.getUserRole()); + memberEntity.setTempPassword(addReq.getTempPassword()); + memberEntity.setPassword(addReq.getTempPassword()); memberEntity.setName(addReq.getName()); - memberEntity.setPassword(addReq.getPassword()); - memberEntity.setEmail(addReq.getEmail()); + memberEntity.setEmployeeNo(addReq.getEmployeeNo()); return membersRepository.save(memberEntity).getId(); } @@ -66,141 +49,141 @@ public class MembersCoreService { */ public void updateMembers(UUID uuid, MembersDto.UpdateReq updateReq) { MemberEntity memberEntity = - membersRepository.findByUUID(uuid).orElseThrow(() -> new MemberNotFoundException()); + membersRepository.findByUUID(uuid).orElseThrow(MemberNotFoundException::new); + + if (StringUtils.isNotBlank(updateReq.getName())) { + memberEntity.setName(updateReq.getName()); + } + + if (StringUtils.isNotBlank(updateReq.getTempPassword())) { + memberEntity.setTempPassword(updateReq.getTempPassword()); + memberEntity.setPassword(updateReq.getTempPassword()); + } if (StringUtils.isNotBlank(memberEntity.getEmployeeNo())) { memberEntity.setEmployeeNo(updateReq.getEmployeeNo()); } - if (StringUtils.isNotBlank(updateReq.getName())) { - memberEntity.setName(updateReq.getName()); - } - if (StringUtils.isNotBlank(updateReq.getPassword())) { - memberEntity.setPassword(updateReq.getPassword()); - } - if (StringUtils.isNotBlank(updateReq.getEmail())) { - memberEntity.setEmail(updateReq.getEmail()); - } - - membersRepository.save(memberEntity); - } - - /** - * 역할 추가 - * - * @param rolesDto - */ - public void saveRoles(MembersDto.RolesDto rolesDto) { - - MemberEntity memberEntity = - membersRepository - .findByUUID(rolesDto.getUuid()) - .orElseThrow(() -> new MemberNotFoundException()); - - if (memberRoleRepository.findByUuidAndRoleName(rolesDto)) { - throw new MemberException.DuplicateMemberException( - MemberException.DuplicateMemberException.Field.DEFAULT, "중복된 역할이 있습니다."); - } - - MemberRoleEntityId memberRoleEntityId = new MemberRoleEntityId(); - memberRoleEntityId.setMemberUuid(rolesDto.getUuid()); - memberRoleEntityId.setRoleName(rolesDto.getRoleName()); - - MemberRoleEntity memberRoleEntity = new MemberRoleEntity(); - memberRoleEntity.setId(memberRoleEntityId); - memberRoleEntity.setMemberUuid(memberEntity); - memberRoleEntity.setCreatedDttm(ZonedDateTime.now()); - memberRoleRepository.save(memberRoleEntity); - } - - /** - * 역할 삭제 - * - * @param rolesDto - */ - public void deleteRoles(MembersDto.RolesDto rolesDto) { - MemberEntity memberEntity = - membersRepository - .findByUUID(rolesDto.getUuid()) - .orElseThrow(() -> new MemberNotFoundException()); - - MemberRoleEntityId memberRoleEntityId = new MemberRoleEntityId(); - memberRoleEntityId.setMemberUuid(rolesDto.getUuid()); - memberRoleEntityId.setRoleName(rolesDto.getRoleName()); - - MemberRoleEntity memberRoleEntity = new MemberRoleEntity(); - memberRoleEntity.setId(memberRoleEntityId); - memberRoleEntity.setMemberUuid(memberEntity); - - memberRoleRepository.delete(memberRoleEntity); - } - - /** - * 상태 수정 - * - * @param statusDto - */ - public void updateStatus(UUID uuid, MembersDto.StatusDto statusDto) { - MemberEntity memberEntity = - membersRepository.findByUUID(uuid).orElseThrow(() -> new MemberNotFoundException()); - - memberEntity.setStatus(statusDto.getStatus()); - memberEntity.setUpdatedDttm(ZonedDateTime.now()); - membersRepository.save(memberEntity); - } - - /** - * 회원 탈퇴 - * - * @param uuid - */ - public void deleteAccount(UUID uuid) { - MemberEntity memberEntity = - membersRepository.findByUUID(uuid).orElseThrow(() -> new MemberNotFoundException()); - - MemberArchivedEntityId memberArchivedEntityId = new MemberArchivedEntityId(); - memberArchivedEntityId.setUserId(memberEntity.getId()); - memberArchivedEntityId.setUuid(memberEntity.getUuid()); - - MemberArchivedEntity memberArchivedEntity = new MemberArchivedEntity(); - memberArchivedEntity.setId(memberArchivedEntityId); - memberArchivedEntity.setEmployeeNo(memberEntity.getEmployeeNo()); - memberArchivedEntity.setName(memberEntity.getName()); - memberArchivedEntity.setPassword(memberEntity.getPassword()); - memberArchivedEntity.setEmail(memberEntity.getEmail()); - memberArchivedEntity.setStatus(memberEntity.getStatus()); - memberArchivedEntity.setCreatedDttm(memberEntity.getCreatedDttm()); - memberArchivedEntity.setArchivedDttm(ZonedDateTime.now()); - memberArchivedRepository.save(memberArchivedEntity); - - memberEntity.setStatus("ARCHIVED"); - memberEntity.setName("**********"); - memberEntity.setEmployeeNo("**********"); - memberEntity.setPassword("**********"); - memberEntity.setEmail("**********"); - memberEntity.setUpdatedDttm(ZonedDateTime.now()); - membersRepository.save(memberEntity); - } - - /** - * 패스워드 초기화 - * - * @param id - */ - public void resetPassword(Long id) { - MemberEntity memberEntity = - membersRepository.findById(id).orElseThrow(() -> new MemberNotFoundException()); - - String salt = - BCryptSaltGenerator.generateSaltWithEmployeeNo(memberEntity.getEmployeeNo().trim()); - // 패스워드 암호화, 초기 패스워드 고정 - String hashedPassword = BCrypt.hashpw(password, salt); - - memberEntity.setPassword(hashedPassword); - memberEntity.setStatus("INACTIVE"); - memberEntity.setUpdatedDttm(ZonedDateTime.now()); membersRepository.save(memberEntity); } + // + // /** + // * 역할 추가 + // * + // * @param rolesDto + // */ + // public void saveRoles(MembersDto.RolesDto rolesDto) { + // + // MemberEntity memberEntity = + // membersRepository + // .findByUUID(rolesDto.getUuid()) + // .orElseThrow(() -> new MemberNotFoundException()); + // + // if (memberRoleRepository.findByUuidAndRoleName(rolesDto)) { + // throw new MemberException.DuplicateMemberException( + // MemberException.DuplicateMemberException.Field.DEFAULT, "중복된 역할이 있습니다."); + // } + // + // MemberRoleEntityId memberRoleEntityId = new MemberRoleEntityId(); + // memberRoleEntityId.setMemberUuid(rolesDto.getUuid()); + // memberRoleEntityId.setRoleName(rolesDto.getRoleName()); + // + // MemberRoleEntity memberRoleEntity = new MemberRoleEntity(); + // memberRoleEntity.setId(memberRoleEntityId); + // memberRoleEntity.setMemberUuid(memberEntity); + // memberRoleEntity.setCreatedDttm(ZonedDateTime.now()); + // memberRoleRepository.save(memberRoleEntity); + // } + // + // /** + // * 역할 삭제 + // * + // * @param rolesDto + // */ + // public void deleteRoles(MembersDto.RolesDto rolesDto) { + // MemberEntity memberEntity = + // membersRepository + // .findByUUID(rolesDto.getUuid()) + // .orElseThrow(() -> new MemberNotFoundException()); + // + // MemberRoleEntityId memberRoleEntityId = new MemberRoleEntityId(); + // memberRoleEntityId.setMemberUuid(rolesDto.getUuid()); + // memberRoleEntityId.setRoleName(rolesDto.getRoleName()); + // + // MemberRoleEntity memberRoleEntity = new MemberRoleEntity(); + // memberRoleEntity.setId(memberRoleEntityId); + // memberRoleEntity.setMemberUuid(memberEntity); + // + // memberRoleRepository.delete(memberRoleEntity); + // } + // + // /** + // * 상태 수정 + // * + // * @param statusDto + // */ + // public void updateStatus(UUID uuid, MembersDto.StatusDto statusDto) { + // MemberEntity memberEntity = + // membersRepository.findByUUID(uuid).orElseThrow(() -> new MemberNotFoundException()); + // + // memberEntity.setStatus(statusDto.getStatus()); + // memberEntity.setUpdatedDttm(ZonedDateTime.now()); + // membersRepository.save(memberEntity); + // } + // + // /** + // * 회원 탈퇴 + // * + // * @param uuid + // */ + // public void deleteAccount(UUID uuid) { + // MemberEntity memberEntity = + // membersRepository.findByUUID(uuid).orElseThrow(() -> new MemberNotFoundException()); + // + // MemberArchivedEntityId memberArchivedEntityId = new MemberArchivedEntityId(); + // memberArchivedEntityId.setUserId(memberEntity.getId()); + // memberArchivedEntityId.setUuid(memberEntity.getUuid()); + // + // MemberArchivedEntity memberArchivedEntity = new MemberArchivedEntity(); + // memberArchivedEntity.setId(memberArchivedEntityId); + // memberArchivedEntity.setEmployeeNo(memberEntity.getEmployeeNo()); + // memberArchivedEntity.setName(memberEntity.getName()); + // memberArchivedEntity.setPassword(memberEntity.getPassword()); + // memberArchivedEntity.setEmail(memberEntity.getEmail()); + // memberArchivedEntity.setStatus(memberEntity.getStatus()); + // memberArchivedEntity.setCreatedDttm(memberEntity.getCreatedDttm()); + // memberArchivedEntity.setArchivedDttm(ZonedDateTime.now()); + // memberArchivedRepository.save(memberArchivedEntity); + // + // memberEntity.setStatus("ARCHIVED"); + // memberEntity.setName("**********"); + // memberEntity.setEmployeeNo("**********"); + // memberEntity.setPassword("**********"); + // memberEntity.setEmail("**********"); + // memberEntity.setUpdatedDttm(ZonedDateTime.now()); + // membersRepository.save(memberEntity); + // } + // + // /** + // * 패스워드 초기화 + // * + // * @param id + // */ + // public void resetPassword(Long id) { + // MemberEntity memberEntity = + // membersRepository.findById(id).orElseThrow(() -> new MemberNotFoundException()); + // + // String salt = + // BCryptSaltGenerator.generateSaltWithEmployeeNo(memberEntity.getEmployeeNo().trim()); + // // 패스워드 암호화, 초기 패스워드 고정 + // String hashedPassword = BCrypt.hashpw(password, salt); + // + // memberEntity.setPassword(hashedPassword); + // memberEntity.setStatus("INACTIVE"); + // memberEntity.setUpdatedDttm(ZonedDateTime.now()); + // membersRepository.save(memberEntity); + // } + // /** * 회원목록 조회 @@ -208,7 +191,7 @@ public class MembersCoreService { * @param searchReq * @return */ - public Page findByMembers(MembersDto.SearchReq searchReq) { - return membersRepository.findByMembers(searchReq); - } + // public Page findByMembers(MembersDto.SearchReq searchReq) { + // return membersRepository.findByMembers(searchReq); + // } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MemberEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MemberEntity.java index 744bd78b..f9cf9ef8 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MemberEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MemberEntity.java @@ -5,13 +5,10 @@ import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; import jakarta.persistence.Table; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; import java.time.ZonedDateTime; -import java.util.LinkedHashSet; -import java.util.Set; import java.util.UUID; import lombok.Getter; import lombok.Setter; @@ -28,11 +25,24 @@ public class MemberEntity { @Column(name = "id", nullable = false) private Long id; - @Column(name = "uuid", nullable = false, insertable = false) - private UUID uuid; + @NotNull + @ColumnDefault("gen_random_uuid()") + @Column(name = "uuid", nullable = false) + private UUID uuid = UUID.randomUUID(); @Size(max = 50) - @Column(name = "employee_no", length = 50) + @NotNull + @Column(name = "user_role", nullable = false, length = 50) + private String userRole; + + @Size(max = 50) + @NotNull + @Column(name = "user_id", nullable = false, length = 50) + private String userId; + + @Size(max = 50) + @NotNull + @Column(name = "employee_no", nullable = false, length = 50) private String employeeNo; @Size(max = 100) @@ -40,26 +50,27 @@ public class MemberEntity { @Column(name = "name", nullable = false, length = 100) private String name; + @Size(max = 255) + @NotNull + @Column(name = "temp_password", nullable = false) + private String tempPassword; + @Size(max = 255) @NotNull @Column(name = "password", nullable = false) private String password; - @Size(max = 100) - @Column(name = "email", length = 100) - private String email; - @Size(max = 20) @ColumnDefault("'INACTIVE'") @Column(name = "status", length = 20) private String status = "INACTIVE"; - @Column(name = "created_dttm", nullable = false, insertable = false) - private ZonedDateTime createdDttm; + @NotNull + @ColumnDefault("now()") + @Column(name = "created_dttm", nullable = false) + private ZonedDateTime createdDttm = ZonedDateTime.now(); - @Column(name = "updated_dttm", nullable = false, insertable = false) - private ZonedDateTime updatedDttm; - - @OneToMany(mappedBy = "memberUuid") - private Set tbMemberRoles = new LinkedHashSet<>(); + @ColumnDefault("now()") + @Column(name = "updated_dttm") + private ZonedDateTime updatedDttm = ZonedDateTime.now(); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MemberRoleEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MemberRoleEntity.java deleted file mode 100644 index 8f5e98af..00000000 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MemberRoleEntity.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.kamco.cd.kamcoback.postgres.entity; - -import jakarta.persistence.Column; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; -import java.time.ZonedDateTime; -import lombok.Getter; -import lombok.Setter; -import org.hibernate.annotations.ColumnDefault; -import org.hibernate.annotations.OnDelete; -import org.hibernate.annotations.OnDeleteAction; - -@Getter -@Setter -@Entity -@Table(name = "tb_member_role") -public class MemberRoleEntity { - - @EmbeddedId private MemberRoleEntityId id; - - @ManyToOne(fetch = FetchType.LAZY, optional = false) - @OnDelete(action = OnDeleteAction.CASCADE) - @JoinColumn( - name = "member_uuid", - referencedColumnName = "uuid", - insertable = false, - updatable = false) - private MemberEntity memberUuid; - - @ColumnDefault("now()") - @Column(name = "created_dttm") - private ZonedDateTime createdDttm; -} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MemberRoleEntityId.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MemberRoleEntityId.java deleted file mode 100644 index 9d23c936..00000000 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MemberRoleEntityId.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.kamco.cd.kamcoback.postgres.entity; - -import jakarta.persistence.Column; -import jakarta.persistence.Embeddable; -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Size; -import java.io.Serializable; -import java.util.Objects; -import java.util.UUID; -import lombok.Getter; -import lombok.Setter; -import org.hibernate.Hibernate; - -@Getter -@Setter -@Embeddable -public class MemberRoleEntityId implements Serializable { - - private static final long serialVersionUID = 9130416001060414347L; - - @NotNull - @Column(name = "member_uuid", nullable = false) - private UUID memberUuid; - - @Size(max = 50) - @NotNull - @Column(name = "role_name", nullable = false, length = 50) - private String roleName; - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) { - return false; - } - MemberRoleEntityId entity = (MemberRoleEntityId) o; - return Objects.equals(this.memberUuid, entity.memberUuid) - && Objects.equals(this.roleName, entity.roleName); - } - - @Override - public int hashCode() { - return Objects.hash(memberUuid, roleName); - } -} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRepositoryCustom.java index 6b6cecc8..17f9ee43 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRepositoryCustom.java @@ -1,21 +1,20 @@ package com.kamco.cd.kamcoback.postgres.repository.members; -import com.kamco.cd.kamcoback.members.dto.MembersDto; -import com.kamco.cd.kamcoback.members.dto.MembersDto.Basic; import com.kamco.cd.kamcoback.postgres.entity.MemberEntity; import java.util.Optional; import java.util.UUID; -import org.springframework.data.domain.Page; public interface MembersRepositoryCustom { - boolean existsByEmployeeNo(String employeeNo); + boolean existsByUserId(String userId); - boolean existsByEmail(String email); - - Page findByMembers(MembersDto.SearchReq searchReq); + Optional findByUserId(String employeeNo); Optional findByUUID(UUID uuid); + // + // Page findByMembers(MembersDto.SearchReq searchReq); + // - Optional findByEmployeeNo(String employeeNo); + // + // Optional findByEmployeeNo(String employeeNo); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRepositoryImpl.java index 8ab7e713..c428c639 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRepositoryImpl.java @@ -1,23 +1,11 @@ package com.kamco.cd.kamcoback.postgres.repository.members; -import com.kamco.cd.kamcoback.common.enums.RoleType; -import com.kamco.cd.kamcoback.members.dto.MembersDto; -import com.kamco.cd.kamcoback.members.dto.MembersDto.Basic; import com.kamco.cd.kamcoback.postgres.entity.MemberEntity; import com.kamco.cd.kamcoback.postgres.entity.QMemberEntity; -import com.kamco.cd.kamcoback.postgres.entity.QMemberRoleEntity; -import com.querydsl.core.BooleanBuilder; -import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQueryFactory; -import java.util.ArrayList; -import java.util.List; import java.util.Optional; import java.util.UUID; import lombok.RequiredArgsConstructor; -import org.apache.commons.lang3.StringUtils; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Repository; @Repository @@ -26,130 +14,106 @@ public class MembersRepositoryImpl implements MembersRepositoryCustom { private final JPAQueryFactory queryFactory; private final QMemberEntity memberEntity = QMemberEntity.memberEntity; - private final QMemberRoleEntity memberRoleEntity = QMemberRoleEntity.memberRoleEntity; /** - * 사원번호 조회 + * 사용자 ID 조회 * - * @param employeeNo + * @param userId * @return */ @Override - public boolean existsByEmployeeNo(String employeeNo) { + public boolean existsByUserId(String userId) { return queryFactory .selectOne() .from(memberEntity) - .where(memberEntity.employeeNo.eq(employeeNo)) + .where(memberEntity.userId.eq(userId)) .fetchFirst() != null; } - /** - * 이메일 조회 - * - * @param email - * @return - */ @Override - public boolean existsByEmail(String email) { - return queryFactory - .selectOne() - .from(memberEntity) - .where(memberEntity.email.eq(email)) - .fetchFirst() - != null; - } - - /** - * 회원정보 목록 조회 - * - * @param searchReq - * @return - */ - @Override - public Page findByMembers(MembersDto.SearchReq searchReq) { - Pageable pageable = searchReq.toPageable(); - BooleanBuilder builder = new BooleanBuilder(); - BooleanBuilder leftBuilder = new BooleanBuilder(); - - if (StringUtils.isNotBlank(searchReq.getField())) { - switch (searchReq.getField()) { - case "name" -> - builder.and(memberEntity.name.containsIgnoreCase(searchReq.getKeyword().trim())); - case "email" -> - builder.and(memberEntity.email.containsIgnoreCase(searchReq.getKeyword().trim())); - case "employeeNo" -> - builder.and(memberEntity.employeeNo.containsIgnoreCase(searchReq.getKeyword().trim())); - } - } - - List roles = new ArrayList<>(); - // 라벨러 - if (searchReq.isLabeler()) { - roles.add(RoleType.ROLE_LABELER.getId()); - } - - // 시스템 전체 관리자 - if (searchReq.isAdmin()) { - roles.add(RoleType.ROLE_ADMIN.getId()); - } - - // 검수자 - if (searchReq.isReviewer()) { - roles.add(RoleType.ROLE_REVIEWER.getId()); - } - - // 역할 in 조건 추가 - if (!roles.isEmpty()) { - leftBuilder.and(memberRoleEntity.id.roleName.in(roles)); - } - - List content = - queryFactory - .select( - Projections.constructor( - MembersDto.Basic.class, - memberEntity.id, - memberEntity.uuid, - memberEntity.employeeNo, - memberEntity.name, - memberEntity.email, - memberEntity.status, - memberRoleEntity.id.roleName, - memberEntity.createdDttm, - memberEntity.updatedDttm)) - .from(memberEntity) - .leftJoin(memberRoleEntity) - .on(memberRoleEntity.memberUuid.uuid.eq(memberEntity.uuid).and(leftBuilder)) - .where(builder) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .orderBy(memberEntity.createdDttm.desc()) - .fetch(); - - long total = - queryFactory - .select(memberEntity) - .from(memberEntity) - .leftJoin(memberRoleEntity) - .on(memberRoleEntity.memberUuid.uuid.eq(memberEntity.uuid).and(leftBuilder)) - .fetchCount(); - - return new PageImpl<>(content, pageable, total); + public Optional findByUserId(String userId) { + return Optional.ofNullable( + queryFactory.selectFrom(memberEntity).where(memberEntity.userId.eq(userId)).fetchOne()); } + // /** + // * 회원정보 목록 조회 + // * + // * @param searchReq + // * @return + // */ + // @Override + // public Page findByMembers(MembersDto.SearchReq searchReq) { + // Pageable pageable = searchReq.toPageable(); + // BooleanBuilder builder = new BooleanBuilder(); + // BooleanBuilder leftBuilder = new BooleanBuilder(); + // + // if (StringUtils.isNotBlank(searchReq.getField())) { + // switch (searchReq.getField()) { + // case "name" -> + // builder.and(memberEntity.name.containsIgnoreCase(searchReq.getKeyword().trim())); + // } + // } + // + // List roles = new ArrayList<>(); + // // 라벨러 + // if (searchReq.isLabeler()) { + // roles.add(RoleType.ROLE_LABELER.getId()); + // } + // + // // 시스템 전체 관리자 + // if (searchReq.isAdmin()) { + // roles.add(RoleType.ROLE_ADMIN.getId()); + // } + // + // // 검수자 + // if (searchReq.isReviewer()) { + // roles.add(RoleType.ROLE_REVIEWER.getId()); + // } + // + // // 역할 in 조건 추가 + // if (!roles.isEmpty()) { + // leftBuilder.and(memberRoleEntity.id.roleName.in(roles)); + // } + // + // List content = + // queryFactory + // .select( + // Projections.constructor( + // MembersDto.Basic.class, + // memberEntity.id, + // memberEntity.uuid, + // memberEntity.employeeNo, + // memberEntity.name, + // null, + // memberEntity.status, + // memberRoleEntity.id.roleName, + // memberEntity.createdDttm, + // memberEntity.updatedDttm)) + // .from(memberEntity) + // .leftJoin(memberRoleEntity) + // .on(memberRoleEntity.memberUuid.uuid.eq(memberEntity.uuid).and(leftBuilder)) + // .where(builder) + // .offset(pageable.getOffset()) + // .limit(pageable.getPageSize()) + // .orderBy(memberEntity.createdDttm.desc()) + // .fetch(); + // + // long total = + // queryFactory + // .select(memberEntity) + // .from(memberEntity) + // .leftJoin(memberRoleEntity) + // .on(memberRoleEntity.memberUuid.uuid.eq(memberEntity.uuid).and(leftBuilder)) + // .fetchCount(); + // + // return new PageImpl<>(content, pageable, total); + // } + // @Override public Optional findByUUID(UUID uuid) { return Optional.ofNullable( queryFactory.selectFrom(memberEntity).where(memberEntity.uuid.eq(uuid)).fetchOne()); } - - @Override - public Optional findByEmployeeNo(String employeeNo) { - return Optional.ofNullable( - queryFactory - .selectFrom(memberEntity) - .where(memberEntity.employeeNo.eq(employeeNo)) - .fetchOne()); - } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRoleRepository.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRoleRepository.java deleted file mode 100644 index 172cb312..00000000 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRoleRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.kamco.cd.kamcoback.postgres.repository.members; - -import com.kamco.cd.kamcoback.postgres.entity.MemberRoleEntity; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface MembersRoleRepository - extends JpaRepository, MembersRoleRepositoryCutom {} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRoleRepositoryCutom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRoleRepositoryCutom.java deleted file mode 100644 index fd13d1d8..00000000 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRoleRepositoryCutom.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.kamco.cd.kamcoback.postgres.repository.members; - -import com.kamco.cd.kamcoback.members.dto.MembersDto; - -public interface MembersRoleRepositoryCutom { - - boolean findByUuidAndRoleName(MembersDto.RolesDto rolesDto); -} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRoleRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRoleRepositoryImpl.java deleted file mode 100644 index 571f41c7..00000000 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/members/MembersRoleRepositoryImpl.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.kamco.cd.kamcoback.postgres.repository.members; - -import com.kamco.cd.kamcoback.members.dto.MembersDto; -import com.kamco.cd.kamcoback.postgres.entity.QMemberRoleEntity; -import com.querydsl.jpa.impl.JPAQueryFactory; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -@RequiredArgsConstructor -@Repository -public class MembersRoleRepositoryImpl implements MembersRoleRepositoryCutom { - - private final JPAQueryFactory queryFactory; - private final QMemberRoleEntity memberRoleEntity = QMemberRoleEntity.memberRoleEntity; - - @Override - public boolean findByUuidAndRoleName(MembersDto.RolesDto rolesDto) { - return queryFactory - .select(memberRoleEntity) - .from(memberRoleEntity) - .where( - memberRoleEntity - .id - .memberUuid - .eq(rolesDto.getUuid()) - .and(memberRoleEntity.id.roleName.eq(rolesDto.getRoleName()))) - .fetchOne() - != null; - } -} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 4126fe32..0b2d19f6 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -45,5 +45,3 @@ token: refresh-cookie-name: kamco-dev # 개발용 쿠키 이름 refresh-cookie-secure: false # 로컬 http 테스트면 false -member: - init_password: kamco1234! diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index e8c5785b..6e8788dc 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -38,6 +38,4 @@ token: refresh-cookie-name: kamco-local # 개발용 쿠키 이름 refresh-cookie-secure: false # 로컬 http 테스트면 false -member: - init_password: kamco1234! diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index d2655044..b330d1d8 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -30,7 +30,5 @@ token: refresh-cookie-name: kamco # 개발용 쿠키 이름 refresh-cookie-secure: true # 로컬 http 테스트면 false -member: - init_password: kamco1234!