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

[FEAT] 소셜 로그인 멤버 회원가입 API #38

Merged
merged 4 commits into from
Feb 5, 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
@@ -1,7 +1,6 @@
package com.ttubeog.domain.auth.config;


import com.ttubeog.domain.member.domain.Member;
import com.ttubeog.global.config.security.token.UserPrincipal;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
Expand Down
10 changes: 4 additions & 6 deletions src/main/java/com/ttubeog/domain/auth/service/AuthService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import com.ttubeog.domain.auth.domain.Token;
import com.ttubeog.domain.auth.dto.KakaoInfoDto;
import com.ttubeog.domain.auth.dto.request.AppleLoginRequest;
import com.ttubeog.domain.auth.dto.request.KakaoLoginRequest;
import com.ttubeog.domain.auth.dto.response.KakaoTokenResponse;
import com.ttubeog.domain.auth.dto.response.OAuthTokenResponse;
import com.ttubeog.domain.auth.exception.NotFoundMemberException;
Expand All @@ -15,16 +14,12 @@
import com.ttubeog.domain.member.domain.Member;
import com.ttubeog.domain.member.domain.repository.MemberRepository;
import com.ttubeog.domain.member.exception.InvalidMemberException;
import com.ttubeog.global.config.security.token.UserPrincipal;
import lombok.RequiredArgsConstructor;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

import java.util.Map;
import java.util.Optional;

