-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
fix: modify nickname validation
- Loading branch information
Showing
8 changed files
with
139 additions
and
79 deletions.
There are no files selected for viewing
58 changes: 58 additions & 0 deletions
58
src/main/java/begin_a_gain/omokwang/nickname/application/NicknameService.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 |
---|---|---|
@@ -0,0 +1,58 @@ | ||
package begin_a_gain.omokwang.nickname.application; | ||
|
||
import begin_a_gain.omokwang.exception.CustomException; | ||
import begin_a_gain.omokwang.exception.ErrorCode; | ||
import begin_a_gain.omokwang.nickname.domain.NicknameUpdateDto; | ||
import begin_a_gain.omokwang.user.dto.User; | ||
import begin_a_gain.omokwang.user.repository.UserRepository; | ||
import java.util.Optional; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
@RequiredArgsConstructor | ||
@Service | ||
public class NicknameService { | ||
private static final String INVALID_NICKNAME_MESSAGE = "Invalid nickname: Must be 2-10 characters long and cannot include special characters."; | ||
private static final String NICKNAME_TAKEN_MESSAGE = "Nickname already taken."; | ||
|
||
private final UserRepository userRepository; | ||
|
||
@Transactional(readOnly = true) | ||
public boolean isNicknameTaken(String nickname) { | ||
return userRepository.existsByNickname(nickname); | ||
} | ||
|
||
public boolean isInvalidNickname(String nickname) { | ||
String nicknamePattern = "^[a-zA-Z0-9가-힣]{2,10}$"; | ||
return !nickname.matches(nicknamePattern); | ||
} | ||
|
||
@Transactional | ||
public void updateNickname(NicknameUpdateDto nicknameUpdateParam) { | ||
long socialId = nicknameUpdateParam.getSocialId(); | ||
User user = userRepository.findBySocialId(socialId) | ||
.orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND)); | ||
|
||
String nickname = nicknameUpdateParam.getNickname(); | ||
user.setNickname(nickname); | ||
|
||
userRepository.save(user); | ||
} | ||
|
||
public Optional<String> validateNickname(String nickname) { | ||
if (isInvalidNickname(nickname)) { | ||
return Optional.of(INVALID_NICKNAME_MESSAGE); | ||
} | ||
|
||
if (isNicknameTaken(nickname)) { | ||
return Optional.of(NICKNAME_TAKEN_MESSAGE); | ||
} | ||
|
||
return Optional.empty(); // 닉네임이 유효하고 사용 가능함을 의미 | ||
} | ||
|
||
public boolean isSignUpComplete(long socialId) { | ||
return userRepository.existsNicknameBySocialId(socialId); | ||
} | ||
} |
2 changes: 1 addition & 1 deletion
2
.../omokwang/user/dto/NicknameUpdateDto.java → ...ng/nickname/domain/NicknameUpdateDto.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
2 changes: 1 addition & 1 deletion
2
...in/omokwang/user/dto/NicknameRequest.java → ...mokwang/nickname/dto/NicknameRequest.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
13 changes: 13 additions & 0 deletions
13
src/main/java/begin_a_gain/omokwang/nickname/dto/NicknameValidationResponse.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 |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package begin_a_gain.omokwang.nickname.dto; | ||
|
||
import lombok.AllArgsConstructor; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
|
||
@Getter | ||
@AllArgsConstructor | ||
@NoArgsConstructor | ||
public class NicknameValidationResponse { | ||
private boolean validNickname; | ||
private boolean isSignupComplete; | ||
} |
63 changes: 63 additions & 0 deletions
63
src/main/java/begin_a_gain/omokwang/nickname/ui/NicknameController.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 |
---|---|---|
@@ -0,0 +1,63 @@ | ||
package begin_a_gain.omokwang.nickname.ui; | ||
|
||
import begin_a_gain.omokwang.auth.utils.SecurityUtil; | ||
import begin_a_gain.omokwang.nickname.application.NicknameService; | ||
import begin_a_gain.omokwang.nickname.domain.NicknameUpdateDto; | ||
import begin_a_gain.omokwang.nickname.dto.NicknameRequest; | ||
import begin_a_gain.omokwang.nickname.dto.NicknameValidationResponse; | ||
import io.swagger.v3.oas.annotations.Operation; | ||
import io.swagger.v3.oas.annotations.media.Content; | ||
import io.swagger.v3.oas.annotations.media.Schema; | ||
import io.swagger.v3.oas.annotations.responses.ApiResponse; | ||
import io.swagger.v3.oas.annotations.responses.ApiResponses; | ||
import io.swagger.v3.oas.annotations.tags.Tag; | ||
import java.util.Optional; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.PatchMapping; | ||
import org.springframework.web.bind.annotation.PostMapping; | ||
import org.springframework.web.bind.annotation.RequestBody; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
@Tag(name = "Nickname", description = "Nickname API") | ||
@RestController | ||
@RequiredArgsConstructor | ||
public class NicknameController { | ||
private final NicknameService nicknameService; | ||
|
||
@Operation(summary = "Check nickname availability", description = "Checks if the provided nickname is valid and available.") | ||
@ApiResponses(value = { | ||
@ApiResponse(responseCode = "200", description = "Nickname is valid and available", | ||
content = @Content(schema = @Schema(implementation = NicknameValidationResponse.class))), | ||
@ApiResponse(responseCode = "400", description = "Invalid nickname or nickname already taken", content = @Content) | ||
}) | ||
@PostMapping("/validations/nicknames") | ||
public ResponseEntity<?> checkNickname(@RequestBody NicknameRequest nicknameRequest) { | ||
Optional<String> validationError = nicknameService.validateNickname(nicknameRequest.getNickname()); | ||
|
||
final long socialId = SecurityUtil.getCurrentUserId(); | ||
boolean isSignUpComplete = nicknameService.isSignUpComplete(socialId); | ||
return validationError | ||
.map(error -> ResponseEntity.badRequest().body((Object) error)) // 명시적으로 Object로 캐스팅 | ||
.orElseGet(() -> { | ||
NicknameValidationResponse response = new NicknameValidationResponse(true, | ||
isSignUpComplete); | ||
return ResponseEntity.ok(response); | ||
}); | ||
} | ||
|
||
@Operation(summary = "Update user nickname", description = "nickname 업데이트.") | ||
@ApiResponses(value = { | ||
@ApiResponse(responseCode = "200", description = "Nickname updated successfully") | ||
}) | ||
@PatchMapping("/nickname") | ||
public ResponseEntity<String> updateNickname(@RequestBody NicknameRequest nicknameRequest) { | ||
final long userId = SecurityUtil.getCurrentUserId(); | ||
String nickname = nicknameRequest.getNickname(); | ||
NicknameUpdateDto nicknameUpdateParam = new NicknameUpdateDto(userId, nickname); | ||
|
||
nicknameService.updateNickname(nicknameUpdateParam); | ||
return ResponseEntity.ok("Nickname updated."); | ||
|
||
} | ||
} |
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