From 02019518271a362227f621b3cbdab6de49ac4642 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=88=ED=9B=88=EA=B8=B0?= Date: Wed, 11 Mar 2026 17:06:01 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor:=20=ED=9A=8C?= =?UTF-8?q?=EC=9B=90=EA=B0=80=EC=9E=85=20username=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=A9=94=EC=9D=BC=20=ED=98=95=EC=8B=9D=20=EC=A0=9C?= =?UTF-8?q?=EC=95=BD=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 이메일 → 아이디 방식으로 변경됨에 따라 @Email 검증 어노테이션 및 관련 import 제거, Swagger 설명/예시 수정 --- .../be/sportizebe/domain/user/dto/request/SignUpRequest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/be/sportizebe/domain/user/dto/request/SignUpRequest.java b/src/main/java/com/be/sportizebe/domain/user/dto/request/SignUpRequest.java index b393eae..b020793 100644 --- a/src/main/java/com/be/sportizebe/domain/user/dto/request/SignUpRequest.java +++ b/src/main/java/com/be/sportizebe/domain/user/dto/request/SignUpRequest.java @@ -2,14 +2,12 @@ import com.be.sportizebe.domain.user.entity.Gender; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; public record SignUpRequest( - @Schema(description = "사용자 아이디(이메일 형식)", example = "user@example.com") + @Schema(description = "사용자 아이디", example = "sportize_user") @NotBlank(message = "아이디를 입력해주세요.") - @Email(message = "아이디는 이메일 형식만 지원합니다.") String username, @Schema(description = "비밀번호", example = "password123") From dd9364dc0623ef9c6af12f4145123ecf12e224a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=88=ED=9B=88=EA=B8=B0?= Date: Wed, 11 Mar 2026 17:16:25 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=E2=9C=A8=20Feat:=20=EC=95=84=EC=9D=B4?= =?UTF-8?q?=EB=94=94=20=EC=A4=91=EB=B3=B5=20=EC=B2=B4=ED=81=AC=20API=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(GET=20/api/users/check-username)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/controller/UserController.java | 11 ++++++++++- .../sportizebe/domain/user/service/UserService.java | 3 +++ .../domain/user/service/UserServiceImpl.java | 5 +++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/be/sportizebe/domain/user/controller/UserController.java b/src/main/java/com/be/sportizebe/domain/user/controller/UserController.java index 2eb49b5..e423bd3 100644 --- a/src/main/java/com/be/sportizebe/domain/user/controller/UserController.java +++ b/src/main/java/com/be/sportizebe/domain/user/controller/UserController.java @@ -29,8 +29,17 @@ public class UserController { private final UserServiceImpl userService; + @GetMapping("/check-username") + @Operation(summary = "아이디 중복 체크", description = "사용 가능하면 false, 이미 사용 중이면 true 반환") + public ResponseEntity> checkUsernameDuplicate( + @RequestParam String username + ) { + boolean isDuplicate = userService.checkUsernameDuplicate(username); + return ResponseEntity.ok(BaseResponse.success("아이디 중복 체크 성공", isDuplicate)); + } + @PostMapping("/signup") - @Operation(summary = "회원가입", description = "이메일과 비밀번호로 회원가입") + @Operation(summary = "회원가입", description = "아이디와 비밀번호로 회원가입") public ResponseEntity> signUp(@RequestBody @Valid SignUpRequest request) { SignUpResponse response = userService.signUp(request); return ResponseEntity.status(HttpStatus.CREATED) diff --git a/src/main/java/com/be/sportizebe/domain/user/service/UserService.java b/src/main/java/com/be/sportizebe/domain/user/service/UserService.java index 8d2267d..5eea1e0 100644 --- a/src/main/java/com/be/sportizebe/domain/user/service/UserService.java +++ b/src/main/java/com/be/sportizebe/domain/user/service/UserService.java @@ -25,4 +25,7 @@ public interface UserService { // 비밀번호 변경 void changePassword(Long userId, ChangePasswordRequest request); + + // 아이디 중복 체크 + boolean checkUsernameDuplicate(String username); } diff --git a/src/main/java/com/be/sportizebe/domain/user/service/UserServiceImpl.java b/src/main/java/com/be/sportizebe/domain/user/service/UserServiceImpl.java index ed07490..9a779ab 100644 --- a/src/main/java/com/be/sportizebe/domain/user/service/UserServiceImpl.java +++ b/src/main/java/com/be/sportizebe/domain/user/service/UserServiceImpl.java @@ -121,6 +121,11 @@ public UserInfoResponse getUserInfo(Long userId) { return UserInfoResponse.from(userAuthInfo); } + @Override + public boolean checkUsernameDuplicate(String username) { + return userRepository.existsByUsername(username); + } + @Override @Transactional public void changePassword(Long userId, ChangePasswordRequest request) { From f6ea7ca81c4d023297815de1b54f6077c3bb2543 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=88=ED=9B=88=EA=B8=B0?= Date: Wed, 11 Mar 2026 17:21:00 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=E2=9C=A8=20Feat:=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EA=B0=80=EC=9E=85=20=EC=8B=9C=20=EA=B4=80=EC=8B=AC=20=EC=A2=85?= =?UTF-8?q?=EB=AA=A9=20=EC=84=A0=ED=83=9D=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sportizebe/domain/user/dto/request/SignUpRequest.java | 8 +++++++- .../domain/user/dto/response/SignUpResponse.java | 2 +- .../java/com/be/sportizebe/domain/user/entity/User.java | 6 +++++- .../sportizebe/domain/user/service/UserServiceImpl.java | 1 + 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/be/sportizebe/domain/user/dto/request/SignUpRequest.java b/src/main/java/com/be/sportizebe/domain/user/dto/request/SignUpRequest.java index b020793..e22af72 100644 --- a/src/main/java/com/be/sportizebe/domain/user/dto/request/SignUpRequest.java +++ b/src/main/java/com/be/sportizebe/domain/user/dto/request/SignUpRequest.java @@ -1,10 +1,13 @@ package com.be.sportizebe.domain.user.dto.request; +import com.be.sportizebe.common.enums.SportType; import com.be.sportizebe.domain.user.entity.Gender; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; +import java.util.List; + public record SignUpRequest( @Schema(description = "사용자 아이디", example = "sportize_user") @NotBlank(message = "아이디를 입력해주세요.") @@ -24,6 +27,9 @@ public record SignUpRequest( @Schema(description = "전화번호", example = "010-xxxx-xxxx") @NotBlank(message = "전화번호를 입력해주세요") - String phoneNumber + String phoneNumber, + + @Schema(description = "관심 종목 목록 (선택)", example = "[\"SOCCER\", \"BASKETBALL\"]") + List interestSports ) { } \ No newline at end of file diff --git a/src/main/java/com/be/sportizebe/domain/user/dto/response/SignUpResponse.java b/src/main/java/com/be/sportizebe/domain/user/dto/response/SignUpResponse.java index 7473c87..560a0a8 100644 --- a/src/main/java/com/be/sportizebe/domain/user/dto/response/SignUpResponse.java +++ b/src/main/java/com/be/sportizebe/domain/user/dto/response/SignUpResponse.java @@ -8,7 +8,7 @@ public record SignUpResponse( @Schema(description = "사용자 식별자", example = "1") Long userId, - @Schema(description = "사용자 아이디(이메일 형식)", example = "user@example.com") + @Schema(description = "사용자 아이디", example = "sportize_user") String username, @Schema(description = "사용자 권한", example = "USER") diff --git a/src/main/java/com/be/sportizebe/domain/user/entity/User.java b/src/main/java/com/be/sportizebe/domain/user/entity/User.java index 8461eec..22364df 100644 --- a/src/main/java/com/be/sportizebe/domain/user/entity/User.java +++ b/src/main/java/com/be/sportizebe/domain/user/entity/User.java @@ -43,8 +43,12 @@ public class User extends BaseTimeEntity { @Enumerated(EnumType.STRING) private Role role; + @ElementCollection(fetch = FetchType.LAZY) + @CollectionTable(name = "user_interest_types", joinColumns = @JoinColumn(name = "user_id")) + @Column(name = "sport_type") @Enumerated(EnumType.STRING) - private List interestType; // 사용자 관심 종목 + @Builder.Default + private List interestType = new ArrayList<>(); // 사용자 관심 종목 private String profileImage; // 프로필 사진 URL diff --git a/src/main/java/com/be/sportizebe/domain/user/service/UserServiceImpl.java b/src/main/java/com/be/sportizebe/domain/user/service/UserServiceImpl.java index 9a779ab..ad53243 100644 --- a/src/main/java/com/be/sportizebe/domain/user/service/UserServiceImpl.java +++ b/src/main/java/com/be/sportizebe/domain/user/service/UserServiceImpl.java @@ -55,6 +55,7 @@ public SignUpResponse signUp(SignUpRequest request) { .phoneNumber(request.phoneNumber()) .gender(request.gender()) .role(Role.USER) + .interestType(request.interestSports() != null ? request.interestSports() : new java.util.ArrayList<>()) .build(); User savedUser = userRepository.save(user);