Skip to content

Commit

Permalink
♻️ refactor: Kafka Dto 수정 (#103)
Browse files Browse the repository at this point in the history
♻️ refactor: Kafka Dto 수정 (#103)
  • Loading branch information
jinho7 authored Jun 2, 2024
2 parents 631cd3a + 74eb22b commit a22e5fe
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 78 deletions.
Original file line number Diff line number Diff line change
@@ -1,19 +1,13 @@
package com.waither.userservice.converter;

import com.waither.userservice.dto.response.SettingResDto;
import com.waither.userservice.entity.Region;
import com.waither.userservice.entity.Setting;
import com.waither.userservice.entity.User;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.experimental.UtilityClass;

import java.time.DayOfWeek;
import java.util.AbstractMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class SettingConverter {

Expand All @@ -35,52 +29,57 @@ public static Setting createSetting() {
}

public static SettingResDto.CustomDto toCustomDto(User user) {
return new SettingResDto.CustomDto(user.isCustom());
return SettingResDto.CustomDto.builder()
.custom(user.isCustom())
.build();
}

public static SettingResDto.RegionNameDto toRegionNameDto(Setting setting) {
return new SettingResDto.RegionNameDto(setting.getRegion().getRegionName());
return SettingResDto.RegionNameDto.builder()
.regionName(setting.getRegion().getRegionName())
.build();
}

public static SettingResDto.NotificationDto toNotificationDto(Setting setting) {
List<String> days = setting.getDays().stream()
.map(Enum::toString)
.toList();

return new SettingResDto.NotificationDto(
setting.isOutAlert(),
days,
setting.getOutTime(),
setting.isClimateAlert(),
setting.isUserAlert(),
setting.isSnowAlert()
);
return SettingResDto.NotificationDto.builder()
.outAlert(setting.isOutAlert())
.days(days)
.outTime(setting.getOutTime())
.climateAlert(setting.isClimateAlert())
.userAlert(setting.isUserAlert())
.snowAlert(setting.isSnowAlert())
.build();
}

public static SettingResDto.WindDto toWindDto(Setting setting) {
return new SettingResDto.WindDto(
setting.isWindAlert(),
setting.getWindDegree()
);
return SettingResDto.WindDto.builder()
.windAlert(setting.isWindAlert())
.windDegree(setting.getWindDegree())
.build();
}

public static SettingResDto.DisplayDto toDisplayDto(Setting setting) {
return new SettingResDto.DisplayDto(
setting.isPrecipitation(),
setting.isWind(),
setting.isDust()
);
return SettingResDto.DisplayDto.builder()
.precipitation(setting.isPrecipitation())
.wind(setting.isWind())
.dust(setting.isDust())
.build();
}

public static SettingResDto.WeightDto toWeightDto(Setting setting) {
return new SettingResDto.WeightDto(setting.getWeight());
return SettingResDto.WeightDto.builder()
.weight(setting.getWeight())
.build();
}

public static SettingResDto.UserInfoDto toUserInfoDto(User user) {
return new SettingResDto.UserInfoDto(
user.getEmail(),
user.getNickname()
);
return SettingResDto.UserInfoDto.builder()
.email(user.getEmail())
.nickname(user.getNickname())
.build();
}

}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,23 @@
package com.waither.userservice.dto.response;

import lombok.Builder;

import java.time.LocalTime;
import java.util.List;

public class SettingResDto {

@Builder
public record CustomDto(
boolean custom
) { }

@Builder
public record RegionNameDto(
String regionName
) { }

@Builder
public record NotificationDto(
boolean outAlert,
List<String> days,
Expand All @@ -22,21 +27,25 @@ public record NotificationDto(
boolean snowAlert
) { }

@Builder
public record WindDto(
boolean windAlert,
Integer windDegree
) { }

@Builder
public record DisplayDto(
boolean precipitation,
boolean wind,
boolean dust
) { }

@Builder
public record WeightDto(
Double weight
) { }

@Builder
public record UserInfoDto(
String email,
String nickname
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,37 @@
import com.waither.userservice.entity.UserMedian;
import com.waither.userservice.entity.Setting;
import com.waither.userservice.entity.User;
import com.waither.userservice.entity.enums.Season;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class KafkaConverter {

public static KafkaDto.InitialDataDto toInitialData(User user, Setting setting, UserMedian userMedian
) {
public static KafkaDto.InitialDataDto toInitialData(User user, Setting setting, List<UserMedian> userMedians) {
Map<Season, UserMedian> userMedianMap = userMedians.stream()
.collect(Collectors.toMap(UserMedian::getSeason, Function.identity()));

Map<Season, KafkaDto.SeasonData> seasonDataMap = userMedianMap.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> KafkaDto.SeasonData.builder()
.medianOf1And2(entry.getValue().getMedianOf1And2())
.medianOf2And3(entry.getValue().getMedianOf2And3())
.medianOf3And4(entry.getValue().getMedianOf3And4())
.medianOf4And5(entry.getValue().getMedianOf4And5())
.build(),
(a, b) -> {
throw new IllegalStateException("Duplicate key");
},
() -> new EnumMap<>(Season.class)
));

return KafkaDto.InitialDataDto.builder()
.nickName(user.getNickname())
.climateAlert(setting.isClimateAlert())
Expand All @@ -24,25 +43,30 @@ public static KafkaDto.InitialDataDto toInitialData(User user, Setting setting,
.windDegree(setting.getWindDegree())
.regionReport(setting.isRegionReport())
.weight(setting.getWeight())
.seasonData(seasonDataMap)
.build();
}

public static KafkaDto.UserMedianDto toUserMedianDto(User user, UserMedian userMedian) {
KafkaDto.SeasonData seasonData = KafkaDto.SeasonData.builder()
.medianOf1And2(userMedian.getMedianOf1And2())
.medianOf2And3(userMedian.getMedianOf2And3())
.medianOf3And4(userMedian.getMedianOf3And4())
.medianOf4And5(userMedian.getMedianOf4And5())
.build();
}

public static KafkaDto.UserMedianDto toUserMedianDto(User user, UserMedian userMedian) {
List<Map<String, Double>> medians = Arrays.asList(
Map.of("medianOf1And2", userMedian.getMedianOf1And2()),
Map.of("medianOf2And3", userMedian.getMedianOf2And3()),
Map.of("medianOf3And4", userMedian.getMedianOf3And4()),
Map.of("medianOf4And5", userMedian.getMedianOf4And5())
);
return new KafkaDto.UserMedianDto(user.getId(), medians);
return KafkaDto.UserMedianDto.builder()
.email(user.getEmail())
.seasonData(seasonData)
.build();
}

public static KafkaDto.UserSettingsDto toSettingDto(User user, String key, String value) {
return new KafkaDto.UserSettingsDto(user.getId(), key, value);
return KafkaDto.UserSettingsDto.builder()
.email(user.getEmail())
.key(key)
.value(value)
.build();
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.waither.userservice.kafka;

import com.waither.userservice.entity.enums.Season;
import lombok.Builder;

import java.util.List;
Expand All @@ -8,30 +9,36 @@
public class KafkaDto {

@Builder
public record InitialDataDto(
public record SeasonData(
Double medianOf1And2,
Double medianOf2And3,
Double medianOf3And4,
Double medianOf4And5
) {}

@Builder
public record InitialDataDto(
String email,
String nickName,
boolean climateAlert,
boolean userAlert,
boolean snowAlert,
boolean windAlert,
Integer windDegree,
int windDegree,
boolean regionReport,
Double weight,
Double medianOf1And2,
Double medianOf2And3,
Double medianOf3And4,
Double medianOf4And5
double weight,
Map<Season, SeasonData> seasonData
) {}

@Builder
public record UserMedianDto(
Long userId,
List<Map<String, Double>> medians

String email,
SeasonData seasonData
) {}

@Builder
public record UserSettingsDto(
Long userId,
String email,
String key,
String value
) {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,36 +4,33 @@
import com.waither.userservice.converter.SettingConverter;
import com.waither.userservice.converter.SurveyConverter;
import com.waither.userservice.converter.UserConverter;
import com.waither.userservice.dto.converter.AccountConverter;
import com.waither.userservice.dto.request.UserReqDto;
import com.waither.userservice.dto.response.KakaoResDto;
import com.waither.userservice.entity.*;
import com.waither.userservice.entity.enums.Season;
import com.waither.userservice.global.exception.CustomException;
import com.waither.userservice.global.jwt.dto.JwtDto;
import com.waither.userservice.global.jwt.util.JwtUtil;
import com.waither.userservice.global.jwt.userdetails.PrincipalDetails;
import com.waither.userservice.global.jwt.util.JwtUtil;
import com.waither.userservice.global.response.ErrorCode;
import com.waither.userservice.global.util.RedisUtil;
import com.waither.userservice.kafka.KafkaConverter;
import com.waither.userservice.kafka.KafkaDto;
import com.waither.userservice.kafka.KafkaService;
import com.waither.userservice.dto.converter.AccountConverter;
import com.waither.userservice.dto.response.KakaoResDto;
import com.waither.userservice.entity.Region;
import com.waither.userservice.entity.Setting;
import com.waither.userservice.entity.User;
import com.waither.userservice.repository.UserRepository;
import com.waither.userservice.global.exception.CustomException;
import com.waither.userservice.global.response.ErrorCode;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.transaction.annotation.Transactional;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;

import static com.waither.userservice.service.commandService.SurveyService.getCurrentSeason;
Expand Down Expand Up @@ -86,22 +83,14 @@ public void signup(UserReqDto.SignUpRequestDto requestDto) {
})
.toList();


// 연관관계 설정
newSetting.setRegion(newRegion);
newUser.setSetting(newSetting);
newUser.setUserData(userDataList);
newUser.setUserMedian(userMedianList);

//
Season currentSeason = getCurrentSeason();
UserMedian currentUserMedian = userMedianList.stream()
.filter(userMedian -> userMedian.getSeason() == currentSeason)
.findFirst()
.orElseThrow(() -> new CustomException(ErrorCode.INVALID_SEASON));

// 초기값 Kafka 전송
KafkaDto.InitialDataDto initialDataDto = KafkaConverter.toInitialData(newUser, newSetting, currentUserMedian);
KafkaDto.InitialDataDto initialDataDto = KafkaConverter.toInitialData(newUser, newSetting, userMedianList);
kafkaService.sendInitialData(initialDataDto);
userRepository.save(newUser);
}
Expand Down

0 comments on commit a22e5fe

Please sign in to comment.