Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] - [Member] 닉네임 중복 검증 API 구현했습니다. #24

Merged
merged 5 commits into from
Jan 17, 2024
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
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
@Configuration
@EnableWebSecurity
public class SecurityConfig {
private final String[] ALLOWED_URIS = {"/", "/index.html", "/sign-up"};
private final String[] ALLOWED_URIS = {"/", "/index.html"};
private final LoginService loginService;
private final JwtService jwtService;
private final MemberRepository memberRepository;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,24 +22,20 @@ public class OAuth2LoginSuccessHandler implements AuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException {
log.info("OAuth2 Login 성공!");
try {
CustomOAuth2User oAuth2User = (CustomOAuth2User) authentication.getPrincipal();
CustomOAuth2User oAuth2User = (CustomOAuth2User) authentication.getPrincipal();

// User의 Role이 GUEST일 경우 처음 요청한 회원이므로 회원가입 페이지로 리다이렉트
if (oAuth2User.getRole() == Role.GUEST) {
String accessToken = jwtService.createAccessToken(oAuth2User.getEmail());
response.addHeader(jwtService.getAccessHeader(), "Bearer " + accessToken);
response.sendRedirect("oauth2/sign-up"); // 프론트의 회원가입 추가 정보 입력 폼으로 리다이렉트
// User의 Role이 GUEST일 경우 처음 요청한 회원이므로 회원가입 페이지로 리다이렉트
if (oAuth2User.getRole() == Role.GUEST) {
String accessToken = jwtService.createAccessToken(oAuth2User.getEmail());
response.addHeader(jwtService.getAccessHeader(), "Bearer " + accessToken);
response.sendRedirect("oauth2/sign-up"); // 프론트의 회원가입 추가 정보 입력 폼으로 리다이렉트

jwtService.sendAccessAndRefreshToken(response, accessToken, null);
jwtService.sendAccessAndRefreshToken(response, accessToken, null);
// User findUser = userRepository.findByEmail(oAuth2User.getEmail())
// .orElseThrow(() -> new IllegalArgumentException("이메일에 해당하는 유저가 없습니다."));
// findUser.authorizeUser();
} else {
loginSuccess(response, oAuth2User); // 로그인에 성공한 경우 access, refresh 토큰 생성
}
} catch (Exception e) {
throw e;
} else {
loginSuccess(response, oAuth2User); // 로그인에 성공한 경우 access, refresh 토큰 생성
}
}

Expand Down
17 changes: 15 additions & 2 deletions src/main/java/com/coverflow/member/application/MemberService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,24 @@
import com.coverflow.member.domain.MemberRepository;
import com.coverflow.member.domain.Role;
import com.coverflow.member.dto.MemberSignUpDTO;
import com.coverflow.member.dto.request.DuplicationNicknameRequest;
import com.coverflow.member.dto.response.DuplicationNicknameResponse;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;

import java.util.Optional;

@RequiredArgsConstructor
@Transactional
@Service
public class MemberService {
private final MemberRepository memberRepository;
private final PasswordEncoder passwordEncoder;

public void signUp(MemberSignUpDTO memberSignUpDTO) throws Exception {

public void signUp(final MemberSignUpDTO memberSignUpDTO) throws Exception {
if (memberRepository.findByEmail(memberSignUpDTO.getEmail()).isPresent()) {
throw new Exception("이미 존재하는 이메일입니다.");
}
Expand All @@ -37,4 +41,13 @@ public void signUp(MemberSignUpDTO memberSignUpDTO) throws Exception {
member.passwordEncode(passwordEncoder);
memberRepository.save(member);
}

public DuplicationNicknameResponse verifyDuplicationNickname(final DuplicationNicknameRequest request) {
final Optional<Member> nickname = memberRepository.findByNickname(request.nickname());

if (nickname.isPresent()) {
return new DuplicationNicknameResponse(HttpStatus.OK, HttpStatus.OK.toString(), "이미 존재하는 닉네임입니다.");
}
return new DuplicationNicknameResponse(HttpStatus.OK, HttpStatus.OK.toString(), "사용 가능한 닉네임입니다.");
}
}
1 change: 0 additions & 1 deletion src/main/java/com/coverflow/member/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
public class Member extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
@Column(name = "member_id")
private UUID member_id;
private String password;
private String email;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.coverflow.member.dto.request;

public record DuplicationNicknameRequest(
String nickname
) {
}
4 changes: 0 additions & 4 deletions src/main/java/com/coverflow/member/dto/request/Request.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.coverflow.member.dto.response;

import org.springframework.http.HttpStatus;

public record DuplicationNicknameResponse(
HttpStatus status,
String message,
String data
) {
}
4 changes: 0 additions & 4 deletions src/main/java/com/coverflow/member/dto/response/Response.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,26 +1,24 @@
package com.coverflow.member.presentation;

import com.coverflow.member.application.MemberService;
import com.coverflow.member.dto.MemberSignUpDTO;
import com.coverflow.member.dto.request.DuplicationNicknameRequest;
import com.coverflow.member.dto.response.DuplicationNicknameResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequiredArgsConstructor
@RequestMapping("/api/member")
@RestController
public class MemberController {
private final MemberService memberService;

@PostMapping("/sign-up")
public String signUp(@RequestBody MemberSignUpDTO memberSignUpDto) throws Exception {
memberService.signUp(memberSignUpDto);
return "회원가입 성공";
}

@GetMapping("/jwt-test")
public String jwtTest() {
return "jwtTest 요청 성공";
@GetMapping("/verify-duplication-nickname")
public ResponseEntity<DuplicationNicknameResponse> verifyDuplicationNickname(@RequestBody final DuplicationNicknameRequest request) {
final DuplicationNicknameResponse duplicationNicknameResponse = memberService.verifyDuplicationNickname(request);
return ResponseEntity.ok(duplicationNicknameResponse);
}
}