From 31540184baa82d0ca7db4c1857c670171e469ca0 Mon Sep 17 00:00:00 2001 From: Sihun23 Date: Fri, 14 Feb 2025 17:27:15 +0900 Subject: [PATCH 1/5] =?UTF-8?q?CLAP-434=20fix:=EB=8B=89=EB=84=A4=EC=9E=84?= =?UTF-8?q?=20=EC=A0=95=EA=B7=9C=EC=8B=9D=20=EA=B2=80=EC=A6=9D=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=ED=95=B8=EB=93=A4=EB=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/application/service/admin/CsvParseService.java | 8 ++++++++ .../java/clap/server/exception/code/MemberErrorCode.java | 2 ++ 2 files changed, 10 insertions(+) diff --git a/src/main/java/clap/server/application/service/admin/CsvParseService.java b/src/main/java/clap/server/application/service/admin/CsvParseService.java index 710c7303..b719a3c2 100644 --- a/src/main/java/clap/server/application/service/admin/CsvParseService.java +++ b/src/main/java/clap/server/application/service/admin/CsvParseService.java @@ -20,6 +20,7 @@ import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; +import java.util.regex.Pattern; import static clap.server.domain.model.member.MemberInfo.toMemberInfo; @@ -32,6 +33,8 @@ public class CsvParseService { private final LoadDepartmentPort loadDepartmentPort; private final ManagerInfoUpdatePolicy managerInfoUpdatePolicy; + private static final Pattern NICKNAME_PATTERN = Pattern.compile("^[a-z]{3,10}\\.[a-z]{1,5}$"); + public List parseDataAndMapToMember(MultipartFile file) { List members = new ArrayList<>(); List departments = loadDepartmentPort.findActiveDepartments(); @@ -56,6 +59,11 @@ public List parseDataAndMapToMember(MultipartFile file) { } private Member mapToMember(String[] fields, List departments) { + String nickname = fields[1].trim(); + + if (!NICKNAME_PATTERN.matcher(nickname).matches()) { + throw new ApplicationException(MemberErrorCode.INVALID_NICKNAME_FORMAT); + } if (!validateEmailAndNickname(fields[4].trim(), fields[1].trim())) { throw new ApplicationException(MemberErrorCode.INVALID_EMAIL_NICKNAME_MATCH); diff --git a/src/main/java/clap/server/exception/code/MemberErrorCode.java b/src/main/java/clap/server/exception/code/MemberErrorCode.java index a86b01e5..e2318320 100644 --- a/src/main/java/clap/server/exception/code/MemberErrorCode.java +++ b/src/main/java/clap/server/exception/code/MemberErrorCode.java @@ -21,6 +21,8 @@ public enum MemberErrorCode implements BaseErrorCode { MANAGER_PERMISSION_DENIED(HttpStatus.BAD_REQUEST, "MEMBER_013", "담당자 권한이 없는 부서입니다."), INVALID_EMAIL_NICKNAME_MATCH(HttpStatus.BAD_REQUEST, "MEMBER_014", "닉네임과 이메일이 일치하지 않습니다"), MANAGER_MEMBER_UPDATE_NOT_ALLOWED_WITH_TASKS(HttpStatus.BAD_REQUEST, "MEMBER_015", "잔여 작업이 남아있어 수정이 불가합니다."), + INVALID_NICKNAME_FORMAT(HttpStatus.BAD_REQUEST, "MEMBER_016", "잘못된 닉네임 형식입니다."), + ; private final HttpStatus httpStatus; From 1e3953821279845eb20271c1ab4dbdb4604b687f Mon Sep 17 00:00:00 2001 From: joowojr Date: Fri, 14 Feb 2025 23:01:17 +0900 Subject: [PATCH 2/5] =?UTF-8?q?CLAP-434=20Fix:=20=EC=9E=94=EC=97=AC=20?= =?UTF-8?q?=EC=9E=91=EC=97=85=EC=88=98=EC=97=90=20=EB=8C=80=ED=95=B4=20?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=20=EC=83=81=ED=83=9C=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=9D=BC=20=EC=A1=B0=EA=B1=B4=EB=B6=80=20=EB=A7=A4=ED=95=91?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/mapper/response/MemberResponseMapper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/clap/server/application/mapper/response/MemberResponseMapper.java b/src/main/java/clap/server/application/mapper/response/MemberResponseMapper.java index 5bdc8dd1..16153539 100644 --- a/src/main/java/clap/server/application/mapper/response/MemberResponseMapper.java +++ b/src/main/java/clap/server/application/mapper/response/MemberResponseMapper.java @@ -5,8 +5,8 @@ import clap.server.adapter.inbound.web.dto.member.response.MemberDetailInfoResponse; import clap.server.adapter.inbound.web.dto.member.response.MemberProfileResponse; import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole; +import clap.server.adapter.outbound.persistense.entity.member.constant.MemberStatus; import clap.server.domain.model.member.Member; -import clap.server.domain.model.member.MemberInfo; public class MemberResponseMapper { private MemberResponseMapper() { @@ -64,6 +64,7 @@ public static MemberDetailsResponse toMemberDetailsResponse(Member member) { member.getMemberInfo().getDepartment().getDepartmentId(), member.getMemberInfo().getDepartment().getName(), member.getMemberInfo().getDepartmentRole(), + member.getStatus().equals(MemberStatus.PENDING) || member.getStatus().equals(MemberStatus.APPROVAL_REQUEST) ? null: member.getInProgressTaskCount() + member.getInReviewingTaskCount() ); } From bd31eb5c0c246943754d8d1fe052c862c43fddcf Mon Sep 17 00:00:00 2001 From: joowojr Date: Fri, 14 Feb 2025 23:13:35 +0900 Subject: [PATCH 3/5] =?UTF-8?q?CLAP-434=20Remove:=20=ED=95=84=EC=9A=94?= =?UTF-8?q?=EC=97=86=EB=8A=94=20=ED=99=98=EA=B2=BD=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/auth.yml | 5 ----- src/test/resources/application.yml | 7 +------ 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/src/main/resources/auth.yml b/src/main/resources/auth.yml index 785499d7..ac07e439 100644 --- a/src/main/resources/auth.yml +++ b/src/main/resources/auth.yml @@ -8,11 +8,6 @@ jwt: temporary-token: ${JWT_TEMPORARY_EXPIRATION_TIME:300000} refresh-token: ${JWT_REFRESH_EXPIRATION_TIME:1209600000} # 1000 * 60 * 60 * 24 * 14 = 1209600000 (14 days) -password: - policy: - length: ${INITIAL_PASSWORD_LENGTH:12} - characters: ${INITIAL_PASSWORD_CHARACTERS:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+} - --- spring.config.activate.on-profile: local diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml index a6acd661..45a7d25a 100644 --- a/src/test/resources/application.yml +++ b/src/test/resources/application.yml @@ -53,9 +53,4 @@ jwt: expiration-time: access-token: 43200000 # 1000 * 60 * 60 * 12 = 43200000 (12 hours) temporary-token: 300000 - refresh-token: 1209600000 # 1000 * 60 * 60 * 24 * 14 = 1209600000 (14 days) - -password: - policy: - length: 12 - characters: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+ \ No newline at end of file + refresh-token: 1209600000 # 1000 * 60 * 60 * 24 * 14 = 1209600000 (14 days) \ No newline at end of file From efe0935e2aa155a6d9c39b7e2b8d6133618c5eba Mon Sep 17 00:00:00 2001 From: joowojr Date: Fri, 14 Feb 2025 23:19:05 +0900 Subject: [PATCH 4/5] =?UTF-8?q?CLAP-434=20Refactor:=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=EC=A0=95=EA=B7=9C=EC=8B=9D=20=ED=91=9C=ED=98=84=20?= =?UTF-8?q?=EC=A0=95=EC=B1=85=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/dto/admin/request/RegisterMemberRequest.java | 3 ++- .../server/application/service/admin/CsvParseService.java | 3 ++- src/main/java/clap/server/domain/model/member/Member.java | 2 -- .../domain/policy/member/NicknamePolicyConstants.java | 8 ++++++++ 4 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 src/main/java/clap/server/domain/policy/member/NicknamePolicyConstants.java diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/admin/request/RegisterMemberRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/admin/request/RegisterMemberRequest.java index 89920c72..2a51eb4c 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/admin/request/RegisterMemberRequest.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/admin/request/RegisterMemberRequest.java @@ -1,6 +1,7 @@ package clap.server.adapter.inbound.web.dto.admin.request; import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole; +import clap.server.domain.policy.member.NicknamePolicyConstants; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -15,7 +16,7 @@ public record RegisterMemberRequest( @Schema(description = "회원 이메일", example = "siena@gmail.com") String email, @NotBlank @Schema(description = "회원 닉네임, 로그인할 때 쓰입니다.", example = "siena.it") - @Pattern(regexp = "^[a-z]{3,10}\\.[a-z]{1,5}$", + @Pattern(regexp = NicknamePolicyConstants.NICKNAME_REGEX, message = "올바른 닉네임 형식이 아닙니다.") String nickname, @NotNull @Schema(description = "승인 권한 여부") diff --git a/src/main/java/clap/server/application/service/admin/CsvParseService.java b/src/main/java/clap/server/application/service/admin/CsvParseService.java index b719a3c2..17af3553 100644 --- a/src/main/java/clap/server/application/service/admin/CsvParseService.java +++ b/src/main/java/clap/server/application/service/admin/CsvParseService.java @@ -6,6 +6,7 @@ import clap.server.domain.model.member.Member; import clap.server.domain.model.member.MemberInfo; import clap.server.domain.policy.member.ManagerInfoUpdatePolicy; +import clap.server.domain.policy.member.NicknamePolicyConstants; import clap.server.exception.ApplicationException; import clap.server.exception.code.DepartmentErrorCode; import clap.server.exception.code.MemberErrorCode; @@ -33,7 +34,7 @@ public class CsvParseService { private final LoadDepartmentPort loadDepartmentPort; private final ManagerInfoUpdatePolicy managerInfoUpdatePolicy; - private static final Pattern NICKNAME_PATTERN = Pattern.compile("^[a-z]{3,10}\\.[a-z]{1,5}$"); + private static final Pattern NICKNAME_PATTERN = Pattern.compile(NicknamePolicyConstants.NICKNAME_REGEX); public List parseDataAndMapToMember(MultipartFile file) { List members = new ArrayList<>(); diff --git a/src/main/java/clap/server/domain/model/member/Member.java b/src/main/java/clap/server/domain/model/member/Member.java index b9026112..2cd08694 100644 --- a/src/main/java/clap/server/domain/model/member/Member.java +++ b/src/main/java/clap/server/domain/model/member/Member.java @@ -60,8 +60,6 @@ public void resetPasswordAndActivateMember(String newEncodedPassword) { this.status = MemberStatus.ACTIVE; this.emailNotificationEnabled = true; this.kakaoworkNotificationEnabled = true; - this.inProgressTaskCount = 0; - this.inReviewingTaskCount = 0; } public String getNickname() { diff --git a/src/main/java/clap/server/domain/policy/member/NicknamePolicyConstants.java b/src/main/java/clap/server/domain/policy/member/NicknamePolicyConstants.java new file mode 100644 index 00000000..32b8eed2 --- /dev/null +++ b/src/main/java/clap/server/domain/policy/member/NicknamePolicyConstants.java @@ -0,0 +1,8 @@ +package clap.server.domain.policy.member; + +import lombok.Getter; + +@Getter +public class NicknamePolicyConstants { + public static final String NICKNAME_REGEX = "^[a-z]{3,10}\\.[a-z]{1,5}$"; +} From 98b88eb3eb227a3de3ca734b277653b539a61f57 Mon Sep 17 00:00:00 2001 From: joowojr Date: Fri, 14 Feb 2025 23:19:51 +0900 Subject: [PATCH 5/5] =?UTF-8?q?CLAP-434=20Fix:=20MethodArgumentNotValidExc?= =?UTF-8?q?eption=EC=97=90=20=EB=8C=80=ED=95=B4=20400=20=EC=97=90=EB=9F=AC?= =?UTF-8?q?=EB=A5=BC=20=EB=B0=98=ED=99=98=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/clap/server/exception/ExceptionAdvice.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/clap/server/exception/ExceptionAdvice.java b/src/main/java/clap/server/exception/ExceptionAdvice.java index b94deb70..da790b3e 100644 --- a/src/main/java/clap/server/exception/ExceptionAdvice.java +++ b/src/main/java/clap/server/exception/ExceptionAdvice.java @@ -50,7 +50,7 @@ public ResponseEntity handleMethodArgumentNotValid( return handleExceptionInternalArgs( e, HttpHeaders.EMPTY, - GlobalErrorCode.INTERNAL_SERVER_ERROR, + GlobalErrorCode.BAD_REQUEST, request, errors );