Skip to content
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 @@ -15,6 +15,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

@Service
@RequiredArgsConstructor
Expand All @@ -38,14 +39,16 @@ public BaseResponse<GetRecommenderCodeResponse> getRecommenderCode(String userEm

public BaseResponse<GetSharingPageInfoResponse> getSharingPageInfo(long userId){
User user = getUser.getUserForSharing(userId);
String recommendedPeopleName = user.getRecommenders();
List<String> recommendedPeopleNameList = new ArrayList<>(Arrays.asList(recommendedPeopleName
.split(",")));
List<String> recommendedPeopleName = user.getNameOfRecommendedWriter();

if(recommendedPeopleName.size() == 1 && Objects.equals(recommendedPeopleName.get(0), "")){
recommendedPeopleName = new ArrayList<>();
}

return new BaseResponse<>(
BaseResponseStatus.OK,
BaseResponseMessage.공유하기_페이지_조회가_성공했습니다.getMessage(),
new GetSharingPageInfoResponse(user.isFirstSharing(), recommendedPeopleNameList.size(), recommendedPeopleNameList)
new GetSharingPageInfoResponse(user.isFirstSharing(), recommendedPeopleName.size(), recommendedPeopleName)
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.neighbors.tohero.domain.query.UserRepository;
import lombok.RequiredArgsConstructor;

import java.util.ArrayList;
import java.util.List;

@DomainService
Expand All @@ -25,7 +26,11 @@ public class CreateLetter {
private final JwtProvider jwtProvider;

public long createLetter(long userId, String writer, CreateLetterRequest createLetterRequest){
User user = userRepository.getUser(repo -> repo.findByUserId(userId));
String recommenderEmailDividedBySlash = null;
if(createLetterRequest.recommenderCode() != null){
recommenderEmailDividedBySlash = jwtProvider.getRecommenderEmails(createLetterRequest.recommenderCode());
}
User user = userRepository.getUserAndUpdateRecommenders(repo -> repo.findByUserId(userId), recommenderEmailDividedBySlash);
Letter newLetter;
try{
Address address = addressRepository.getAddressById(createLetterRequest.addressId());
Expand Down Expand Up @@ -53,7 +58,7 @@ public long createLetter(long userId, String writer, CreateLetterRequest createL
}

Letter createdLetter = letterRepository.createLetter(newLetter);
reflectRecommendation(writer, createLetterRequest.recommenderCode());
reflectRecommendation(user, writer, createLetterRequest.recommenderCode());

return createdLetter.getLetterId();
}
Expand Down Expand Up @@ -100,4 +105,12 @@ private void reflectRecommendation(String writer, String recommenderCode){
userRepository.reflectRecommendation(writer, recommenderEmails);
}
}

private void reflectRecommendation(User user, String writer, String recommenderCode){
if(recommenderCode != null){
String recommenderEmailsDividedBySlash = jwtProvider.getRecommenderEmails(recommenderCode);
List<String> recommenderEmails = List.of(recommenderEmailsDividedBySlash.split("/"));
userRepository.reflectRecommendation(writer, recommenderEmails);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import lombok.Getter;
import lombok.Setter;

import java.util.List;

@Builder
@Getter
@AllArgsConstructor
Expand All @@ -15,12 +17,14 @@ public class User {
private String userName;
private String email;
private Role role;
@Setter
private String recommenders;
@Setter
private boolean isFirstSharing;
private List<String> nameOfRecommendedWriter;

public static User of (Long userId, String userName, String email, Role role, String recommenders, boolean isFirstSharing) {
return new User(userId, userName, email, role, recommenders, isFirstSharing);
public static User of (Long userId, String userName, String email, Role role, String recommenders, boolean isFirstSharing, List<String> nameOfRecommendedWriter) {
return new User(userId, userName, email, role, recommenders, isFirstSharing, nameOfRecommendedWriter);
}

public static User toEntity(AuthenticateUserRequest authenticateUserRequest) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ public interface UserRepository {
void deleteUser(Consumer<UserEntityRepository> findUserConsumer);
void reflectRecommendation(String writer, List<String> recommenderEmails);
User getUserForSharing(Function<UserEntityRepository, Optional<UserEntity>> findUserFunction);
User getUserAndUpdateRecommenders(Function<UserEntityRepository, Optional<UserEntity>> findUserFunction, String recommenderCode);
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,11 @@ public void addRecommendedPeopleName(String recommendedPeopleName){
}
this.recommendedPeopleName = recommendedPeopleName;
}

public String getRecommendedPeopleName(){
if(recommendedPeopleName == null){
return "";
}
return recommendedPeopleName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ public class UserEntity extends BaseEntity {
@Column(name = "recommenders", nullable = true)
private String recommenders;

@Setter
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "recommend_id", nullable = true)
private RecommendEntity recommendEntity;
Expand Down Expand Up @@ -64,8 +65,4 @@ public String getRecommenders() {
if(recommenders == null) return "";
return recommenders;
}

public void setRecommenders(RecommendEntity recommendEntity) {
this.recommendEntity = recommendEntity;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
import com.neighbors.tohero.infrastructure.entity.UserEntity;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@Component
public class UserMapper {
public UserEntity toNewEntity(User user){
Expand All @@ -21,13 +25,21 @@ public UserEntity toEntity(User user){
}

public User toDomain(UserEntity userEntity){
List<String> nameOfRecommendedWriter;
if(userEntity.getRecommendEntity() == null){
nameOfRecommendedWriter = new ArrayList<>();
}
else{
nameOfRecommendedWriter = Arrays.stream(userEntity.getRecommendEntity().getRecommendedPeopleName().split(",")).toList();
}
return User.of(
userEntity.getUserId(),
userEntity.getNickName(),
userEntity.getEmail(),
userEntity.getRole(),
userEntity.getRecommenders(),
userEntity.isFirstSharing()
userEntity.isFirstSharing(),
nameOfRecommendedWriter
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
Expand All @@ -35,7 +34,7 @@ public User createUser(User user) {
}catch(UserException e){
UserEntity userEntity = userMapper.toNewEntity(user);
RecommendEntity recommendEntity = new RecommendEntity(userEntity);
userEntity.setRecommenders(recommendEntity);
userEntity.setRecommendEntity(recommendEntity);
userEntityRepository.save(userEntity);

UserEntity createdUserEntity = userEntityRepository.findByEmail(user.getEmail())
Expand Down Expand Up @@ -103,4 +102,46 @@ public User getUserForSharing(Function<UserEntityRepository, Optional<UserEntity

return user;
}

@Override
public User getUserAndUpdateRecommenders(Function<UserEntityRepository, Optional<UserEntity>> findUserFunction, String recommenderCode) {
UserEntity userEntity = getUserEntity(findUserFunction);

if(recommenderCode != null && !recommenderCode.isEmpty()){
updateUserRecommenders(userEntity, recommenderCode);
}

return userMapper.toDomain(userEntity);
}

private void updateUserRecommenders(UserEntity userEntity, String recommenderEmailsDividedBySlash) {
if(userEntity.getRecommenders().isEmpty()){
userEntity.setRecommenders(recommenderEmailsDividedBySlash);
}
else{
queueingUserRecommenders(userEntity, recommenderEmailsDividedBySlash);
}

//이전 사람 이름 저장
String lastUserEmail = recommenderEmailsDividedBySlash.split("/")[recommenderEmailsDividedBySlash.split("/").length - 1];
UserEntity lastUserEntity = getUserEntity(repo -> repo.findByEmail(lastUserEmail));
userEntity.getRecommendEntity().addRecommendedPeopleName(lastUserEntity.getNickName());
userEntityRepository.save(userEntity);
}

private void queueingUserRecommenders(UserEntity userEntity, String recommenderEmailsDividedBySlash) {
List<String> existedRecommendersEmail = new java.util.ArrayList<>(Arrays.stream(userEntity.getRecommenders().split("/")).toList());
List<String> addedRecommendersEmail = Arrays.stream(recommenderEmailsDividedBySlash.split("/")).toList();

String result = userEntity.getRecommenders() + "/" + recommenderEmailsDividedBySlash;
if(existedRecommendersEmail.size() + addedRecommendersEmail.size() > 5){
existedRecommendersEmail.addAll(addedRecommendersEmail);

int size = existedRecommendersEmail.size();
List<String> lastFive = existedRecommendersEmail.subList(Math.max(0, size - 5), size);

result = String.join("/", lastFive);
}
userEntity.setRecommenders(result);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,7 @@
public interface RecommendEntityRepository extends JpaRepository<RecommendEntity, Long> {
@Query("SELECT re FROM RecommendEntity re WHERE re.userEntity.email IN :emails")
List<RecommendEntity> findAllByUserEmailIn(@Param("emails") List<String> emails);

@Query("SELECT re FROM RecommendEntity re WHERE re.userEntity.userId = :userId")
RecommendEntity findByUserId(@Param("userId") Long userId);
}