From d4d20f7a2f114c54e12f78e40e145469b4cc4ff9 Mon Sep 17 00:00:00 2001 From: arinming Date: Fri, 2 Feb 2024 17:41:22 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[Feat]=20=EB=A9=A4=EB=B2=84=20=EB=8B=89?= =?UTF-8?q?=EB=84=A4=EC=9E=84=20=EC=84=A4=EC=A0=95=20=EC=97=AC=EB=B6=80?= =?UTF-8?q?=EC=97=90=20=EB=94=B0=EB=A5=B8=20isRegistered=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20(#35)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ttubeog/domain/auth/service/AuthService.java | 10 ++++------ .../domain/member/application/MemberService.java | 3 +-- .../java/com/ttubeog/domain/member/domain/Member.java | 6 +++--- .../java/com/ttubeog/domain/member/dto/MemberDto.java | 2 +- .../domain/member/dto/response/MemberDetailRes.java | 2 +- 5 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/ttubeog/domain/auth/service/AuthService.java b/src/main/java/com/ttubeog/domain/auth/service/AuthService.java index 2764b9a2..03bed6c7 100644 --- a/src/main/java/com/ttubeog/domain/auth/service/AuthService.java +++ b/src/main/java/com/ttubeog/domain/auth/service/AuthService.java @@ -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; @@ -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 @@ -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); @@ -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())) diff --git a/src/main/java/com/ttubeog/domain/member/application/MemberService.java b/src/main/java/com/ttubeog/domain/member/application/MemberService.java index d350fc53..37711a11 100644 --- a/src/main/java/com/ttubeog/domain/member/application/MemberService.java +++ b/src/main/java/com/ttubeog/domain/member/application/MemberService.java @@ -39,8 +39,7 @@ public ResponseEntity getCurrentUser(HttpServletRequest request){ MemberDetailRes memberDetailRes = MemberDetailRes.builder() .id(member.getId()) - .email(member.getEmail()) - .name(member.getName()) + .name(member.getNickname()) .build(); ApiResponse apiResponse = ApiResponse.builder() diff --git a/src/main/java/com/ttubeog/domain/member/domain/Member.java b/src/main/java/com/ttubeog/domain/member/domain/Member.java index c01ccd08..230a1083 100644 --- a/src/main/java/com/ttubeog/domain/member/domain/Member.java +++ b/src/main/java/com/ttubeog/domain/member/domain/Member.java @@ -23,7 +23,7 @@ public class Member extends BaseEntity { private String oAuthId; - private String name; + private String nickname; @Size(max = 45) @NotNull @@ -55,11 +55,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; } } diff --git a/src/main/java/com/ttubeog/domain/member/dto/MemberDto.java b/src/main/java/com/ttubeog/domain/member/dto/MemberDto.java index f68677ea..0d56d0d3 100644 --- a/src/main/java/com/ttubeog/domain/member/dto/MemberDto.java +++ b/src/main/java/com/ttubeog/domain/member/dto/MemberDto.java @@ -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(); } diff --git a/src/main/java/com/ttubeog/domain/member/dto/response/MemberDetailRes.java b/src/main/java/com/ttubeog/domain/member/dto/response/MemberDetailRes.java index 3bedd910..3fc80933 100644 --- a/src/main/java/com/ttubeog/domain/member/dto/response/MemberDetailRes.java +++ b/src/main/java/com/ttubeog/domain/member/dto/response/MemberDetailRes.java @@ -23,7 +23,7 @@ public class MemberDetailRes { public static MemberDetailRes toDto(Member member) { return MemberDetailRes.builder() .id(member.getId()) - .name(member.getName()) + .name(member.getNickname()) .email(member.getEmail()) .build(); } From 9709b3464323a3c0376473b4c4fd39fd0fc856c7 Mon Sep 17 00:00:00 2001 From: arinming Date: Fri, 2 Feb 2024 18:13:51 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[Feat]=20=EB=8B=89=EB=84=A4=EC=9E=84=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20API=20=EA=B5=AC=ED=98=84=20(#35)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/auth/config/SecurityUtil.java | 1 - .../member/application/MemberService.java | 38 ++++++++++++++----- .../domain/repository/MemberRepository.java | 6 ++- .../dto/request/ProduceNicknameRequest.java | 13 +++++++ .../member/presentation/MemberController.java | 27 ++++++------- .../config/security/token/UserPrincipal.java | 3 -- 6 files changed, 60 insertions(+), 28 deletions(-) create mode 100644 src/main/java/com/ttubeog/domain/member/dto/request/ProduceNicknameRequest.java diff --git a/src/main/java/com/ttubeog/domain/auth/config/SecurityUtil.java b/src/main/java/com/ttubeog/domain/auth/config/SecurityUtil.java index bb7c0c34..1da8e405 100644 --- a/src/main/java/com/ttubeog/domain/auth/config/SecurityUtil.java +++ b/src/main/java/com/ttubeog/domain/auth/config/SecurityUtil.java @@ -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; diff --git a/src/main/java/com/ttubeog/domain/member/application/MemberService.java b/src/main/java/com/ttubeog/domain/member/application/MemberService.java index 37711a11..94ab96bc 100644 --- a/src/main/java/com/ttubeog/domain/member/application/MemberService.java +++ b/src/main/java/com/ttubeog/domain/member/application/MemberService.java @@ -1,20 +1,15 @@ 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.benefit.dto.response.CreateBenefitRes; 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; @@ -30,7 +25,7 @@ public class MemberService { // 현재 유저 조회 - public ResponseEntity getCurrentUser(HttpServletRequest request){ + public ResponseEntity getCurrentUser(HttpServletRequest request) { Long memberId = jwtTokenProvider.getMemberId(request); Optional checkUser = memberRepository.findById(memberId); @@ -49,4 +44,27 @@ public ResponseEntity getCurrentUser(HttpServletRequest request){ return ResponseEntity.ok(apiResponse); } -} + + // 닉네임 설정 + @Transactional + public ResponseEntity postMemberNickname(HttpServletRequest request, ProduceNicknameRequest produceNicknameRequest) { + Long memberId = jwtTokenProvider.getMemberId(request); + memberRepository.updateUserNickname(produceNicknameRequest.getNickname(), memberId); + + Optional checkUser = memberRepository.findById(memberId); + + Member member = checkUser.get(); + + MemberDetailRes memberDetailRes = MemberDetailRes.builder() + .id(member.getId()) + .name(member.getNickname()) + .build(); + + ApiResponse apiResponse = ApiResponse.builder() + .check(true) + .information(memberDetailRes) + .build(); + + return ResponseEntity.ok(apiResponse); + } +} \ No newline at end of file diff --git a/src/main/java/com/ttubeog/domain/member/domain/repository/MemberRepository.java b/src/main/java/com/ttubeog/domain/member/domain/repository/MemberRepository.java index 81b3a920..f9889abb 100644 --- a/src/main/java/com/ttubeog/domain/member/domain/repository/MemberRepository.java +++ b/src/main/java/com/ttubeog/domain/member/domain/repository/MemberRepository.java @@ -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; @@ -32,4 +33,7 @@ public interface MemberRepository extends JpaRepository{ @Query("select m.id from Member m where m.platform = :platform and m.platformId = :platformId") Optional 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); } diff --git a/src/main/java/com/ttubeog/domain/member/dto/request/ProduceNicknameRequest.java b/src/main/java/com/ttubeog/domain/member/dto/request/ProduceNicknameRequest.java new file mode 100644 index 00000000..588c2489 --- /dev/null +++ b/src/main/java/com/ttubeog/domain/member/dto/request/ProduceNicknameRequest.java @@ -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; +} diff --git a/src/main/java/com/ttubeog/domain/member/presentation/MemberController.java b/src/main/java/com/ttubeog/domain/member/presentation/MemberController.java index 0a8aac4b..957af597 100644 --- a/src/main/java/com/ttubeog/domain/member/presentation/MemberController.java +++ b/src/main/java/com/ttubeog/domain/member/presentation/MemberController.java @@ -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; @@ -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 @@ -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); + } } diff --git a/src/main/java/com/ttubeog/global/config/security/token/UserPrincipal.java b/src/main/java/com/ttubeog/global/config/security/token/UserPrincipal.java index a7daf1ce..7470db7c 100644 --- a/src/main/java/com/ttubeog/global/config/security/token/UserPrincipal.java +++ b/src/main/java/com/ttubeog/global/config/security/token/UserPrincipal.java @@ -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 From c69944f44250dfc823d0545a6fe0b5978de62622 Mon Sep 17 00:00:00 2001 From: arinming Date: Mon, 5 Feb 2024 19:50:31 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[Feat]=20MemberDetailRes=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=EC=97=90=20email,=20imageUrl=20=EC=82=AD=EC=A0=9C,=20?= =?UTF-8?q?platform=20=EC=B6=94=EA=B0=80=20(#39)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ttubeog/domain/member/application/MemberService.java | 6 +++--- src/main/java/com/ttubeog/domain/member/domain/Member.java | 2 -- .../domain/member/dto/response/MemberDetailRes.java | 7 +++---- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/ttubeog/domain/member/application/MemberService.java b/src/main/java/com/ttubeog/domain/member/application/MemberService.java index 94ab96bc..c83c3877 100644 --- a/src/main/java/com/ttubeog/domain/member/application/MemberService.java +++ b/src/main/java/com/ttubeog/domain/member/application/MemberService.java @@ -1,7 +1,6 @@ package com.ttubeog.domain.member.application; import com.ttubeog.domain.auth.security.JwtTokenProvider; -import com.ttubeog.domain.benefit.dto.response.CreateBenefitRes; import com.ttubeog.domain.member.domain.Member; import com.ttubeog.domain.member.domain.repository.MemberRepository; import com.ttubeog.domain.member.dto.request.ProduceNicknameRequest; @@ -23,7 +22,6 @@ public class MemberService { private final MemberRepository memberRepository; private final JwtTokenProvider jwtTokenProvider; - // 현재 유저 조회 public ResponseEntity getCurrentUser(HttpServletRequest request) { Long memberId = jwtTokenProvider.getMemberId(request); @@ -35,6 +33,7 @@ public ResponseEntity getCurrentUser(HttpServletRequest request) { MemberDetailRes memberDetailRes = MemberDetailRes.builder() .id(member.getId()) .name(member.getNickname()) + .platform(member.getPlatform()) .build(); ApiResponse apiResponse = ApiResponse.builder() @@ -58,6 +57,7 @@ public ResponseEntity postMemberNickname(HttpServletRequest request, ProduceN MemberDetailRes memberDetailRes = MemberDetailRes.builder() .id(member.getId()) .name(member.getNickname()) + .platform(member.getPlatform()) .build(); ApiResponse apiResponse = ApiResponse.builder() @@ -67,4 +67,4 @@ public ResponseEntity postMemberNickname(HttpServletRequest request, ProduceN return ResponseEntity.ok(apiResponse); } -} \ No newline at end of file +} diff --git a/src/main/java/com/ttubeog/domain/member/domain/Member.java b/src/main/java/com/ttubeog/domain/member/domain/Member.java index 230a1083..7878763d 100644 --- a/src/main/java/com/ttubeog/domain/member/domain/Member.java +++ b/src/main/java/com/ttubeog/domain/member/domain/Member.java @@ -40,8 +40,6 @@ public class Member extends BaseEntity { @Column(name = "platform") private Platform platform; - private String refreshToken; - @Enumerated(EnumType.STRING) @Column(name = "status") private Status status; diff --git a/src/main/java/com/ttubeog/domain/member/dto/response/MemberDetailRes.java b/src/main/java/com/ttubeog/domain/member/dto/response/MemberDetailRes.java index 3fc80933..b9db943b 100644 --- a/src/main/java/com/ttubeog/domain/member/dto/response/MemberDetailRes.java +++ b/src/main/java/com/ttubeog/domain/member/dto/response/MemberDetailRes.java @@ -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; @@ -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.getNickname()) - .email(member.getEmail()) + .platform(member.getPlatform()) .build(); } From 6304e97ae03d5f8c291c71b2e9d874df0955e559 Mon Sep 17 00:00:00 2001 From: arinming Date: Mon, 5 Feb 2024 20:53:47 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[Feat]=20=EB=A9=A4=EB=B2=84=20=EC=97=94?= =?UTF-8?q?=ED=8B=B0=ED=8B=B0=EC=97=90=20refresh=5Ftoken=20=EB=B3=80?= =?UTF-8?q?=EC=88=98=20=EC=B6=94=EA=B0=80=20(#35)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ttubeog/domain/member/domain/Member.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/ttubeog/domain/member/domain/Member.java b/src/main/java/com/ttubeog/domain/member/domain/Member.java index 7878763d..48338927 100644 --- a/src/main/java/com/ttubeog/domain/member/domain/Member.java +++ b/src/main/java/com/ttubeog/domain/member/domain/Member.java @@ -44,6 +44,10 @@ public class Member extends BaseEntity { @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;