diff --git a/src/main/java/com/cozymate/cozymate_server/domain/memberstat/memberstat/converter/MemberStatConverter.java b/src/main/java/com/cozymate/cozymate_server/domain/memberstat/memberstat/converter/MemberStatConverter.java index 2ba80823..3e75fd01 100644 --- a/src/main/java/com/cozymate/cozymate_server/domain/memberstat/memberstat/converter/MemberStatConverter.java +++ b/src/main/java/com/cozymate/cozymate_server/domain/memberstat/memberstat/converter/MemberStatConverter.java @@ -23,7 +23,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import lombok.extern.slf4j.Slf4j; +@Slf4j public class MemberStatConverter { private static final Integer NO_EQUALITY = null; @@ -67,35 +69,35 @@ public static MemberStatDetailResponseDTO toMemberStatDetailDTOFromEntity( .turnOffTime( QuestionAnswerMapper.calculateHour(lifestyle.getTurnOffTime())) .smoking( - QuestionAnswerMapper.mapValue("흡연여부", lifestyle.getSmokingStatus())) + QuestionAnswerMapper.mapValue("smoking", lifestyle.getSmokingStatus())) .sleepingHabit( - QuestionAnswerMapper.mapValues("잠버릇", lifestyle.getSleepingHabit())) // 중복선택 + QuestionAnswerMapper.mapValues("sleepingHabit", lifestyle.getSleepingHabit())) // 중복선택 .airConditioningIntensity(lifestyle.getCoolingIntensity()) .heatingIntensity(lifestyle.getHeatingIntensity()) .lifePattern( - QuestionAnswerMapper.mapValue("생활패턴", lifestyle.getLifePattern())) + QuestionAnswerMapper.mapValue("lifePattern", lifestyle.getLifePattern())) .intimacy( - QuestionAnswerMapper.mapValue("친밀도", lifestyle.getIntimacy())) + QuestionAnswerMapper.mapValue("intimacy", lifestyle.getIntimacy())) .canShare( - QuestionAnswerMapper.mapValue("물건공유", lifestyle.getItemSharing())) + QuestionAnswerMapper.mapValue("canShare", lifestyle.getItemSharing())) .isPlayGame( - QuestionAnswerMapper.mapValue("게임여부", lifestyle.getPlayingGameFrequency())) + QuestionAnswerMapper.mapValue("isPlayGame", lifestyle.getPlayingGameFrequency())) .isPhoneCall( - QuestionAnswerMapper.mapValue("전화여부", lifestyle.getPhoneCallingFrequency())) + QuestionAnswerMapper.mapValue("isPhoneCall", lifestyle.getPhoneCallingFrequency())) .studying( - QuestionAnswerMapper.mapValue("공부여부", lifestyle.getStudyingFrequency())) + QuestionAnswerMapper.mapValue("studying", lifestyle.getStudyingFrequency())) .intake( - QuestionAnswerMapper.mapValue("섭취여부", lifestyle.getEatingFrequency())) + QuestionAnswerMapper.mapValue("intake", lifestyle.getEatingFrequency())) .cleanSensitivity(lifestyle.getCleannessSensitivity()) .noiseSensitivity(lifestyle.getNoiseSensitivity()) .cleaningFrequency( - QuestionAnswerMapper.mapValue("청소빈도", lifestyle.getCleaningFrequency())) + QuestionAnswerMapper.mapValue("cleaningFrequency", lifestyle.getCleaningFrequency())) .drinkingFrequency( - QuestionAnswerMapper.mapValue("음주빈도", lifestyle.getDrinkingFrequency())) + QuestionAnswerMapper.mapValue("drinkingFrequency", lifestyle.getDrinkingFrequency())) .personality( - QuestionAnswerMapper.mapValues("성격", lifestyle.getPersonality())) + QuestionAnswerMapper.mapValues("personality", lifestyle.getPersonality())) .mbti( - QuestionAnswerMapper.mapValue("MBTI", lifestyle.getMbti())) + QuestionAnswerMapper.mapValue("mbti", lifestyle.getMbti())) .selfIntroduction(memberStat.getSelfIntroduction()) .build(); } @@ -146,35 +148,38 @@ public static Lifestyle toLifestyleFromDto(CreateMemberStatRequestDTO dto) { dto.sleepingTime())) .turnOffTime( QuestionAnswerMapper.convertTimeToInteger(dto.turnOffMeridian(), dto.turnOffTime())) - .smokingStatus(QuestionAnswerMapper.getIndex("흡연여부", dto.smoking())) + .smokingStatus(QuestionAnswerMapper.getIndex("smoking", dto.smoking())) .sleepingHabit( - QuestionAnswerMapper.convertBitMaskToInteger("잠버릇", dto.sleepingHabit())) + QuestionAnswerMapper.convertBitMaskToInteger("sleepingHabit", dto.sleepingHabit())) .coolingIntensity(dto.airConditioningIntensity()) .heatingIntensity(dto.heatingIntensity()) - .lifePattern(QuestionAnswerMapper.getIndex("생활패턴", dto.lifePattern())) - .intimacy(QuestionAnswerMapper.getIndex("친밀도", dto.intimacy())) - .itemSharing(QuestionAnswerMapper.getIndex("물건공유", dto.canShare())) - .playingGameFrequency(QuestionAnswerMapper.getIndex("게임여부", dto.isPlayGame())) - .phoneCallingFrequency(QuestionAnswerMapper.getIndex("전화여부", dto.isPhoneCall())) - .studyingFrequency(QuestionAnswerMapper.getIndex("공부여부", dto.studying())) - .eatingFrequency(QuestionAnswerMapper.getIndex("섭취여부", dto.intake())) + .lifePattern(QuestionAnswerMapper.getIndex("lifePattern", dto.lifePattern())) + .intimacy(QuestionAnswerMapper.getIndex("intimacy", dto.intimacy())) + .itemSharing(QuestionAnswerMapper.getIndex("canShare", dto.canShare())) + .playingGameFrequency(QuestionAnswerMapper.getIndex("isPlayGame", dto.isPlayGame())) + .phoneCallingFrequency(QuestionAnswerMapper.getIndex("isPhoneCall", dto.isPhoneCall())) + .studyingFrequency(QuestionAnswerMapper.getIndex("studying", dto.studying())) + .eatingFrequency(QuestionAnswerMapper.getIndex("intake", dto.intake())) .noiseSensitivity(dto.noiseSensitivity()) .cleannessSensitivity(dto.cleanSensitivity()) .cleaningFrequency( - QuestionAnswerMapper.getIndex("청소빈도", dto.cleaningFrequency())) + QuestionAnswerMapper.getIndex("cleaningFrequency", dto.cleaningFrequency())) .drinkingFrequency( - QuestionAnswerMapper.getIndex("음주빈도", dto.drinkingFrequency())) + QuestionAnswerMapper.getIndex("drinkingFrequency", dto.drinkingFrequency())) .personality( - QuestionAnswerMapper.convertBitMaskToInteger("성격", dto.personality())) - .mbti(QuestionAnswerMapper.getIndex("MBTI", dto.mbti().toUpperCase())) + QuestionAnswerMapper.convertBitMaskToInteger("personality", dto.personality())) + .mbti(QuestionAnswerMapper.getIndex("mbti", dto.mbti().toUpperCase())) .build(); } public static List toMemberStatPreferenceDetailColorDTOListWhenRandom( MemberStat memberStat, List preferences) { - Map memberStatMap = FieldInstanceResolver.extractMultiMemberStatFields( + Map rawMemberStatMap = FieldInstanceResolver.extractMultiMemberStatFields( memberStat, preferences); + QuestionAnswerMapper.load(); + Map memberStatMap = QuestionAnswerMapper.convertToStringMap( + rawMemberStatMap); return memberStatMap.entrySet().stream() .map(entry -> toMemberStatPreferenceDetailColorDTO(entry.getKey(), entry.getValue(), DifferenceStatus.NOT_SAME_NOT_DIFFERENT) @@ -184,12 +189,19 @@ public static List toMemberStatPreferenceDet public static List toMemberStatPreferenceDetailColorDTOList( MemberStat memberStat, MemberStat criteriaMemberStat, List preferences ) { - Map memberStatMap = FieldInstanceResolver.extractMultiMemberStatFields( - memberStat, - preferences); - Map criteriaMemberStatMap = FieldInstanceResolver.extractMultiMemberStatFields( + // 원본 Map (Integer 값을 포함) + Map rawMemberStatMap = FieldInstanceResolver.extractMultiMemberStatFields( + memberStat, preferences); + Map rawCriteriaMemberStatMap = FieldInstanceResolver.extractMultiMemberStatFields( criteriaMemberStat, preferences); + // Integer 값을 String으로 변환한 Map 생성 + QuestionAnswerMapper.load(); + Map memberStatMap = QuestionAnswerMapper.convertToStringMap( + rawMemberStatMap); + Map criteriaMemberStatMap = QuestionAnswerMapper.convertToStringMap( + rawCriteriaMemberStatMap); + return memberStatMap.entrySet().stream() .map(entry -> toMemberStatPreferenceDetailColorDTO( diff --git a/src/main/java/com/cozymate/cozymate_server/domain/memberstat/memberstat/util/QuestionAnswerMapper.java b/src/main/java/com/cozymate/cozymate_server/domain/memberstat/memberstat/util/QuestionAnswerMapper.java index 91097564..4657d833 100644 --- a/src/main/java/com/cozymate/cozymate_server/domain/memberstat/memberstat/util/QuestionAnswerMapper.java +++ b/src/main/java/com/cozymate/cozymate_server/domain/memberstat/memberstat/util/QuestionAnswerMapper.java @@ -144,5 +144,25 @@ public static Integer convertBitMaskToInteger(String category, List item } return bitMask; } + + public static Map convertToStringMap(Map rawMap) { + + log.info("🔹 [Before Conversion] Raw Map: {}", rawMap); // 변환 전 로그 + + return rawMap.entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + entry -> { + String key = entry.getKey(); + Object value = entry.getValue(); + + if (value instanceof Integer && questionAnswerMap.containsKey(key)) { + return mapValue(key, (Integer) value); + } + + return value.toString(); // Integer가 아니면 그냥 String 변환 + } + )); + } } diff --git a/src/main/resources/memberstat/question_answer.json b/src/main/resources/memberstat/question_answer.json index 8fcffbf7..1488f7a1 100644 --- a/src/main/resources/memberstat/question_answer.json +++ b/src/main/resources/memberstat/question_answer.json @@ -13,13 +13,13 @@ 10, 11 ], - "흡연여부": [ + "smoking": [ "비흡연자", "연초", "궐련형 전자담배", "액상형 전자담배" ], - "잠버릇": [ + "sleepingHabit": [ "잠버릇이 없어요", "코골이", "이갈이", @@ -27,83 +27,83 @@ "잠꼬대", "뒤척임" ], - "에어컨강도": [ + "airConditioningIntensity": [ "안 틀어요", "약하게 틀어요", "적당하게 틀어요", "강하게 틀어요" ], - "히터강도": [ + "heatingIntensity": [ "안 틀어요", "약하게 틀어요", "적당하게 틀어요", "강하게 틀어요" ], - "생활패턴": [ + "lifePattern": [ "아침형 인간", "새벽형 인간" ], - "친밀도": [ + "intimacy": [ "필요한 말만 했으면 좋겠어요", "어느정도 친하게 지내요", "완전 친하게 지내요" ], - "물건공유": [ + "canShare": [ "아무것도 공유하고 싶지 않아요", "휴지정도는 빌려줄 수 있어요", "옷정도는 빌려줄 수 있어요", "칫솔만 아니면 돼요" ], - "게임여부": [ + "isPlayGame": [ "아예 하지 않아요", "키보드 채팅정도만 쳐요", "보이스 채팅도 해요" ], - "전화여부": [ + "isPhoneCall": [ "아예 하지 않아요", "급한 전화만 해요", "자주 해요" ], - "공부여부": [ + "studying": [ "아예 하지 않아요", "시험기간 때만 해요", "매일 해요" ], - "섭취여부": [ + "intake": [ "아예 안 먹어요", "음료만 마셔요", "간단한 간식정도만 먹어요", "배달음식도 먹어요" ], - "청결예민도": [ + "cleanSensitivity": [ "매우 예민하지 않아요", "예민하지 않아요", "보통이에요", "예민해요", "매우 예민해요" ], - "소음예민도": [ + "noiseSensitivity": [ "매우 예민하지 않아요", "예민하지 않아요", "보통이에요", "예민해요", "매우 예민해요" ], - "청소빈도": [ + "cleaningFrequency": [ "한 달에 한 번 해요", "2주에 한 번 해요", "일주일에 한 번 해요", "이틀에 한 번 정도 해요", "매일매일 해요" ], - "음주빈도": [ + "drinkingFrequency": [ "아예 안 마셔요", "한 달에 한 두번 마셔요", "일주일에 한 두번 마셔요", "일주일에 네 번이상 마셔요", "거의 매일 마셔요" ], - "성격": [ + "personality": [ "조용해요", "활발해요", "말이 많아요", @@ -117,7 +117,7 @@ "귀차니즘이 있어요", "부지런해요" ], - "MBTI": [ + "mbti": [ "ISTJ","ISFJ","INFJ","INTJ", "ISTP","ISFP","INFP","INTP", "ESTP","ESFP","ENFP","ENTP",