Skip to content

Commit

Permalink
Merge pull request #4 from lotteon2/dev-user-mypage
Browse files Browse the repository at this point in the history
Dev user mypage
  • Loading branch information
nowgnas authored Dec 8, 2023
2 parents cad949a + 0af3516 commit 560ed0e
Show file tree
Hide file tree
Showing 32 changed files with 398 additions and 232 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ dependencies {
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'com.h2database:h2:2.1.214'
implementation "org.springframework.cloud:spring-cloud-starter-bus-kafka"
implementation 'org.springframework.kafka:spring-kafka'
}

dependencyManagement {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.bit.lotte.flower.user.social.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@Getter
@NoArgsConstructor
public class UserPhoneNumberDto {

private String phoneNumber;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.bit.lotte.flower.user.social.dto.command;

import javax.annotation.Nullable;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Getter
public class
UpdateUserInfoCommand {
@Nullable
private String nickname;
@Nullable
private String email;
@Nullable
private String phoneNumber;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.bit.lotte.flower.user.social.dto.response;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class UserDataDto {

private String nickname;
private String phoneNumber;
private String email;


}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserDataResponse {
public class UserLoginDataResponse {
private String nickname;
private boolean isPhoneNumberIsRegistered;
private String profileImage;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.bit.lotte.flower.user.social.dto.response;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Builder
@AllArgsConstructor
@Getter
@NoArgsConstructor
public class UserMypageResponse<T extends UserDataDto> {
Long couponCnt;
Long likesCnt;
T data;

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public class SocialUser {
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private Long oauthId;
private String email;
private String nickname;
private String profileImage;
private String phoneNumber;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,74 @@
package com.bit.lotte.flower.user.social.http.controller;


import com.bit.lotte.flower.user.social.dto.response.UserDataResponse;
import bloomingblooms.response.CommonResponse;
import com.bit.lotte.flower.user.social.dto.UserPhoneNumberDto;
import com.bit.lotte.flower.user.social.dto.command.UpdateUserInfoCommand;
import com.bit.lotte.flower.user.social.dto.command.UserLoginCommand;
import com.bit.lotte.flower.user.social.dto.response.UserLoginDataResponse;
import com.bit.lotte.flower.user.social.dto.response.UserDataDto;
import com.bit.lotte.flower.user.social.dto.response.UserMypageResponse;
import com.bit.lotte.flower.user.social.http.message.GetUserCouponCntRequest;
import com.bit.lotte.flower.user.social.http.message.GetUserLikesCntRequest;
import com.bit.lotte.flower.user.social.service.GetUserInfoService;
import com.bit.lotte.flower.user.social.service.SocialUserLoginManager;
import com.bit.lotte.flower.user.social.service.SocialUpdateUserService;
import javax.validation.Valid;
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.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;

@RequiredArgsConstructor
@RestController
public class SocialUserRestController {

private final GetUserLikesCntRequest getUserLikesCntRequest;
private final GetUserCouponCntRequest getUserCouponCntRequest;
private final GetUserInfoService getUserInfoService;
private final SocialUserLoginManager socialUserLoginManager;
private final SocialUpdateUserService socialUserService;

@PostMapping("/users/social")
public ResponseEntity<UserDataResponse> userLogin(@RequestBody UserLoginCommand userLoginCommand){
UserDataResponse response = socialUserLoginManager.process(userLoginCommand);
return ResponseEntity.ok(response);
@PostMapping("/social")
public ResponseEntity<UserLoginDataResponse> userLogin(
@RequestBody UserLoginCommand userLoginCommand) {
UserLoginDataResponse response = socialUserLoginManager.process(userLoginCommand);
return ResponseEntity.ok(response);
}

@PutMapping("/social/phone-number")
public CommonResponse<String> userPhoneNumberUpdate(
@RequestBody UserPhoneNumberDto phoneNumberDto, @RequestHeader Long userId) {
socialUserService.updatePhoneNumber(userId, phoneNumberDto.getPhoneNumber());
return CommonResponse.success("성공");
}

@GetMapping("/social")
public CommonResponse<UserMypageResponse<UserDataDto>> getUserData(@RequestHeader Long userId) {
UserDataDto userDataDto = getUserInfoService.getUserdata(userId);
Long userLikesCnt = getUserLikesCntRequest.request(userId);
Long userCouponCnt = getUserCouponCntRequest.request(userId);
return CommonResponse.success(getUserMypageResponse(userDataDto, userLikesCnt, userCouponCnt));
}

@PutMapping("/social")
public CommonResponse<String> updateUserData(@RequestHeader Long userId,
@Valid @RequestBody UpdateUserInfoCommand command) {
socialUserService.updateUserInfo(userId, command.getNickname(), command.getEmail(),
command.getPhoneNumber());
return CommonResponse.success("업데이트 성공");

}

private UserMypageResponse<UserDataDto> getUserMypageResponse(UserDataDto userDataDto, Long likesCnt,
Long couponCnt) {
return UserMypageResponse.builder().data(userDataDto).couponCnt(couponCnt)
.likesCnt(likesCnt).build();
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.bit.lotte.flower.user.social.http.feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;


@FeignClient(name = "get-user-likes-cnt", value = "${service.likes.domain}")
public interface UserLikesFeignRequest {

@GetMapping("/likes-cnt")
ResponseEntity<Long> getUserLikesCnt(@RequestHeader Long userId);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.bit.lotte.flower.user.social.http.feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;

@FeignClient(name = "get-user-usable-coupon-cnt", value = "${service.coupon.domain}")
public interface UserUsableCouponCntFeignRequest {
@GetMapping("/coupons/count")
ResponseEntity<Long> getUsableUserCouponCnt(@RequestHeader Long userId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.bit.lotte.flower.user.social.http.message;

import org.springframework.stereotype.Component;

@Component
public interface GetUserCouponCntRequest {
public Long request(Long userId);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.bit.lotte.flower.user.social.http.message;

import com.bit.lotte.flower.user.social.http.feign.UserUsableCouponCntFeignRequest;
import java.util.Objects;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@RequiredArgsConstructor
@Component
public class GetUserCouponCntRequestImpl implements
GetUserCouponCntRequest {

private final UserUsableCouponCntFeignRequest feignRequest;
@Override
public Long request(Long userId) {
return feignRequest.getUsableUserCouponCnt(userId).getBody();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.bit.lotte.flower.user.social.http.message;

import org.springframework.stereotype.Component;

@Component
public interface GetUserLikesCntRequest {
public Long request(Long userId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.bit.lotte.flower.user.social.http.message;

import com.bit.lotte.flower.user.social.http.feign.UserLikesFeignRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@RequiredArgsConstructor
@Component
public class GetUserLikesCntRequestImpl implements
GetUserLikesCntRequest {

private final UserLikesFeignRequest userLikesFeignRequest;
@Override
public Long request(Long userId) {
return userLikesFeignRequest.getUserLikesCnt(userId).getBody();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@


import com.bit.lotte.flower.user.common.DefaultProfileImagerURL;
import com.bit.lotte.flower.user.common.valueobject.AuthId;
import com.bit.lotte.flower.user.social.dto.command.UserLoginCommand;
import com.bit.lotte.flower.user.social.dto.response.UserDataResponse;
import com.bit.lotte.flower.user.social.dto.response.UserLoginDataResponse;
import com.bit.lotte.flower.user.social.dto.response.UserDataDto;
import com.bit.lotte.flower.user.social.entity.SocialUser;

public class SocialUserMapper {
Expand All @@ -15,28 +15,48 @@ private SocialUserMapper()

}

public static UserDataResponse getLoginResponse(String nickName,
public static UserLoginDataResponse getLoginResponse(String nickName,
boolean isPhoneNumberRegistered) {
return UserDataResponse.builder()
return UserLoginDataResponse.builder()
.nickname(nickName)
.isPhoneNumberIsRegistered(isPhoneNumberRegistered).build();

}



public static SocialUser createSocialUserByLoginCommand(UserLoginCommand userCreateCommand) {
return SocialUser.builder().isDeleted(false).nickname(userCreateCommand.getNickname())
return SocialUser.builder().isDeleted(false).nickname(userCreateCommand.getNickname()).email(
userCreateCommand.getEmail())
.phoneNumber(null).profileImage(DefaultProfileImagerURL.PROFILE_DEFAULT_IMAGE_URL).oauthId(
userCreateCommand.getSocialId().getValue()).build();
}

public static UserDataResponse createUserLoginCommandBySocialUser(String profileImage,String nickname, Boolean socialUserPhoneIsRegistered){
return UserDataResponse.builder().isPhoneNumberIsRegistered(socialUserPhoneIsRegistered).nickname(
nickname).profileImage(profileImage).build();
public static UserLoginDataResponse createUserLoginCommandBySocialUser(String profileImage,
String nickname, Boolean socialUserPhoneIsRegistered) {
return UserLoginDataResponse.builder().isPhoneNumberIsRegistered(socialUserPhoneIsRegistered)
.nickname(
nickname).profileImage(profileImage).build();
}

public static UserDataDto socialUserToUserMyPageDataResponse(SocialUser socialUser) {
return UserDataDto.builder()
.email(socialUser.getEmail()).nickname(socialUser.getNickname())
.phoneNumber(socialUser.getPhoneNumber()).build();
}

private AuthId getAuthId(Long value){
return AuthId.builder().value(value).build();
public static SocialUser updatedUserPhoneNumber(SocialUser socialUser, String phoneNumber) {
return SocialUser.builder().email(socialUser.getEmail()).isDeleted(socialUser.getIsDeleted())
.nickname(
socialUser.getNickname())
.phoneNumber(phoneNumber).profileImage(socialUser.getProfileImage())
.oauthId(socialUser.getOauthId()).id(socialUser.getId()).build();
}


public static SocialUser updateUserInfo(SocialUser socialUser, String nickname, String email,
String phoneNumber) {
return SocialUser.builder().id(socialUser.getId()).oauthId(socialUser.getOauthId())
.profileImage(socialUser.getProfileImage()).phoneNumber(phoneNumber).email(email)
.nickname(email).isDeleted(socialUser.getIsDeleted()).build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.bit.lotte.flower.user.social.repository;


import com.bit.lotte.flower.user.social.entity.SocialUser;
import com.bit.lotte.flower.user.social.exception.SocialUserDomainException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class FindSocialUserByLongIdService {

private final SocialUserJpaRepository repository;

public SocialUser findUserElseThrowError(Long id) {
return repository.findById(id).orElseThrow(() -> {
throw new SocialUserDomainException("존재하지 않는 회원입니다.");
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.bit.lotte.flower.user.social.service;

import com.bit.lotte.flower.user.social.dto.response.UserDataDto;
import org.springframework.stereotype.Service;

@Service
public interface GetUserInfoService {
UserDataDto getUserdata(Long id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.bit.lotte.flower.user.social.service;

import com.bit.lotte.flower.user.social.dto.response.UserDataDto;
import com.bit.lotte.flower.user.social.entity.SocialUser;
import com.bit.lotte.flower.user.social.mapper.SocialUserMapper;
import com.bit.lotte.flower.user.social.repository.FindSocialUserByLongIdService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@RequiredArgsConstructor
@Service
public class GetUserInfoWithService implements
GetUserInfoService {
private final FindSocialUserByLongIdService findUserByIdService;
@Override
public UserDataDto getUserdata(Long id) {
SocialUser socialUser = findUserByIdService.findUserElseThrowError(id);
return SocialUserMapper.socialUserToUserMyPageDataResponse(socialUser);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.bit.lotte.flower.user.social.service;

import org.springframework.stereotype.Service;

@Service
public interface SocialUpdateUserService {

void updatePhoneNumber(Long userId ,String phoneNumber);

void updateUserInfo(Long userId, String nickname, String email, String phoneNumber);
}

Loading

0 comments on commit 560ed0e

Please sign in to comment.