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
25 changes: 14 additions & 11 deletions src/main/java/com/sumte/apiPayload/code/error/CommonErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,25 @@ public enum CommonErrorCode implements ErrorCode {
USER_NOT_FOUND(HttpStatus.NOT_FOUND, "COMMON404", "사용자를 찾을 수 없습니다"),
METHOD_NOT_ALLOWED(HttpStatus.METHOD_NOT_ALLOWED, "COMMON405", "허용되지 않는 HTTP Method입니다."),

// GUESTHOUSE4XX
DUPLICATE_DATA(HttpStatus.BAD_REQUEST, "GUESTHOUSE401", "중복된 게스트하우스 입니다."),
NOT_EXIST(HttpStatus.BAD_REQUEST, "GUESTHOUSE402", "존재하지 않는 게스트하우스 입니다."),
OPTIONSERVICE_NOT_EXIST(HttpStatus.BAD_REQUEST, "GUESTHOUSE403", "존재하지 않는 부가 서비스 입니다."),
TARGETAUDIENCE_NOT_EXIST(HttpStatus.BAD_REQUEST, "GUESTHOUSE404", "존재하지 않는 이용대상 입니다."),
// GUESTHOUSE4XX
DUPLICATE_DATA(HttpStatus.BAD_REQUEST, "GUESTHOUSE401", "중복된 게스트하우스 입니다."),
NOT_EXIST(HttpStatus.BAD_REQUEST, "GUESTHOUSE402", "존재하지 않는 게스트하우스 입니다."),
OPTIONSERVICE_NOT_EXIST(HttpStatus.BAD_REQUEST, "GUESTHOUSE403", "존재하지 않는 부가 서비스 입니다."),
TARGETAUDIENCE_NOT_EXIST(HttpStatus.BAD_REQUEST, "GUESTHOUSE404", "존재하지 않는 이용대상 입니다."),

// ROOM4XX
ALREADY_EXIST(HttpStatus.BAD_REQUEST, "ROOM401", "이미 같은 방이 존재합니다."),
NOT_EXIST_ROOM(HttpStatus.BAD_REQUEST, "ROOM402", "존재하지 않는 방입니다."),
// ROOM4XX
ALREADY_EXIST(HttpStatus.BAD_REQUEST, "ROOM401", "이미 같은 방이 존재합니다."),
NOT_EXIST_ROOM(HttpStatus.BAD_REQUEST, "ROOM402", "존재하지 않는 방입니다."),

// COMMON 5XX
INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "COMMON500", "서버 내부 오류입니다."),

// page 처리 관련
PAGE_UNDER_ONE(HttpStatus.BAD_REQUEST,"PAGE_4001","페이지는 1이상으로 입력해야 합니다."),
PAGE_SIZE_UNDER_ONE(HttpStatus.BAD_REQUEST,"PAGE_4002","페이지 사이즈는 1이상으로 입력해야 합니다.");
// page 처리 관련
PAGE_UNDER_ONE(HttpStatus.BAD_REQUEST, "PAGE_4001", "페이지는 1이상으로 입력해야 합니다."),
PAGE_SIZE_UNDER_ONE(HttpStatus.BAD_REQUEST, "PAGE_4002", "페이지 사이즈는 1이상으로 입력해야 합니다."),

//닉네임 중복
DUPLICATE_NICKNAME(HttpStatus.CONFLICT, "USER401", "이미 사용 중인 닉네임입니다.");

private final HttpStatus httpStatus;
private final String code;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
public enum SecurityErrorCode implements ErrorCode {
IDENTIFIER_DUPLICATED(HttpStatus.BAD_REQUEST, "SECURITY400", "이미 존재하는 아이디입니다."),
NICKNAME_DUPLICATED(HttpStatus.BAD_REQUEST, "SECURITY400", "이미 존재하는 닉네임입니다."),
EMAIL_DUPLICATED(HttpStatus.BAD_REQUEST, "SECURITY400", "이미 존재하는 이메일입니다."),
;

private final HttpStatus httpStatus;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,12 @@ public ResponseEntity<ApiResponse<String>> checkDuplicateNickname(@RequestParam(
signUpService.checkDuplicatedNickname(nickname);
return ResponseEntity.ok(ApiResponse.success("사용 가능한 닉네임입니다."));
}

@Operation(summary = "이메일 중복 확인 API", description = "이메일 중복 확인 API입니다.")
@GetMapping("/duplicate/email")
public ResponseEntity<ApiResponse<String>> checkDuplicateEmail(@RequestParam("email") String email) {
signUpService.checkDuplicatedEmail(email);
return ResponseEntity.ok(ApiResponse.success("사용 가능한 이메일입니다."));
}

}
6 changes: 6 additions & 0 deletions src/main/java/com/sumte/security/service/SignUpService.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,10 @@ public void checkDuplicatedNickname(String nickname) {
throw new SumteException(SecurityErrorCode.NICKNAME_DUPLICATED);
}
}

public void checkDuplicatedEmail(String email) {
if (userRepository.findByEmail(email).isPresent()) {
throw new SumteException(SecurityErrorCode.EMAIL_DUPLICATED);
}
}
}
15 changes: 15 additions & 0 deletions src/main/java/com/sumte/user/controller/UserController.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,20 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.sumte.apiPayload.ApiResponse;
import com.sumte.security.authorization.UserId;
import com.sumte.user.dto.UserNicknameUpdateRequest;
import com.sumte.user.dto.response.UserInfoResponse;
import com.sumte.user.service.UserService;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

Expand Down Expand Up @@ -42,4 +46,15 @@ public ResponseEntity<ApiResponse<Void>> deactivateUser(
userService.deactivateUser(userId);
return ResponseEntity.ok(ApiResponse.successWithNoData());
}

//닉네임 중복확인
@PatchMapping("/nickname")
@Operation(summary = "닉네임 수정 API", description = "사용자의 닉네임을 수정합니다.")
public ResponseEntity<Void> updateNickname(
@RequestBody @Valid UserNicknameUpdateRequest request,
@UserId Long userId
) {
userService.updateNickname(userId, request.nickname());
return ResponseEntity.ok().build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.sumte.user.dto;

import jakarta.validation.constraints.NotBlank;

public record UserNicknameUpdateRequest(
@NotBlank(message = "닉네임은 필수입니다.")
String nickname
) {
}
4 changes: 4 additions & 0 deletions src/main/java/com/sumte/user/entity/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,8 @@ public User(String loginId, String password, String name, String nickname, Strin
this.email = email;
this.status = status;
}

public void updateNickname(String nickname) {
this.nickname = nickname;
}
}
6 changes: 4 additions & 2 deletions src/main/java/com/sumte/user/repository/UserRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByLoginId(String loginId);
Optional<User> findByLoginId(String loginId);

Optional<User> findByNickname(String nickName);
Optional<User> findByNickname(String nickName);

Optional<User> findByEmail(String email);
}
15 changes: 15 additions & 0 deletions src/main/java/com/sumte/user/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,19 @@ public void deactivateUser(Long userId) {

user.deactivate();
}

// 닉네임 수정
@Transactional
public void updateNickname(Long userId, String nickname) {
// 중복검사를 위함
userRepository.findByNickname(nickname).ifPresent(user -> {
throw new SumteException(CommonErrorCode.DUPLICATE_NICKNAME);
});

// 사용자 조회해서 닉네임 변경하기
User user = userRepository.findById(userId)
.orElseThrow(() -> new SumteException(CommonErrorCode.USER_NOT_FOUND));

user.updateNickname(nickname);
}
}