Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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 = "승인 권한 여부")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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()
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -20,6 +21,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;

Expand All @@ -32,6 +34,8 @@ public class CsvParseService {
private final LoadDepartmentPort loadDepartmentPort;
private final ManagerInfoUpdatePolicy managerInfoUpdatePolicy;

private static final Pattern NICKNAME_PATTERN = Pattern.compile(NicknamePolicyConstants.NICKNAME_REGEX);

public List<Member> parseDataAndMapToMember(MultipartFile file) {
List<Member> members = new ArrayList<>();
List<Department> departments = loadDepartmentPort.findActiveDepartments();
Expand All @@ -56,6 +60,11 @@ public List<Member> parseDataAndMapToMember(MultipartFile file) {
}

private Member mapToMember(String[] fields, List<Department> 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);
Expand Down
2 changes: 0 additions & 2 deletions src/main/java/clap/server/domain/model/member/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
Original file line number Diff line number Diff line change
@@ -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}$";
}
2 changes: 1 addition & 1 deletion src/main/java/clap/server/exception/ExceptionAdvice.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public ResponseEntity<Object> handleMethodArgumentNotValid(
return handleExceptionInternalArgs(
e,
HttpHeaders.EMPTY,
GlobalErrorCode.INTERNAL_SERVER_ERROR,
GlobalErrorCode.BAD_REQUEST,
request,
errors
);
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/clap/server/exception/code/MemberErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
5 changes: 0 additions & 5 deletions src/main/resources/auth.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
7 changes: 1 addition & 6 deletions src/test/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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!@#$%^&*()_+
refresh-token: 1209600000 # 1000 * 60 * 60 * 24 * 14 = 1209600000 (14 days)