@Service
Expand Down Expand Up @@ -59,6 +54,8 @@ public KakaoTokenResponse kakaoOAuthLogin(String accessToken) {
if (memberData.isEmpty()) {
member = Member.builder()
.memberNumber(String.valueOf(memberInfo.getId()))
.platform(Platform.KAKAO)
.status(Status.ACTIVE)
.build();

memberRepository.save(member);
Expand All @@ -69,7 +66,8 @@ public KakaoTokenResponse kakaoOAuthLogin(String accessToken) {
String refreshToken = jwtTokenProvider.createRereshToken(memberLoginData.get().getId());
redisTemplate.opsForValue().set(String.valueOf(memberLoginData.get().getId()), refreshToken);

if (memberData.isEmpty()) {
String memberName = memberLoginData.get().getNickname();
if (memberName == null || memberName.isEmpty()) {
return KakaoTokenResponse.builder()
.accessToken(jwtTokenProvider.createAccessToken(
memberLoginData.get().getId()))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,14 @@
package com.ttubeog.domain.member.application;

import com.ttubeog.domain.auth.config.SecurityUtil;
import com.ttubeog.domain.auth.security.JwtTokenProvider;
import com.ttubeog.domain.member.dto.MemberDto;
import com.ttubeog.domain.member.dto.response.MemberDetailRes;
import com.ttubeog.domain.member.domain.Member;
import com.ttubeog.domain.member.domain.repository.MemberRepository;
import com.ttubeog.domain.member.mapper.MemberMapper;
import com.ttubeog.domain.member.dto.request.ProduceNicknameRequest;
import com.ttubeog.domain.member.dto.response.MemberDetailRes;
import com.ttubeog.global.DefaultAssert;
import com.ttubeog.global.config.security.token.UserPrincipal;
import com.ttubeog.global.payload.ApiResponse;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import org.jetbrains.annotations.NotNull;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -28,9 +22,8 @@ public class MemberService {
private final MemberRepository memberRepository;
private final JwtTokenProvider jwtTokenProvider;


// 현재 유저 조회
public ResponseEntity<?> getCurrentUser(HttpServletRequest request){
public ResponseEntity<?> getCurrentUser(HttpServletRequest request) {
Long memberId = jwtTokenProvider.getMemberId(request);

Optional<Member> checkUser = memberRepository.findById(memberId);
Expand All @@ -39,8 +32,32 @@ public ResponseEntity<?> getCurrentUser(HttpServletRequest request){

MemberDetailRes memberDetailRes = MemberDetailRes.builder()
.id(member.getId())
.email(member.getEmail())
.name(member.getName())
.name(member.getNickname())
.platform(member.getPlatform())
.build();

ApiResponse apiResponse = ApiResponse.builder()
.check(true)
.information(memberDetailRes)
.build();

return ResponseEntity.ok(apiResponse);
}

// 닉네임 설정
@Transactional
public ResponseEntity<?> postMemberNickname(HttpServletRequest request, ProduceNicknameRequest produceNicknameRequest) {
Long memberId = jwtTokenProvider.getMemberId(request);
memberRepository.updateUserNickname(produceNicknameRequest.getNickname(), memberId);

Optional<Member> checkUser = memberRepository.findById(memberId);

Member member = checkUser.get();

MemberDetailRes memberDetailRes = MemberDetailRes.builder()
.id(member.getId())
.name(member.getNickname())
.platform(member.getPlatform())
.build();

ApiResponse apiResponse = ApiResponse.builder()
Expand Down
12 changes: 7 additions & 5 deletions src/main/java/com/ttubeog/domain/member/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class Member extends BaseEntity {

private String oAuthId;

private String name;
private String nickname;

@Size(max = 45)
@NotNull
Expand All @@ -40,12 +40,14 @@ public class Member extends BaseEntity {
@Column(name = "platform")
private Platform platform;

private String refreshToken;

@Enumerated(EnumType.STRING)
@Column(name = "status")
private Status status;

@Column(name = "refresh_token")
private String refreshToken;


public Member(String email, Platform platform, Status status, String memberNumber) {
this.email = email;
this.platform = platform;
Expand All @@ -55,11 +57,11 @@ public Member(String email, Platform platform, Status status, String memberNumbe
}

public boolean isRegisteredOAuthMember() {
return name != null;
return nickname != null;
}

public void updateName(String name) {
this.name = name;
this.nickname = name;
}

}
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package com.ttubeog.domain.member.domain.repository;

import com.ttubeog.domain.auth.domain.Platform;
import com.ttubeog.domain.auth.domain.Status;
import com.ttubeog.domain.member.domain.Member;
import com.ttubeog.domain.member.dto.request.ProduceNicknameRequest;
import io.lettuce.core.dynamic.annotation.Param;
import org.jetbrains.annotations.NotNull;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

Expand All @@ -32,4 +33,7 @@ public interface MemberRepository extends JpaRepository<Member,Long>{
@Query("select m.id from Member m where m.platform = :platform and m.platformId = :platformId")
Optional<Long> findIdByPlatformAndPlatformId(Platform platform, String platformId);

@Modifying
@Query("update Member as m set m.nickname = :nickName where m.id = :memberId")
void updateUserNickname(@Param("nickName") String nickName, @Param("memberId") Long memberId);
}
2 changes: 1 addition & 1 deletion src/main/java/com/ttubeog/domain/member/dto/MemberDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public static MemberDto toEntity(Member member) {
return MemberDto.builder()
.id(member.getId())
.email(member.getEmail())
.name(member.getName())
.name(member.getNickname())
.platform(member.getPlatform())
.build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.ttubeog.domain.member.dto.request;


import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

@Data
@Schema(description = "ProduceNicknameRequest")
public class ProduceNicknameRequest {

@Schema(description = "닉네임", example = "푸")
private String nickname;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.ttubeog.domain.member.dto.response;

import com.ttubeog.domain.auth.domain.Platform;
import com.ttubeog.domain.member.domain.Member;
import lombok.AllArgsConstructor;
import lombok.Builder;
Expand All @@ -16,15 +17,13 @@ public class MemberDetailRes {

private String name;

private String email;

private String ImgUrl;
private Platform platform;

public static MemberDetailRes toDto(Member member) {
return MemberDetailRes.builder()
.id(member.getId())
.name(member.getName())
.email(member.getEmail())
.name(member.getNickname())
.platform(member.getPlatform())
.build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,10 @@
package com.ttubeog.domain.member.presentation;

import com.ttubeog.domain.auth.config.SecurityUtil;
import com.ttubeog.domain.auth.exception.NotFoundMemberException;
import com.ttubeog.domain.auth.security.JwtTokenProvider;
import com.ttubeog.domain.member.application.MemberService;
import com.ttubeog.domain.member.domain.Member;
import com.ttubeog.domain.member.domain.repository.MemberRepository;
import com.ttubeog.domain.member.dto.request.ProduceNicknameRequest;
import com.ttubeog.domain.member.dto.response.MemberDetailRes;
import com.ttubeog.global.config.security.token.CurrentUser;
import com.ttubeog.global.config.security.token.UserPrincipal;
import com.ttubeog.global.payload.ErrorResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
Expand All @@ -20,11 +13,7 @@
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Optional;
import org.springframework.web.bind.annotation.*;

@Tag(name = "Member", description = "Member API")
@RestController
Expand All @@ -45,4 +34,16 @@ public ResponseEntity<?> getCurrentMember(

return memberService.getCurrentUser(request);
}

@Operation(summary = "닉네임 설정", description = "현재 접속된 멤버의 닉네임을 설정합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "닉네임 설정", content = {@Content(mediaType = "application/json", schema = @Schema(implementation = MemberDetailRes.class))}),
@ApiResponse(responseCode = "400", description = "닉네임 설정 실패", content = {@Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))}),
})
@PostMapping(value = "/nickname")
public ResponseEntity<?> postMemberNickname(
HttpServletRequest request, @RequestBody ProduceNicknameRequest produceNicknameRequest
) {
return memberService.postMemberNickname(request, produceNicknameRequest);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,10 @@
import com.ttubeog.domain.member.domain.Member;
import lombok.Getter;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.oauth2.core.user.OAuth2User;

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;

@Getter
Expand Down
Loading