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

Refactor/47 회원 API리팩토링 #50

Merged
merged 12 commits into from
Jun 29, 2024
Merged

Refactor/47 회원 API리팩토링 #50

merged 12 commits into from
Jun 29, 2024

Conversation

rimi3226
Copy link
Contributor

🚀 개요

회원 API 예외처리 및 리팩토링

🔍 변경사항

⏳ 작업 내용

  • @RequestBody 추가하기
  • login, join 뒤에 local 빼기
  • 다른 코드 작성할 때 new Member()가 불가하도록 PROTECTED로 둬야함 + JWT Filter 파일과 Custom MemberDetails를 아예 member 사용하지 않고 수정하기 (builder 패턴을 사용하기 위함)
  • 로그인 로직 예외처리 하기
  • 로그인 성공 시 header 말고 body에도 넣기
  • refresh 토큰 만들기
  • 인증코드 전송 API에서 중복일 경우 이메일 보내지 않도록 하기
  • 회원가입에 중복확인 로직넣기 (악의적인 사용자가 포스트맨으로 데이터 넣을 수 있기때문에)
  • 컨트롤러 개수 많은거 어떻게 해야하나.. 합칠까 말까 고민하기
  • response result, error 처리하기
  • response converter 사용해서 responseDTO만들고 보내기 (은진님 레포 참고)
  • error Handler
  • email 인증 보내기 record 테이블을 만들어서 거기에 가장 마지막 이메일 코드로 진행 + 코드를 인증하는 API 다시 개발하기
  • passwordController에서는 성공만 보내고 passwordService에서 orElseThrow 활용해서 에러 처리하기

📝 논의사항

Copy link
Member

@Eunjin3395 Eunjin3395 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생 많으셨습니다👍

@@ -37,8 +37,9 @@ public AuthenticationManager authenticationManager(AuthenticationConfiguration c

@Bean
public JWTFilter jwtFilter() {
List<String> excludedPaths = Arrays.asList("/swagger-ui/", "/v3/api-docs", "/api/member/join/local", "/api/member/login/local", "/api/member/email");
return new JWTFilter(jwtUtil, excludedPaths);
List<String> excludedPaths = Arrays.asList("/api/member/join", "/api/member/login", "/api/member/email");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"/swagger-ui/", "/v3/api-docs" 이 uri도 다시 추가 부탁드립니다..! dev랑 충돌 해결하면서 지워진 것 같아요

.authorizeHttpRequests((auth) -> auth
.antMatchers("/api/member/join/local", "/api/member/login/local", "/api/member/email").permitAll()
.antMatchers("/", "/swagger-ui/**", "/v3/api-docs/**").permitAll()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분도 다시 추가 부탁드려요!

Set<String> requestedGameStyles = new HashSet<>(gameStyles);

// 현재 사용자의 모든 MemberGameStyle을 가져옴
List<MemberGameStyle> existingMemberGameStyles = memberGameStyleRepository.findByMember(member);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

repository를 거치지 않고도 member.getMemberGameStyleList()로 해당 member의 모든 MemberGameStyple 리스트를 얻을 수 있습니다 (JPA)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기 패키지 구조 변경 때문에, MemberController 파일에 5번째 줄
import com.gamegoo.security.SecurityUtil;

import com.gamegoo.util.SecurityUtil;
로 변경 부탁드려요..!


@PutMapping("/gamestyle")
@Operation(summary = "gamestyle 추가 및 수정 API 입니다.", description = "API for Gamestyle addition and modification ")
public ApiResponse<Object> addGameStyle(@RequestBody GameStyleDTO gameStyleDTO) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 api 관련 리뷰는 노션 참고해주세요..! 노션 백엔드>Pages>PR#50

@Operation(summary = "회원가입 API 입니다.", description = "API for join")
public ApiResponse<Object> joinMember(@RequestBody JoinDTO joinDTO) {
authService.joinMember(joinDTO);
return ApiResponse.onSuccess("회원가입에 성공했습니다.");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기서 가입된 회원에 대한 정보(id, email)등을 응답으로 주는 것도 좋을 것 같아요..!


@PostMapping("/email/send")
@Operation(summary = "이메일 인증코드 전송 API 입니다.", description = "API for sending email")
public ApiResponse<Object> sendEmail(@RequestBody EmailDTO emailDTO) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

응답을 단순 string으로 줄 때는 여기도 ApiResponse으로 지정해주는 게 더 좋을 것 같아요!

public void modifyPosition(int mainP, int subP) {
Long userId = SecurityUtil.getCurrentUserId();

// 만약 mainP, subP 가 1~5의 값이 아닐 경우
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

노션 참고 부탁드려요!

@@ -0,0 +1,46 @@
package com.gamegoo.apiPayload.exception.handler;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 filter는 apiPayload.exception.handler 패키지보다 그냥 com.gamegoo.filter 패키지에 있는게 찾기 편할 것 같아요!


public UserDetails loadUserById(Long id) throws UsernameNotFoundException {
Member member = memberRepository.findById(id)
.filter(m -> !m.getBlind())
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@Eunjin3395 Eunjin3395 merged commit d640e27 into develop Jun 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

♻️ [Refactor] 회원 API 관련 예외처리, 코드 리팩토링, 회원가입 중복 확인처리 넣기
2 participants