Skip to content

Commit 776eeda

Browse files
authored
Merge pull request #569 from TaskFlow-CLAP/CLAP-434
CLAP-434 CSV 회원추가 API 닉네임 검증 에러 핸들링 추가
2 parents 67d971d + 98b88eb commit 776eeda

File tree

9 files changed

+25
-16
lines changed

9 files changed

+25
-16
lines changed

src/main/java/clap/server/adapter/inbound/web/dto/admin/request/RegisterMemberRequest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package clap.server.adapter.inbound.web.dto.admin.request;
22

33
import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole;
4+
import clap.server.domain.policy.member.NicknamePolicyConstants;
45
import io.swagger.v3.oas.annotations.media.Schema;
56
import jakarta.validation.constraints.NotBlank;
67
import jakarta.validation.constraints.NotNull;
@@ -15,7 +16,7 @@ public record RegisterMemberRequest(
1516
@Schema(description = "회원 이메일", example = "siena@gmail.com")
1617
String email,
1718
@NotBlank @Schema(description = "회원 닉네임, 로그인할 때 쓰입니다.", example = "siena.it")
18-
@Pattern(regexp = "^[a-z]{3,10}\\.[a-z]{1,5}$",
19+
@Pattern(regexp = NicknamePolicyConstants.NICKNAME_REGEX,
1920
message = "올바른 닉네임 형식이 아닙니다.")
2021
String nickname,
2122
@NotNull @Schema(description = "승인 권한 여부")

src/main/java/clap/server/application/mapper/response/MemberResponseMapper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import clap.server.adapter.inbound.web.dto.member.response.MemberDetailInfoResponse;
66
import clap.server.adapter.inbound.web.dto.member.response.MemberProfileResponse;
77
import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole;
8+
import clap.server.adapter.outbound.persistense.entity.member.constant.MemberStatus;
89
import clap.server.domain.model.member.Member;
9-
import clap.server.domain.model.member.MemberInfo;
1010

1111
public class MemberResponseMapper {
1212
private MemberResponseMapper() {
@@ -64,6 +64,7 @@ public static MemberDetailsResponse toMemberDetailsResponse(Member member) {
6464
member.getMemberInfo().getDepartment().getDepartmentId(),
6565
member.getMemberInfo().getDepartment().getName(),
6666
member.getMemberInfo().getDepartmentRole(),
67+
member.getStatus().equals(MemberStatus.PENDING) || member.getStatus().equals(MemberStatus.APPROVAL_REQUEST) ? null:
6768
member.getInProgressTaskCount() + member.getInReviewingTaskCount()
6869
);
6970
}

src/main/java/clap/server/application/service/admin/CsvParseService.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import clap.server.domain.model.member.Member;
77
import clap.server.domain.model.member.MemberInfo;
88
import clap.server.domain.policy.member.ManagerInfoUpdatePolicy;
9+
import clap.server.domain.policy.member.NicknamePolicyConstants;
910
import clap.server.exception.ApplicationException;
1011
import clap.server.exception.code.DepartmentErrorCode;
1112
import clap.server.exception.code.MemberErrorCode;
@@ -20,6 +21,7 @@
2021
import java.nio.charset.Charset;
2122
import java.util.ArrayList;
2223
import java.util.List;
24+
import java.util.regex.Pattern;
2325

2426
import static clap.server.domain.model.member.MemberInfo.toMemberInfo;
2527

@@ -32,6 +34,8 @@ public class CsvParseService {
3234
private final LoadDepartmentPort loadDepartmentPort;
3335
private final ManagerInfoUpdatePolicy managerInfoUpdatePolicy;
3436

37+
private static final Pattern NICKNAME_PATTERN = Pattern.compile(NicknamePolicyConstants.NICKNAME_REGEX);
38+
3539
public List<Member> parseDataAndMapToMember(MultipartFile file) {
3640
List<Member> members = new ArrayList<>();
3741
List<Department> departments = loadDepartmentPort.findActiveDepartments();
@@ -56,6 +60,11 @@ public List<Member> parseDataAndMapToMember(MultipartFile file) {
5660
}
5761

5862
private Member mapToMember(String[] fields, List<Department> departments) {
63+
String nickname = fields[1].trim();
64+
65+
if (!NICKNAME_PATTERN.matcher(nickname).matches()) {
66+
throw new ApplicationException(MemberErrorCode.INVALID_NICKNAME_FORMAT);
67+
}
5968

6069
if (!validateEmailAndNickname(fields[4].trim(), fields[1].trim())) {
6170
throw new ApplicationException(MemberErrorCode.INVALID_EMAIL_NICKNAME_MATCH);

src/main/java/clap/server/domain/model/member/Member.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@ public void resetPasswordAndActivateMember(String newEncodedPassword) {
6060
this.status = MemberStatus.ACTIVE;
6161
this.emailNotificationEnabled = true;
6262
this.kakaoworkNotificationEnabled = true;
63-
this.inProgressTaskCount = 0;
64-
this.inReviewingTaskCount = 0;
6563
}
6664

6765
public String getNickname() {
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package clap.server.domain.policy.member;
2+
3+
import lombok.Getter;
4+
5+
@Getter
6+
public class NicknamePolicyConstants {
7+
public static final String NICKNAME_REGEX = "^[a-z]{3,10}\\.[a-z]{1,5}$";
8+
}

src/main/java/clap/server/exception/ExceptionAdvice.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public ResponseEntity<Object> handleMethodArgumentNotValid(
5050
return handleExceptionInternalArgs(
5151
e,
5252
HttpHeaders.EMPTY,
53-
GlobalErrorCode.INTERNAL_SERVER_ERROR,
53+
GlobalErrorCode.BAD_REQUEST,
5454
request,
5555
errors
5656
);

src/main/java/clap/server/exception/code/MemberErrorCode.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public enum MemberErrorCode implements BaseErrorCode {
2121
MANAGER_PERMISSION_DENIED(HttpStatus.BAD_REQUEST, "MEMBER_013", "담당자 권한이 없는 부서입니다."),
2222
INVALID_EMAIL_NICKNAME_MATCH(HttpStatus.BAD_REQUEST, "MEMBER_014", "닉네임과 이메일이 일치하지 않습니다"),
2323
MANAGER_MEMBER_UPDATE_NOT_ALLOWED_WITH_TASKS(HttpStatus.BAD_REQUEST, "MEMBER_015", "잔여 작업이 남아있어 수정이 불가합니다."),
24+
INVALID_NICKNAME_FORMAT(HttpStatus.BAD_REQUEST, "MEMBER_016", "잘못된 닉네임 형식입니다."),
25+
2426
;
2527

2628
private final HttpStatus httpStatus;

src/main/resources/auth.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,6 @@ jwt:
88
temporary-token: ${JWT_TEMPORARY_EXPIRATION_TIME:300000}
99
refresh-token: ${JWT_REFRESH_EXPIRATION_TIME:1209600000} # 1000 * 60 * 60 * 24 * 14 = 1209600000 (14 days)
1010

11-
password:
12-
policy:
13-
length: ${INITIAL_PASSWORD_LENGTH:12}
14-
characters: ${INITIAL_PASSWORD_CHARACTERS:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+}
15-
1611
---
1712
spring.config.activate.on-profile: local
1813

src/test/resources/application.yml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,4 @@ jwt:
5353
expiration-time:
5454
access-token: 43200000 # 1000 * 60 * 60 * 12 = 43200000 (12 hours)
5555
temporary-token: 300000
56-
refresh-token: 1209600000 # 1000 * 60 * 60 * 24 * 14 = 1209600000 (14 days)
57-
58-
password:
59-
policy:
60-
length: 12
61-
characters: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+
56+
refresh-token: 1209600000 # 1000 * 60 * 60 * 24 * 14 = 1209600000 (14 days)

0 commit comments

Comments
 (0)