Skip to content

Commit 26fd25b

Browse files
authored
Merge pull request #14 from hackathon-soa/feat/#6
feat : 아이디 중복 확인 API 구현
2 parents a2c6fe9 + 90a8e58 commit 26fd25b

6 files changed

Lines changed: 54 additions & 1 deletion

File tree

src/main/java/hackathon/soa/common/apiPayload/code/status/ErrorStatus.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public enum ErrorStatus implements BaseErrorCode {
1818
_FORBIDDEN(HttpStatus.FORBIDDEN, "COMMON403", "금지된 요청입니다."),
1919

2020
// 사용자 관련
21-
ID_DUPLICATED(HttpStatus.CONFLICT, "AUTH4002", "중복된 아이디입니다."),
21+
ID_DUPLICATED(HttpStatus.CONFLICT, "AUTH4001", "이미 사용중인 아이디입니다."),
2222
;
2323

2424

src/main/java/hackathon/soa/domain/auth/AuthController.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import hackathon.soa.domain.auth.dto.AuthResponseDTO;
66
import io.swagger.v3.oas.annotations.Operation;
77
import jakarta.validation.Valid;
8+
import jakarta.validation.constraints.Size;
89
import lombok.RequiredArgsConstructor;
910
import org.springframework.web.bind.annotation.*;
1011

@@ -26,4 +27,22 @@ public ApiResponse<AuthResponseDTO.SignupResponseDTO> register(
2627
AuthResponseDTO.SignupResponseDTO result = authService.register(request);
2728
return ApiResponse.onSuccess(result);
2829
}
30+
31+
32+
33+
@GetMapping("/check")
34+
@Operation(
35+
summary = "아이디 중복 확인",
36+
description = "회원가입 시 아이디 중복 여부를 확인합니다."
37+
)
38+
public ApiResponse<AuthResponseDTO.DuplicateCheckResponseDTO> checkDuplicate(
39+
@RequestParam String appId
40+
) {
41+
AuthRequestDTO.DuplicateCheckRequestDTO request = AuthRequestDTO.DuplicateCheckRequestDTO.builder()
42+
.appId(appId)
43+
.build();
44+
45+
AuthResponseDTO.DuplicateCheckResponseDTO result = authService.checkDuplicate(request);
46+
return ApiResponse.onSuccess(result);
47+
}
2948
}

src/main/java/hackathon/soa/domain/auth/AuthConverter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,11 @@ public static AuthResponseDTO.SignupResponseDTO toSignUpResponseDTO(Member saved
1111
.build()
1212
;
1313
}
14+
15+
public static AuthResponseDTO.DuplicateCheckResponseDTO toDuplicateCheckResponseDTO(boolean isExists) {
16+
return AuthResponseDTO.DuplicateCheckResponseDTO.builder()
17+
.isAvailable(!isExists)
18+
.message(isExists ? "이미 사용중인 아이디입니다." : "사용가능한 아이디입니다.")
19+
.build();
20+
}
1421
}

src/main/java/hackathon/soa/domain/auth/AuthService.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,11 @@ public AuthResponseDTO.SignupResponseDTO register(AuthRequestDTO.SignupRequestDT
3939
// 4) ResponseDTO 변환 Converter 작업
4040
return AuthConverter.toSignUpResponseDTO(savedMember);
4141
}
42+
43+
public AuthResponseDTO.DuplicateCheckResponseDTO checkDuplicate(AuthRequestDTO.DuplicateCheckRequestDTO request) {
44+
// 1) 아이디 중복 체크
45+
boolean isExists = memberRepository.existsByAppId(request.getAppId());
46+
47+
return AuthConverter.toDuplicateCheckResponseDTO(isExists);
48+
}
4249
}

src/main/java/hackathon/soa/domain/auth/dto/AuthRequestDTO.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,15 @@ public static class SignupRequestDTO {
5151
@NotNull(message = "프로필 이미지는 필수입니다")
5252
private Integer profileImage;
5353
}
54+
55+
@Builder
56+
@Getter
57+
@NoArgsConstructor
58+
@AllArgsConstructor
59+
public static class DuplicateCheckRequestDTO {
60+
@NotBlank(message = "아이디는 필수입니다")
61+
@Size(min = 4, max = 20, message = "아이디는 4~20자 사이여야 합니다")
62+
@Pattern(regexp = "^[a-zA-Z0-9]+$", message = "아이디는 영문자와 숫자만 가능합니다")
63+
private String appId;
64+
}
5465
}

src/main/java/hackathon/soa/domain/auth/dto/AuthResponseDTO.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,13 @@ public static class SignupResponseDTO {
1414
private Long userId;
1515
private String appId;
1616
}
17+
18+
@Builder
19+
@Getter
20+
@NoArgsConstructor
21+
@AllArgsConstructor
22+
public static class DuplicateCheckResponseDTO {
23+
private Boolean isAvailable;
24+
private String message;
25+
}
1726
}

0 commit comments

Comments
 (0)