-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* fix: 배포 파이프라인 이미지 빌드 버전 추가 * feat: 사용자 인증 코드 발급 & 전화번호 변경 dto 정의 * fix: 사용자 계정 수정 dto 변경 * rename: username-and-phone -> profile 수정 * rename: username-and-profile 수정 * docs: 아이디 & 전화번호 수정 스웨거 작성 * feat: 아이디 & 전화번호 수정 컨트롤러 추가 * feat: 아이디 & 전화번호 수정 usecase 추가 * fix: 인증코드 cache key타입 추가 * fix: 인증코드 요청 유형 phone 타입 추가 * feat: 인증 코드 요청 dto 정적 팩토리 메서드 of 추가 * feat: user entity phone 수정 메서드 추가 * feat: 인증 코드 검증 dto 정적 팩토리 메서드 of 추가 * fix: 사용자 아이디 & 전화번호 변경 dto 불필요한 메서드 제거 (인증코드 검증 dto 치환 메서드) * feat: 사용자 아이디 & 전화번호 수정 서비스 구현 * docs: 사용자 프로필 수정 dto의 code 필드 문서 수정 * docs: 사용자 프로필 수정 api 스웨거 인증번호 에러 응답 추가 * test: user profile update service test mock bean add * feat: 전화번호, 아이디 중복 검사 메서드 추가 (본인 제외) * feat: 사용자 전화번호, 아이디 중복 409 에러코드 추가 * fix: 아이디 & 전화번호 수정 서비스 유효성 검사 추가 * rename: 사용자 수정 서비스 테스트 -> 이름 수정 서비스 테스트 * fix: 나를 제외한 아이디, 전화번호 중복 검사 제거 -> 전체 중복 검사 확인 메서드 추가 * fix: 유효성 검사 시 호출 메서드 수정 * test: 사용자 아이디 & 전화번호 같은 경우 테스트 * test: 아이디 수정 요청 테스트 * test: 전화번호 변경 요청 테스트 * test: 아이디 혹은 전화번호 수정 실패 시 예외 테스트 * rename: 전화번호 예외 검사 불가 항목 주석 추가 * docs: 409 에러 스웨거 문서 추가
- Loading branch information
1 parent
66c6907
commit e9d2cc5
Showing
14 changed files
with
340 additions
and
90 deletions.
There are no files selected for viewing
171 changes: 87 additions & 84 deletions
171
...app-external-api/src/main/java/kr/co/pennyway/api/apis/auth/dto/PhoneVerificationDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,101 +1,104 @@ | ||
package kr.co.pennyway.api.apis.auth.dto; | ||
|
||
import java.time.LocalDateTime; | ||
|
||
import com.fasterxml.jackson.annotation.JsonFormat; | ||
import com.fasterxml.jackson.annotation.JsonInclude; | ||
import com.fasterxml.jackson.databind.annotation.JsonSerialize; | ||
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; | ||
|
||
import io.swagger.v3.oas.annotations.media.Schema; | ||
import jakarta.validation.constraints.NotBlank; | ||
import jakarta.validation.constraints.Pattern; | ||
|
||
import java.time.LocalDateTime; | ||
|
||
public class PhoneVerificationDto { | ||
@Schema(title = "인증번호 요청 DTO", description = "전화번호로 인증번호 송신 요청을 위한 DTO") | ||
public record PushCodeReq( | ||
@Schema(description = "전화번호", example = "010-2629-4624") | ||
@NotBlank(message = "전화번호는 필수입니다.") | ||
@Pattern(regexp = "^01[01]-\\d{4}-\\d{4}$", message = "전화번호 형식이 올바르지 않습니다.") | ||
String phone | ||
) { | ||
} | ||
@Schema(title = "인증번호 요청 DTO", description = "전화번호로 인증번호 송신 요청을 위한 DTO") | ||
public record PushCodeReq( | ||
@Schema(description = "전화번호", example = "010-2629-4624") | ||
@NotBlank(message = "전화번호는 필수입니다.") | ||
@Pattern(regexp = "^01[01]-\\d{4}-\\d{4}$", message = "전화번호 형식이 올바르지 않습니다.") | ||
String phone | ||
) { | ||
} | ||
|
||
@Schema(title = "인증번호 발송 응답 DTO", description = "전화번호로 인증번호 송신 응답을 위한 DTO") | ||
public record PushCodeRes( | ||
@Schema(description = "수신자 번호") | ||
String to, | ||
@Schema(description = "발송 시간") | ||
@JsonSerialize(using = LocalDateTimeSerializer.class) | ||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | ||
LocalDateTime sendAt, | ||
@Schema(description = "만료 시간 (default: 3분)", example = "2021-08-01T00:00:00") | ||
@JsonSerialize(using = LocalDateTimeSerializer.class) | ||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | ||
LocalDateTime expiresAt | ||
) { | ||
/** | ||
* 인증번호 발송 응답 객체 생성 | ||
* | ||
* @param to String : 수신자 번호 | ||
* @param sendAt LocalDateTime : 발송 시간 | ||
* @param expiresAt LocalDateTime : 만료 시간 (default: 5분) | ||
*/ | ||
public static PushCodeRes of(String to, LocalDateTime sendAt, LocalDateTime expiresAt) { | ||
return new PushCodeRes(to, sendAt, expiresAt); | ||
} | ||
} | ||
|
||
@Schema(title = "인증번호 발송 응답 DTO", description = "전화번호로 인증번호 송신 응답을 위한 DTO") | ||
public record PushCodeRes( | ||
@Schema(description = "수신자 번호") | ||
String to, | ||
@Schema(description = "발송 시간") | ||
@JsonSerialize(using = LocalDateTimeSerializer.class) | ||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | ||
LocalDateTime sendAt, | ||
@Schema(description = "만료 시간 (default: 3분)", example = "2021-08-01T00:00:00") | ||
@JsonSerialize(using = LocalDateTimeSerializer.class) | ||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | ||
LocalDateTime expiresAt | ||
) { | ||
/** | ||
* 인증번호 발송 응답 객체 생성 | ||
* | ||
* @param to String : 수신자 번호 | ||
* @param sendAt LocalDateTime : 발송 시간 | ||
* @param expiresAt LocalDateTime : 만료 시간 (default: 5분) | ||
*/ | ||
public static PushCodeRes of(String to, LocalDateTime sendAt, LocalDateTime expiresAt) { | ||
return new PushCodeRes(to, sendAt, expiresAt); | ||
} | ||
} | ||
@Schema(title = "인증번호 검증 DTO", description = "전화번호로 인증번호 검증 요청을 위한 DTO") | ||
public record VerifyCodeReq( | ||
@Schema(description = "전화번호", example = "010-2629-4624") | ||
@NotBlank(message = "전화번호는 필수입니다.") | ||
@Pattern(regexp = "^01[01]-\\d{4}-\\d{4}$", message = "전화번호 형식이 올바르지 않습니다.") | ||
String phone, | ||
@Schema(description = "6자리 정수 인증번호", example = "123456") | ||
@NotBlank(message = "인증번호는 필수입니다.") | ||
@Pattern(regexp = "^\\d{6}$", message = "인증번호는 6자리 숫자여야 합니다.") | ||
String code | ||
) { | ||
public static VerifyCodeReq from(SignUpReq.Info request) { | ||
return new VerifyCodeReq(request.phone(), request.code()); | ||
} | ||
|
||
@Schema(title = "인증번호 검증 DTO", description = "전화번호로 인증번호 검증 요청을 위한 DTO") | ||
public record VerifyCodeReq( | ||
@Schema(description = "전화번호", example = "010-2629-4624") | ||
@NotBlank(message = "전화번호는 필수입니다.") | ||
@Pattern(regexp = "^01[01]-\\d{4}-\\d{4}$", message = "전화번호 형식이 올바르지 않습니다.") | ||
String phone, | ||
@Schema(description = "6자리 정수 인증번호", example = "123456") | ||
@NotBlank(message = "인증번호는 필수입니다.") | ||
@Pattern(regexp = "^\\d{6}$", message = "인증번호는 6자리 숫자여야 합니다.") | ||
String code | ||
) { | ||
public static VerifyCodeReq from(SignUpReq.Info request) { | ||
return new VerifyCodeReq(request.phone(), request.code()); | ||
} | ||
public static VerifyCodeReq from(SignUpReq.OauthInfo request) { | ||
return new VerifyCodeReq(request.phone(), request.code()); | ||
} | ||
|
||
public static VerifyCodeReq from(SignUpReq.OauthInfo request) { | ||
return new VerifyCodeReq(request.phone(), request.code()); | ||
} | ||
} | ||
public static VerifyCodeReq of(String phone, String code) { | ||
return new VerifyCodeReq(phone, code); | ||
} | ||
} | ||
|
||
@Schema(title = "인증번호 검증 응답 DTO") | ||
public record VerifyCodeRes( | ||
@Schema(description = "코드 일치 여부 : 일치하지 않으면 예외이므로 성공하면 언제나 true", example = "true") | ||
Boolean code, | ||
@Schema(description = "oauth 사용자 여부. true면 sync, false면 회원가입으로 진행 (일반 회원가입 시 필수값)", example = "true") | ||
@JsonInclude(JsonInclude.Include.NON_NULL) | ||
Boolean oauth, | ||
@Schema(description = "기존 계정 존재 여부. true면 sync, false면 회원가입 (oauth 회원가입 시 필수값)", example = "true") | ||
@JsonInclude(JsonInclude.Include.NON_NULL) | ||
Boolean existsUser, | ||
@Schema(description = "기존 사용자 아이디", example = "pennyway") | ||
@JsonInclude(JsonInclude.Include.NON_NULL) | ||
String username | ||
) { | ||
/** | ||
* 일반 회원가입 시 인증 코드 응답 객체 생성 | ||
* | ||
* @param isOauthUser Boolean : oauth 사용자 여부. true면 sync, false면 회원가입으로 진행 | ||
*/ | ||
public static VerifyCodeRes valueOfGeneral(Boolean isValidCode, Boolean isOauthUser, String username) { | ||
return new VerifyCodeRes(isValidCode, isOauthUser, null, username); | ||
} | ||
@Schema(title = "인증번호 검증 응답 DTO") | ||
public record VerifyCodeRes( | ||
@Schema(description = "코드 일치 여부 : 일치하지 않으면 예외이므로 성공하면 언제나 true", example = "true") | ||
Boolean code, | ||
@Schema(description = "oauth 사용자 여부. true면 sync, false면 회원가입으로 진행 (일반 회원가입 시 필수값)", example = "true") | ||
@JsonInclude(JsonInclude.Include.NON_NULL) | ||
Boolean oauth, | ||
@Schema(description = "기존 계정 존재 여부. true면 sync, false면 회원가입 (oauth 회원가입 시 필수값)", example = "true") | ||
@JsonInclude(JsonInclude.Include.NON_NULL) | ||
Boolean existsUser, | ||
@Schema(description = "기존 사용자 아이디", example = "pennyway") | ||
@JsonInclude(JsonInclude.Include.NON_NULL) | ||
String username | ||
) { | ||
/** | ||
* 일반 회원가입 시 인증 코드 응답 객체 생성 | ||
* | ||
* @param isOauthUser Boolean : oauth 사용자 여부. true면 sync, false면 회원가입으로 진행 | ||
*/ | ||
public static VerifyCodeRes valueOfGeneral(Boolean isValidCode, Boolean isOauthUser, String username) { | ||
return new VerifyCodeRes(isValidCode, isOauthUser, null, username); | ||
} | ||
|
||
/** | ||
* oauth 회원가입 시 인증 코드 응답 객체 생성 | ||
* | ||
* @param existsUser Boolean : 기존 계정 존재 여부. true면 sync, false면 회원가입으로 진행 | ||
*/ | ||
public static VerifyCodeRes valueOfOauth(Boolean isValidCode, Boolean existsUser, String username) { | ||
return new VerifyCodeRes(isValidCode, null, existsUser, username); | ||
} | ||
} | ||
/** | ||
* oauth 회원가입 시 인증 코드 응답 객체 생성 | ||
* | ||
* @param existsUser Boolean : 기존 계정 존재 여부. true면 sync, false면 회원가입으로 진행 | ||
*/ | ||
public static VerifyCodeRes valueOfOauth(Boolean isValidCode, Boolean existsUser, String username) { | ||
return new VerifyCodeRes(isValidCode, null, existsUser, username); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.