diff --git a/common/common-application/src/main/java/com/project/imdang/common/application/constant/RequestPath.java b/common/common-application/src/main/java/com/project/imdang/common/application/constant/RequestPath.java index 10473b3d..459dc353 100644 --- a/common/common-application/src/main/java/com/project/imdang/common/application/constant/RequestPath.java +++ b/common/common-application/src/main/java/com/project/imdang/common/application/constant/RequestPath.java @@ -60,6 +60,7 @@ public final class RequestPath { public static final String LIST_MEMBER = MEMBER; public static final String JOIN_MEMBER = MEMBER + "/join"; + public static final String CONDITION_MEMBER = MEMBER + "/onboarding"; public static final String WITHDRAW_MEMBER = MEMBER + "/withdraw"; // ******************* terms ******************* diff --git a/common/common-domain/common-domain-core/build.gradle b/common/common-domain/common-domain-core/build.gradle index e69de29b..b7a0f612 100644 --- a/common/common-domain/common-domain-core/build.gradle +++ b/common/common-domain/common-domain-core/build.gradle @@ -0,0 +1,3 @@ +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' +} diff --git a/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/Budget.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/Budget.java new file mode 100644 index 00000000..6cf574db --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/Budget.java @@ -0,0 +1,30 @@ +package com.project.imdang.common.domain.valueobject; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +@Getter +@RequiredArgsConstructor +public enum Budget { + UNDER_100M("1억 이하"), UNDER_300M("3억 이하"), UNDER_500M("5억 이하"), UNDER_700M("7억 이하"), UNDER_900M("9억 이하"), + UNDER_1500M("15억 이하"), UNDER_2000M("20억 이하"), UNDER_3000M("30억 이하"), UNDER_5000M("50억 이하"); + + private final String value; + + @JsonCreator + public static Budget fromValue(String value) { + return Arrays.stream(Budget.values()) + .filter(b -> b.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + value)); + } + + @JsonValue + public String toValue() { + return value; + } +} diff --git a/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/CommutingArea.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/CommutingArea.java new file mode 100644 index 00000000..cb960870 --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/CommutingArea.java @@ -0,0 +1,34 @@ +package com.project.imdang.common.domain.valueobject; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import com.project.imdang.common.domain.valueobject.gapInvestment.InvestmentPlan; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * 출퇴근 지역 + */ +@Getter +@RequiredArgsConstructor +public enum CommutingArea { + GANGNAM("강남"), YEOUIDO("여의도"), GWANGHWAMUN("광화문"), EULJIRO("을지로"), SEONGSU("성수"), + PANGYO("판교"), MAPO("마포"), GURO("구로"), SANGAM("상암DMC"), GANGSEO("강서"), SONGPA("송파"); + + private final String value; + + @JsonCreator + public static CommutingArea fromValue(String value) { + return Arrays.stream(CommutingArea.values()) + .filter(ca -> ca.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + value)); + } + + @JsonValue + public String toValue() { + return value; + } +} diff --git a/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/Environment.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/Environment.java new file mode 100644 index 00000000..47f62f6e --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/Environment.java @@ -0,0 +1,32 @@ +package com.project.imdang.common.domain.valueobject; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * 환경 + */ +@Getter +@RequiredArgsConstructor +public enum Environment { + PARK("공원"), HIKING("등산로"), HANGANG("한강"), + RIVER("하천"), DENSE_APARTMENT("아파트 밀집"); + private final String value; + + @JsonCreator + public static Environment fromValue(String value) { + return Arrays.stream(Environment.values()) + .filter(e -> e.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + value)); + } + + @JsonValue + public String toValue() { + return value; + } +} diff --git a/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/InfraNew.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/InfraNew.java new file mode 100644 index 00000000..15e5ef85 --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/InfraNew.java @@ -0,0 +1,32 @@ +package com.project.imdang.common.domain.valueobject; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * 인프라 + */ +@Getter +@RequiredArgsConstructor +public enum InfraNew { + MART("대형마트"), HOSPITAL("대형병원"), DEPARTMENT_STORE("백화점"), + CHILD_FACILITIY("아이 동반시설"), CULTURE_FACILITY("문화시설"); + private final String value; + + @JsonCreator + public static InfraNew fromValue(String value) { + return Arrays.stream(InfraNew.values()) + .filter(i -> i.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + value)); + } + + @JsonValue + public String toValue() { + return value; + } +} diff --git a/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/MonthIncome.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/MonthIncome.java new file mode 100644 index 00000000..2c649edc --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/MonthIncome.java @@ -0,0 +1,30 @@ +package com.project.imdang.common.domain.valueobject; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +@Getter +@RequiredArgsConstructor +public enum MonthIncome { + NOTHING("수입 없음"), UNDER_2M("200만원 이하"), UNDER_3M("300만원 이하"), UNDER_4M("400만원 이하"), UNDER_5M("500만원 이하"), UNDER_6M("600만원 이하"), + UNDER_7M("700만원 이하"), UNDER_8M("800만원 이하"), UPPER_10M("1000만원 이상"); + + private final String value; + + @JsonCreator + public static MonthIncome fromValue(String value) { + return Arrays.stream(MonthIncome.values()) + .filter(mi -> mi.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + value)); + } + + @JsonValue + public String toValue() { + return value; + } +} diff --git a/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/Purpose.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/Purpose.java new file mode 100644 index 00000000..d2f46681 --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/Purpose.java @@ -0,0 +1,28 @@ +package com.project.imdang.common.domain.valueobject; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +@Getter +@RequiredArgsConstructor +public enum Purpose { + LIVING("실거주"), GAP_INVESTMENT("갭투자"); + private final String value; + + @JsonCreator + public static Purpose fromValue(String value) { + return Arrays.stream(Purpose.values()) + .filter(p -> p.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + value)); + } + + @JsonValue + public String toValue() { + return value; + } +} diff --git a/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/ApartmentSquare.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/ApartmentSquare.java new file mode 100644 index 00000000..3423c017 --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/ApartmentSquare.java @@ -0,0 +1,33 @@ +package com.project.imdang.common.domain.valueobject.gapInvestment; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import com.project.imdang.common.domain.valueobject.living.Traffic; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * 아파트 평수 + */ +@Getter +@RequiredArgsConstructor +public enum ApartmentSquare { + ULTRA_SAMLL("초소형(21~40m2)"), SMALL("소형(60m2 이하)"), SMALL_MEDIUM("중소형(60~82m2)"), MEDIUM_LARGE("중대형(85~102m2)"), LARGE("대형(135m2 이상)"); + + private final String value; + + @JsonCreator + public static ApartmentSquare fromValue(String value) { + return Arrays.stream(ApartmentSquare.values()) + .filter(as -> as.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + value)); + } + + @JsonValue + public String toValue() { + return value; + } +} diff --git a/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/HopeGap.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/HopeGap.java new file mode 100644 index 00000000..3ffdf3ed --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/HopeGap.java @@ -0,0 +1,33 @@ +package com.project.imdang.common.domain.valueobject.gapInvestment; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * 희망 갭 정도 + */ +@Getter +@RequiredArgsConstructor +public enum HopeGap { + UPPER_20("갭 20% 이상"), UPPER_30("갭 30% 이상"), UPPER_40("갭 40% 이상"), UPPER_50("갭 50% 이상"), + UPPER_60("갭 60% 이상"), NO_MATTER("상관 없어요"); + + private final String value; + + @JsonCreator + public static HopeGap fromValue(String value) { + return Arrays.stream(HopeGap.values()) + .filter(hg -> hg.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + value)); + } + + @JsonValue + public String toValue() { + return value; + } +} diff --git a/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/HouseType.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/HouseType.java new file mode 100644 index 00000000..b0212f49 --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/HouseType.java @@ -0,0 +1,31 @@ +package com.project.imdang.common.domain.valueobject.gapInvestment; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * 유형 + */ +@Getter +@RequiredArgsConstructor +public enum HouseType { + NEW("신축"), OLD("구축"); + private final String value; + + @JsonCreator + public static HouseType fromValue(String value) { + return Arrays.stream(HouseType.values()) + .filter(ht -> ht.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + value)); + } + + @JsonValue + public String toValue() { + return value; + } +} diff --git a/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/Household.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/Household.java new file mode 100644 index 00000000..2aeafbdc --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/Household.java @@ -0,0 +1,33 @@ +package com.project.imdang.common.domain.valueobject.gapInvestment; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * 세대수 + */ +@Getter +@RequiredArgsConstructor +public enum Household { + UPPER_100("100세대 이상"), UPPER_300("300세대 이상"), UPPER_500("500세대 이상"), UPPER_1000("1000세대 이상"), + UPPER_2000("2000세대 이상"), UPPER_3000("3000세대 이상"); + + private final String value; + + @JsonCreator + public static Household fromValue(String value) { + return Arrays.stream(Household.values()) + .filter(h -> h.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + value)); + } + + @JsonValue + public String toValue() { + return value; + } +} diff --git a/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/InvestmentPlan.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/InvestmentPlan.java new file mode 100644 index 00000000..ddf38b44 --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/InvestmentPlan.java @@ -0,0 +1,33 @@ +package com.project.imdang.common.domain.valueobject.gapInvestment; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * 투자 계획 + */ +@Getter +@RequiredArgsConstructor +public enum InvestmentPlan { + UNDER_ONE("1년 미만"), UNDER_TWO("2년 미만"), UNDER_THREE("3년 미만"), UNDER_FIVE("5년 미만"), UNDER_DECADE("10년 미만"), UPPER_TWO_DECADE("20년 이상"), + DONT_KNOW("아직 모르겠어요"); + + private final String value; + + @JsonCreator + public static InvestmentPlan fromValue(String value) { + return Arrays.stream(InvestmentPlan.values()) + .filter(ip -> ip.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + value)); + } + + @JsonValue + public String toValue() { + return value; + } +} diff --git a/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/ChildrenPlan.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/ChildrenPlan.java new file mode 100644 index 00000000..4d2431b7 --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/ChildrenPlan.java @@ -0,0 +1,31 @@ +package com.project.imdang.common.domain.valueobject.living; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * 아이 유무 + */ +@Getter +@RequiredArgsConstructor +public enum ChildrenPlan { + NO("자녀 계획 없음"), YES("자녀 계획 있음"), ONE("1명"), TWO("2명"), THREE("3명"); + private final String value; + + @JsonCreator + public static ChildrenPlan fromValue(String value) { + return Arrays.stream(ChildrenPlan.values()) + .filter(cp -> cp.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + value)); + } + + @JsonValue + public String toValue() { + return value; + } +} diff --git a/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/LivingPerson.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/LivingPerson.java new file mode 100644 index 00000000..c70faf79 --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/LivingPerson.java @@ -0,0 +1,32 @@ +package com.project.imdang.common.domain.valueobject.living; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * 함께 살 인원 + */ +@Getter +@RequiredArgsConstructor +public enum LivingPerson { + NEW_COUPLE("신혼부부"), FAMILY("가족(3인 이상)"), OLD_COUPLE("중년부부"), SINGLE("혼자"); + + private final String value; + + @JsonCreator + public static LivingPerson fromValue(String value) { + return Arrays.stream(LivingPerson.values()) + .filter(lp -> lp.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + value)); + } + + @JsonValue + public String toValue() { + return value; + } +} diff --git a/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/SchoolDistrict.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/SchoolDistrict.java new file mode 100644 index 00000000..9133ba4e --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/SchoolDistrict.java @@ -0,0 +1,32 @@ +package com.project.imdang.common.domain.valueobject.living; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * 학군 + */ +@Getter +@RequiredArgsConstructor +public enum SchoolDistrict { + ELEMENTARY_APARTMENT("초품아"), PRESTIGIOUS_SCHOOL("명문 초/중/고"), CLOSE_ACADEMY("학원가 근접"), + BABY_COMMUNITY("육아 커뮤니티 활발"), SAFE_ROUTE("안전한 통학로"); + private final String value; + + @JsonCreator + public static SchoolDistrict fromValue(String value) { + return Arrays.stream(SchoolDistrict.values()) + .filter(sd -> sd.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + value)); + } + + @JsonValue + public String toValue() { + return value; + } +} diff --git a/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/Traffic.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/Traffic.java new file mode 100644 index 00000000..dbe82c2e --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/Traffic.java @@ -0,0 +1,33 @@ +package com.project.imdang.common.domain.valueobject.living; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * 교통 + */ +@Getter +@RequiredArgsConstructor +public enum Traffic { + STATION_AREA("역세권"), BUS_STOP("버스정류장 가까움"), CONVENIENT_PARKING("주차 편리"), + CONNECT_PARKING("주차장 엘리베이터 연결"), COMMUTING_CAR("자차 출퇴근 편리"); + + private final String value; + + @JsonCreator + public static Traffic fromValue(String value) { + return Arrays.stream(Traffic.values()) + .filter(t -> t.getValue().equals(value)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("Unknown value: " + value)); + } + + @JsonValue + public String toValue() { + return value; + } +} diff --git a/imdang-container/src/test/java/com/project/imdang/insight/InsightControllerTest.java b/imdang-container/src/test/java/com/project/imdang/insight/InsightControllerTest.java index db1ce1cb..abe45ad9 100644 --- a/imdang-container/src/test/java/com/project/imdang/insight/InsightControllerTest.java +++ b/imdang-container/src/test/java/com/project/imdang/insight/InsightControllerTest.java @@ -188,7 +188,7 @@ void detail() throws Exception { .gender("0") .deviceToken("dummy-token") .accusedCount(0L) - .insightCount(5L) + //.insightCount(5L) .latestInsightCreateDate(LocalDate.of(2025, 6, 28)) .build() )); diff --git a/imdang-container/src/test/java/com/project/imdang/member/MemberControllerTest.java b/imdang-container/src/test/java/com/project/imdang/member/MemberControllerTest.java index 841d8cc1..560c449e 100644 --- a/imdang-container/src/test/java/com/project/imdang/member/MemberControllerTest.java +++ b/imdang-container/src/test/java/com/project/imdang/member/MemberControllerTest.java @@ -1,5 +1,6 @@ package com.project.imdang.member; +import com.fasterxml.jackson.databind.ObjectMapper; import com.project.imdang.common.domain.valueobject.MemberId; import com.project.imdang.member.domain.ports.output.repository.MemberRepository; import com.project.imdang.member.persistence.provider.JwtTokenProvider; @@ -13,24 +14,27 @@ import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; +import java.util.HashMap; +import java.util.Map; import java.util.Optional; import static com.project.imdang.member.TestData.accessToken; import static com.project.imdang.member.TestData.member; import static com.project.imdang.member.TestData.memberId; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @AutoConfigureMockMvc -@SpringBootTest(classes = TestConfiguration.class) +@SpringBootTest public class MemberControllerTest { @Autowired private MockMvc mockMvc; - @MockBean + @Autowired private MemberRepository memberRepository; @MockBean @@ -59,4 +63,48 @@ void info() throws Exception { .andDo(print()) .andReturn(); } + + @Test + void condition() throws Exception { + //given + Mockito.doNothing().when(jwtTokenProvider).validate(accessToken); + + Map mockClaims = new HashMap<>(); + mockClaims.put("memberId", memberId); + + Mockito.when(jwtTokenProvider.extractClaims(accessToken)) + .thenReturn(mockClaims); + + String requestBody = """ + { + "purpose": "실거주", + "budget": "1억 이하", + "monthIncome": "수입 없음", + "livingPerson": "중년부부", + "childrenPlan": "자녀 계획 있음", + "hopeGap": null, + "investmentPlan": null, + "traffic": "역세권", + "schoolDistrict": "학원가 근접", + "apartmentSquare": null, + "household": null, + "houseType": null, + "commutingArea": "여의도", + "infra": "대형병원", + "environment": "공원", + "firstPriority": "출퇴근지역,여의도", + "secondPriority": "학군,학원가 근접", + "thirdPriority": "교통,역세권" + } + """; + + //then + mockMvc.perform(post("/members/condition") + .header("Authorization", "Bearer " + accessToken) + .contentType(MediaType.APPLICATION_JSON) + .content(requestBody)) + .andExpect(status().isOk()) + .andDo(print()) + .andReturn(); + } } diff --git a/imdang-container/src/test/java/com/project/imdang/member/TestData.java b/imdang-container/src/test/java/com/project/imdang/member/TestData.java index 20d9ab08..d107cebe 100644 --- a/imdang-container/src/test/java/com/project/imdang/member/TestData.java +++ b/imdang-container/src/test/java/com/project/imdang/member/TestData.java @@ -8,7 +8,8 @@ public final class TestData { - static UUID memberId = UUID.fromString("8a1e1c3d-74ef-42c8-9239-a33455b02eda"); + //static UUID memberId = UUID.fromString("8a1e1c3d-74ef-42c8-9239-a33455b02eda"); + static UUID memberId =UUID.fromString("b8654f0d-3bf6-479d-b729-6901c2f83c3a"); static String fcmToken = "fcm-token"; static String accessToken = "access-token"; diff --git a/member-service/member-application/src/main/java/com/project/imdang/member/application/dto/member/OnboardingRequest.java b/member-service/member-application/src/main/java/com/project/imdang/member/application/dto/member/OnboardingRequest.java new file mode 100644 index 00000000..1be5cbc0 --- /dev/null +++ b/member-service/member-application/src/main/java/com/project/imdang/member/application/dto/member/OnboardingRequest.java @@ -0,0 +1,51 @@ +package com.project.imdang.member.application.dto.member; + +import com.project.imdang.common.domain.valueobject.*; +import com.project.imdang.common.domain.valueobject.gapInvestment.*; +import com.project.imdang.common.domain.valueobject.living.ChildrenPlan; +import com.project.imdang.common.domain.valueobject.living.LivingPerson; +import com.project.imdang.common.domain.valueobject.living.SchoolDistrict; +import com.project.imdang.common.domain.valueobject.living.Traffic; +import io.swagger.v3.oas.annotations.media.Schema; + +public record OnboardingRequest( + @Schema(description = "목적", example = "실거주") + Purpose purpose, + @Schema(description = "예산", example = "3억 이하") + Budget budget, + @Schema(description = "월수입", example = "300만원 이하") + MonthIncome monthIncome, + @Schema(description = "함께 살 인원", example = "신혼부부") + LivingPerson livingPerson, + @Schema(description = "아이 유무", example = "저녀 계획 있음") + ChildrenPlan childrenPlan, + @Schema(description = "희망 갭 정도", example = "갭 20% 이상") + HopeGap hopeGap, + @Schema(description = "투자 계획", example = "2년 미만") + InvestmentPlan investmentPlan, + @Schema(description = "교통", example = "역세권") + Traffic traffic, + @Schema(description = "학군", example = "학원가 근접") + SchoolDistrict schoolDistrict, + @Schema(description = "아파트 평수", example = "초소형(21~40m2)") + ApartmentSquare apartmentSquare, + @Schema(description = "세대수", example = "300세대 이상") + Household household, + @Schema(description = "유형", example = "신축") + HouseType houseType, + @Schema(description = "출퇴근 지역", example = "여의도") + CommutingArea commutingArea, + @Schema(description = "인프라", example = "대형마트") + InfraNew infra, + @Schema(description = "환경", example = "공원") + Environment environment, + @Schema(description = "1순위", example = "교통,역세권") + String firstPriority, + @Schema(description = "2순위", example = "학군,학원가 근접") + String secondPriority, + @Schema(description = "3순위", example = "환경,아파트 밀집") + String thirdPriority, + @Schema(description = "관심동네", example = "종로구,강남구,마포구") + String interestDistrict +) { +} diff --git a/member-service/member-application/src/main/java/com/project/imdang/member/application/rest/MemberController.java b/member-service/member-application/src/main/java/com/project/imdang/member/application/rest/MemberController.java index 050c7576..ca3cc65c 100644 --- a/member-service/member-application/src/main/java/com/project/imdang/member/application/rest/MemberController.java +++ b/member-service/member-application/src/main/java/com/project/imdang/member/application/rest/MemberController.java @@ -2,12 +2,11 @@ import com.project.imdang.common.application.response.ApiResponse; import com.project.imdang.common.domain.valueobject.MemberId; +import com.project.imdang.common.domain.valueobject.Purpose; +import com.project.imdang.member.application.dto.member.OnboardingRequest; import com.project.imdang.member.application.dto.member.JoinRequest; import com.project.imdang.member.application.dto.member.WithdrawRequest; -import com.project.imdang.member.domain.dto.member.JoinCommand; -import com.project.imdang.member.domain.dto.member.MemberResult; -import com.project.imdang.member.domain.dto.member.MyPageInfoResult; -import com.project.imdang.member.domain.dto.member.WithdrawCommand; +import com.project.imdang.member.domain.dto.member.*; import com.project.imdang.member.domain.ports.input.service.MemberApplicationService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponses; @@ -26,11 +25,7 @@ import java.util.List; import java.util.UUID; -import static com.project.imdang.common.application.constant.RequestPath.DETAIL_MEMBER; -import static com.project.imdang.common.application.constant.RequestPath.DETAIL_MY_PAGE; -import static com.project.imdang.common.application.constant.RequestPath.JOIN_MEMBER; -import static com.project.imdang.common.application.constant.RequestPath.LIST_MEMBER; -import static com.project.imdang.common.application.constant.RequestPath.WITHDRAW_MEMBER; +import static com.project.imdang.common.application.constant.RequestPath.*; @RestController @RequiredArgsConstructor @@ -101,6 +96,66 @@ public ApiResponse join(@AuthenticationPrincipal UUID memberId, return ApiResponse.success(joinResult); } + @Operation(description = "조건/우선순위 설정 API") + @ApiResponses(value = { + @io.swagger.v3.oas.annotations.responses.ApiResponse( + responseCode = "200", + description = "조건/우선순위 설정 성공") + }) + @PostMapping(CONDITION_MEMBER) + public ApiResponse condition(@AuthenticationPrincipal UUID memberId, + @RequestBody @Valid OnboardingRequest onboardingRequest) { + + Purpose purpose = onboardingRequest.purpose(); + ConditionCommand conditionCommand = null; + //실거주 + if (purpose == Purpose.LIVING) { + conditionCommand = ActualLivingConditionCommand.builder() + .memberId(new MemberId(memberId)) + .purpose(onboardingRequest.purpose()) + .budget(onboardingRequest.budget()) + .monthIncome(onboardingRequest.monthIncome()) + .livingPerson(onboardingRequest.livingPerson()) + .childrenPlan(onboardingRequest.childrenPlan()) + .commutingArea(onboardingRequest.commutingArea()) + .traffic(onboardingRequest.traffic()) + .schoolDistrict(onboardingRequest.schoolDistrict()) + .infra(onboardingRequest.infra()) + .environment(onboardingRequest.environment()) + .build(); + } + //갭투자 + else if (purpose == Purpose.GAP_INVESTMENT) { + conditionCommand = GapInvestmentConditionCommand.builder() + .memberId(new MemberId(memberId)) + .purpose(onboardingRequest.purpose()) + .budget(onboardingRequest.budget()) + .monthIncome(onboardingRequest.monthIncome()) + .hopeGap(onboardingRequest.hopeGap()) + .investmentPlan(onboardingRequest.investmentPlan()) + .apartmentSquare(onboardingRequest.apartmentSquare()) + .household(onboardingRequest.household()) + .houseType(onboardingRequest.houseType()) + .commutingArea(onboardingRequest.commutingArea()) + .infra(onboardingRequest.infra()) + .environment(onboardingRequest.environment()) + .build(); + } + + //우선순위 + PriorityCommand priorityCommand = PriorityCommand.builder() + .firstPriority(onboardingRequest.firstPriority()) + .secondPriority(onboardingRequest.secondPriority()) + .thirdPriority(onboardingRequest.thirdPriority()) + .build(); + + //관심동네 + InterestDistrictCommand interestDistrictCommand = new InterestDistrictCommand(onboardingRequest.interestDistrict()); + + Boolean joinResult = memberApplicationService.condition(conditionCommand, priorityCommand, interestDistrictCommand); + return ApiResponse.success(joinResult); + } + @Operation(description = "회원 탈퇴 API") @ApiResponses(value = { @io.swagger.v3.oas.annotations.responses.ApiResponse( diff --git a/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/MemberApplicationServiceImpl.java b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/MemberApplicationServiceImpl.java index bf5b07fa..45a2cf53 100644 --- a/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/MemberApplicationServiceImpl.java +++ b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/MemberApplicationServiceImpl.java @@ -1,10 +1,7 @@ package com.project.imdang.member.domain; import com.project.imdang.common.domain.valueobject.MemberId; -import com.project.imdang.member.domain.dto.member.JoinCommand; -import com.project.imdang.member.domain.dto.member.MemberResult; -import com.project.imdang.member.domain.dto.member.MyPageInfoResult; -import com.project.imdang.member.domain.dto.member.WithdrawCommand; +import com.project.imdang.member.domain.dto.member.*; import com.project.imdang.member.domain.handler.member.*; import com.project.imdang.member.domain.ports.input.service.MemberApplicationService; import lombok.RequiredArgsConstructor; @@ -26,6 +23,7 @@ public class MemberApplicationServiceImpl implements MemberApplicationService { private final AccuseMemberCommandHandler accuseMemberCommandHandler; private final UpdateMemberCommandHandler updateMemberCommandHandler; + private final ConditionCommandHandler conditionCommandHandler; @Override public MyPageInfoResult detailMyPage(MemberId memberId) { @@ -61,4 +59,9 @@ public Boolean accuseMember(MemberId memberId) { public Boolean updateMember(MemberId memberId) { return updateMemberCommandHandler.update(memberId); } + + @Override + public Boolean condition(ConditionCommand conditionCommand, PriorityCommand priorityCommand, InterestDistrictCommand interestDistrictCommand) { + return conditionCommandHandler.condition(conditionCommand, priorityCommand, interestDistrictCommand); + } } diff --git a/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/ActualLivingConditionCommand.java b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/ActualLivingConditionCommand.java new file mode 100644 index 00000000..8cd557d7 --- /dev/null +++ b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/ActualLivingConditionCommand.java @@ -0,0 +1,27 @@ +package com.project.imdang.member.domain.dto.member; + +import com.project.imdang.common.domain.valueobject.*; +import com.project.imdang.common.domain.valueobject.living.ChildrenPlan; +import com.project.imdang.common.domain.valueobject.living.LivingPerson; +import com.project.imdang.common.domain.valueobject.living.SchoolDistrict; +import com.project.imdang.common.domain.valueobject.living.Traffic; +import lombok.*; +import lombok.experimental.SuperBuilder; + +@Getter +@SuperBuilder +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class ActualLivingConditionCommand extends ConditionCommand { + private LivingPerson livingPerson; + private ChildrenPlan childrenPlan; + private Traffic traffic; + private SchoolDistrict schoolDistrict; + + public ActualLivingConditionCommand(MemberId memberId, Purpose purpose, Budget budget, MonthIncome monthIncome, CommutingArea commutingArea, InfraNew infra, Environment environment, LivingPerson livingPerson, ChildrenPlan childrenPlan, Traffic traffic, SchoolDistrict schoolDistrict) { + super(memberId, purpose, budget, monthIncome, commutingArea, infra, environment); + this.livingPerson = livingPerson; + this.childrenPlan = childrenPlan; + this.traffic = traffic; + this.schoolDistrict = schoolDistrict; + } +} diff --git a/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/ConditionCommand.java b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/ConditionCommand.java new file mode 100644 index 00000000..3804211c --- /dev/null +++ b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/ConditionCommand.java @@ -0,0 +1,19 @@ +package com.project.imdang.member.domain.dto.member; + +import com.project.imdang.common.domain.valueobject.*; +import lombok.*; +import lombok.experimental.SuperBuilder; + +@SuperBuilder +@AllArgsConstructor +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class ConditionCommand { + private MemberId memberId; + private Purpose purpose; + private Budget budget; + private MonthIncome monthIncome; + private CommutingArea commutingArea; + private InfraNew infra; + private Environment environment; +} diff --git a/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/GapInvestmentConditionCommand.java b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/GapInvestmentConditionCommand.java new file mode 100644 index 00000000..e76855a3 --- /dev/null +++ b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/GapInvestmentConditionCommand.java @@ -0,0 +1,27 @@ +package com.project.imdang.member.domain.dto.member; + +import com.project.imdang.common.domain.valueobject.*; +import com.project.imdang.common.domain.valueobject.gapInvestment.*; +import lombok.*; +import lombok.experimental.SuperBuilder; + + +@Getter +@SuperBuilder +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class GapInvestmentConditionCommand extends ConditionCommand { + private HopeGap hopeGap; + private InvestmentPlan investmentPlan; + private ApartmentSquare apartmentSquare; + private Household household; + private HouseType houseType; + + public GapInvestmentConditionCommand(MemberId memberId, Purpose purpose, Budget budget, MonthIncome monthIncome, CommutingArea commutingArea, InfraNew infra, Environment environment, HopeGap hopeGap, InvestmentPlan investmentPlan, ApartmentSquare apartmentSquare, Household household, HouseType houseType) { + super(memberId, purpose, budget, monthIncome, commutingArea, infra, environment); + this.hopeGap = hopeGap; + this.investmentPlan = investmentPlan; + this.apartmentSquare = apartmentSquare; + this.household = household; + this.houseType = houseType; + } +} diff --git a/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/InterestDistrictCommand.java b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/InterestDistrictCommand.java new file mode 100644 index 00000000..7f4f3306 --- /dev/null +++ b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/InterestDistrictCommand.java @@ -0,0 +1,10 @@ +package com.project.imdang.member.domain.dto.member; + +import lombok.*; + +@AllArgsConstructor +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class InterestDistrictCommand { + private String interestDistrict; +} diff --git a/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/PriorityCommand.java b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/PriorityCommand.java new file mode 100644 index 00000000..1a91afc0 --- /dev/null +++ b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/PriorityCommand.java @@ -0,0 +1,13 @@ +package com.project.imdang.member.domain.dto.member; + +import lombok.*; + +@Builder +@AllArgsConstructor +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class PriorityCommand { + private String firstPriority; + private String secondPriority; + private String thirdPriority; +} diff --git a/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/handler/member/ConditionCommandHandler.java b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/handler/member/ConditionCommandHandler.java new file mode 100644 index 00000000..fa93c8ec --- /dev/null +++ b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/handler/member/ConditionCommandHandler.java @@ -0,0 +1,102 @@ +package com.project.imdang.member.domain.handler.member; + +import com.project.imdang.common.domain.exception.DomainException; +import com.project.imdang.common.domain.valueobject.MemberId; +import com.project.imdang.common.domain.valueobject.Purpose; +import com.project.imdang.member.domain.MemberDomainService; +import com.project.imdang.member.domain.dto.member.*; +import com.project.imdang.member.domain.entity.ActualLiving; +import com.project.imdang.member.domain.entity.GapInvestment; +import com.project.imdang.member.domain.entity.Member; +import com.project.imdang.member.domain.exception.MemberDomainException; +import com.project.imdang.member.domain.handler.MemberHelper; +import com.project.imdang.member.domain.ports.output.repository.ConditionRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +@Component +@Slf4j +@RequiredArgsConstructor +public class ConditionCommandHandler { + + private final MemberDomainService memberDomainService; + private final MemberHelper memberHelper; + private final ConditionRepository conditionRepository; + + @Transactional + public Boolean condition(ConditionCommand conditionCommand, PriorityCommand priorityCommand, InterestDistrictCommand interestDistrictCommand) { + // 1. 토큰에서 유저 정보 추출 후 검증 + final MemberId memberId = conditionCommand.getMemberId(); + Member member = memberHelper.get(memberId); + + // 2. 우선순위 저장 + member = memberDomainService.setPriority(member, priorityCommand.getFirstPriority(), priorityCommand.getSecondPriority(), priorityCommand.getThirdPriority()); + + // 3. 관심동네 저장 + if (interestDistrictCommand.getInterestDistrict() != null) { + member = memberDomainService.setInterestDistrict(member, interestDistrictCommand.getInterestDistrict()); + } + + //4-1. 공통 조건 저장 + member = memberDomainService.setCommonCondition(member, conditionCommand.getPurpose(), conditionCommand.getBudget(), conditionCommand.getMonthIncome()); + memberHelper.save(member); + + //4-2. 실거주인 경우 + if (conditionCommand.getPurpose() == Purpose.LIVING) { + ActualLivingConditionCommand actualLivingConditionCommand = (ActualLivingConditionCommand) conditionCommand; + ActualLiving actualLiving = memberDomainService.setActualLivingCondition( + memberId, + actualLivingConditionCommand.getLivingPerson(), + actualLivingConditionCommand.getChildrenPlan(), + actualLivingConditionCommand.getSchoolDistrict(), + actualLivingConditionCommand.getTraffic(), + actualLivingConditionCommand.getCommutingArea(), + actualLivingConditionCommand.getInfra(), + actualLivingConditionCommand.getEnvironment() + ); + saveAC(actualLiving); + } + //4-2. 갭투자인 경우 + else if (conditionCommand.getPurpose() == Purpose.GAP_INVESTMENT){ + GapInvestmentConditionCommand gapInvestmentConditionCommand = (GapInvestmentConditionCommand) conditionCommand; + GapInvestment gapInvestment = memberDomainService.setGapInvestmentCondition( + memberId, + gapInvestmentConditionCommand.getHopeGap(), + gapInvestmentConditionCommand.getInvestmentPlan(), + gapInvestmentConditionCommand.getApartmentSquare(), + gapInvestmentConditionCommand.getHousehold(), + gapInvestmentConditionCommand.getHouseType(), + gapInvestmentConditionCommand.getCommutingArea(), + gapInvestmentConditionCommand.getInfra(), + gapInvestmentConditionCommand.getEnvironment() + ); + saveGC(gapInvestment); + } + return true; + } + + + private ActualLiving saveAC(ActualLiving actualLiving) { + ActualLiving savedActualLiving = conditionRepository.saveActualLiving(actualLiving); + if (savedActualLiving == null) { + String errorMessage = "Could not save ActualLiving Contidition!"; + log.error(errorMessage); + throw new MemberDomainException(errorMessage); + } + log.info("Member[id : {}] ActualLiving Condition is saved.", actualLiving.getMemberId().getValue()); + return savedActualLiving; + } + + private GapInvestment saveGC(GapInvestment gapInvestment) { + GapInvestment savedGapInvestment = conditionRepository.saveGapInvestment(gapInvestment); + if (savedGapInvestment == null) { + String errorMessage = "Could not save GapInvestment Contidition!"; + log.error(errorMessage); + throw new MemberDomainException(errorMessage); + } + log.info("Member[id : {}] GapInvestment Condition is saved.", gapInvestment.getMemberId().getValue()); + return savedGapInvestment; + } +} diff --git a/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/ports/input/service/MemberApplicationService.java b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/ports/input/service/MemberApplicationService.java index fdf81e65..a2ce9294 100644 --- a/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/ports/input/service/MemberApplicationService.java +++ b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/ports/input/service/MemberApplicationService.java @@ -1,10 +1,7 @@ package com.project.imdang.member.domain.ports.input.service; import com.project.imdang.common.domain.valueobject.MemberId; -import com.project.imdang.member.domain.dto.member.JoinCommand; -import com.project.imdang.member.domain.dto.member.WithdrawCommand; -import com.project.imdang.member.domain.dto.member.MemberResult; -import com.project.imdang.member.domain.dto.member.MyPageInfoResult; +import com.project.imdang.member.domain.dto.member.*; import java.util.List; @@ -19,4 +16,6 @@ public interface MemberApplicationService { Boolean withdraw(WithdrawCommand withdrawCommand); Boolean accuseMember(MemberId memberId); Boolean updateMember(MemberId memberId); + + Boolean condition(ConditionCommand conditionCommand, PriorityCommand priorityCommand, InterestDistrictCommand interestDistrictCommand); } diff --git a/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/ports/output/repository/ConditionRepository.java b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/ports/output/repository/ConditionRepository.java new file mode 100644 index 00000000..203dd220 --- /dev/null +++ b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/ports/output/repository/ConditionRepository.java @@ -0,0 +1,9 @@ +package com.project.imdang.member.domain.ports.output.repository; + +import com.project.imdang.member.domain.entity.ActualLiving; +import com.project.imdang.member.domain.entity.GapInvestment; + +public interface ConditionRepository { + GapInvestment saveGapInvestment(GapInvestment gapInvestment); + ActualLiving saveActualLiving(ActualLiving actualLiving); +} diff --git a/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/MemberDomainService.java b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/MemberDomainService.java index b5e4fb3a..3093db9e 100644 --- a/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/MemberDomainService.java +++ b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/MemberDomainService.java @@ -1,8 +1,14 @@ package com.project.imdang.member.domain; -import com.project.imdang.common.domain.valueobject.Gender; -import com.project.imdang.common.domain.valueobject.OAuthProvider; +import com.project.imdang.common.domain.valueobject.*; +import com.project.imdang.common.domain.valueobject.gapInvestment.*; +import com.project.imdang.common.domain.valueobject.living.ChildrenPlan; +import com.project.imdang.common.domain.valueobject.living.LivingPerson; +import com.project.imdang.common.domain.valueobject.living.SchoolDistrict; +import com.project.imdang.common.domain.valueobject.living.Traffic; +import com.project.imdang.member.domain.entity.ActualLiving; +import com.project.imdang.member.domain.entity.GapInvestment; import com.project.imdang.member.domain.entity.Member; import com.project.imdang.member.domain.valueobject.AccusePenaltyPolicy; @@ -19,4 +25,12 @@ public interface MemberDomainService { Member storeRefreshToken(Member member, String refreshToken); Member updateMember(Member member); + + Member setCommonCondition(Member member,Purpose purpose, Budget budget, MonthIncome monthIncome); + + ActualLiving setActualLivingCondition(MemberId memberId, LivingPerson livingPerson, ChildrenPlan childrenPlan, SchoolDistrict schoolDistrict, Traffic traffic, CommutingArea commutingArea, InfraNew infra, Environment environment); + GapInvestment setGapInvestmentCondition(MemberId memberId, HopeGap hopeGap, InvestmentPlan investmentPlan, ApartmentSquare apartmentSquare, Household household, HouseType houseType, CommutingArea commutingArea, InfraNew infra, Environment environment); + Member setPriority(Member member, String firstRank, String secondRank, String thirdRank); + + Member setInterestDistrict(Member member, String interestDistrict); } diff --git a/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/MemberDomainServiceImpl.java b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/MemberDomainServiceImpl.java index 2890e7d3..9f49b84d 100644 --- a/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/MemberDomainServiceImpl.java +++ b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/MemberDomainServiceImpl.java @@ -1,7 +1,13 @@ package com.project.imdang.member.domain; -import com.project.imdang.common.domain.valueobject.Gender; -import com.project.imdang.common.domain.valueobject.OAuthProvider; +import com.project.imdang.common.domain.valueobject.*; +import com.project.imdang.common.domain.valueobject.gapInvestment.*; +import com.project.imdang.common.domain.valueobject.living.ChildrenPlan; +import com.project.imdang.common.domain.valueobject.living.LivingPerson; +import com.project.imdang.common.domain.valueobject.living.SchoolDistrict; +import com.project.imdang.common.domain.valueobject.living.Traffic; +import com.project.imdang.member.domain.entity.ActualLiving; +import com.project.imdang.member.domain.entity.GapInvestment; import com.project.imdang.member.domain.entity.Member; import com.project.imdang.member.domain.valueobject.AccusePenaltyPolicy; @@ -47,4 +53,32 @@ public Member updateMember(Member member) { member.updateInsightCreateDate(); return member; } + + @Override + public Member setCommonCondition(Member member, Purpose purpose, Budget budget, MonthIncome monthIncome) { + member.setCommonCondition(purpose, budget, monthIncome); + return member; + } + + @Override + public ActualLiving setActualLivingCondition(MemberId memberId, LivingPerson livingPerson, ChildrenPlan childrenPlan, SchoolDistrict schoolDistrict, Traffic traffic, CommutingArea commutingArea, InfraNew infra, Environment environment) { + return ActualLiving.createNewActualLiving(memberId, livingPerson, childrenPlan, commutingArea, traffic, schoolDistrict, infra, environment); + } + + @Override + public GapInvestment setGapInvestmentCondition(MemberId memberId, HopeGap hopeGap, InvestmentPlan investmentPlan, ApartmentSquare apartmentSquare, Household household, HouseType houseType, CommutingArea commutingArea, InfraNew infra, Environment environment) { + return GapInvestment.createNewGapInvestment(memberId, hopeGap, investmentPlan, apartmentSquare, household, houseType, commutingArea, infra, environment); + } + + @Override + public Member setPriority(Member member, String firstRank, String secondRank, String thirdRank) { + member.setPriority(firstRank, secondRank, thirdRank); + return member; + } + + @Override + public Member setInterestDistrict(Member member, String interestDistrict) { + member.setInterestDistrict(interestDistrict); + return member; + } } diff --git a/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/ActualLiving.java b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/ActualLiving.java new file mode 100644 index 00000000..fc8d3a65 --- /dev/null +++ b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/ActualLiving.java @@ -0,0 +1,51 @@ + +package com.project.imdang.member.domain.entity; + +import com.project.imdang.common.domain.entity.AggregateRoot; +import com.project.imdang.common.domain.valueobject.*; +import com.project.imdang.common.domain.valueobject.living.ChildrenPlan; +import com.project.imdang.common.domain.valueobject.living.LivingPerson; +import com.project.imdang.common.domain.valueobject.living.SchoolDistrict; +import com.project.imdang.common.domain.valueobject.living.Traffic; +import com.project.imdang.member.domain.valueobject.ActualLivingId; +import lombok.Builder; +import lombok.Getter; + +@Getter +public class ActualLiving extends AggregateRoot { + + private final MemberId memberId; + private LivingPerson livingPerson; + private ChildrenPlan childrenPlan; + private CommutingArea commutingArea; + private Traffic traffic; + private SchoolDistrict schoolDistrict; + private InfraNew infra; + private Environment environment; + + @Builder + public ActualLiving(ActualLivingId id, MemberId memberId, LivingPerson livingPerson, ChildrenPlan childrenPlan, CommutingArea commutingArea, Traffic traffic, SchoolDistrict schoolDistrict, InfraNew infra, Environment environment) { + setId(id); + this.memberId = memberId; + this.livingPerson = livingPerson; + this.childrenPlan = childrenPlan; + this.commutingArea = commutingArea; + this.traffic = traffic; + this.schoolDistrict = schoolDistrict; + this.infra = infra; + this.environment = environment; + } + + public static ActualLiving createNewActualLiving(MemberId memberId, LivingPerson livingPerson, ChildrenPlan childrenPlan, CommutingArea commutingArea, Traffic traffic, SchoolDistrict schoolDistrict, InfraNew infra, Environment environment) { + return ActualLiving.builder() + .memberId(memberId) + .livingPerson(livingPerson) + .childrenPlan(childrenPlan) + .commutingArea(commutingArea) + .traffic(traffic) + .schoolDistrict(schoolDistrict) + .infra(infra) + .environment(environment) + .build(); + } +} diff --git a/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/GapInvestment.java b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/GapInvestment.java new file mode 100644 index 00000000..9c881303 --- /dev/null +++ b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/GapInvestment.java @@ -0,0 +1,58 @@ + +package com.project.imdang.member.domain.entity; + +import com.project.imdang.common.domain.entity.AggregateRoot; +import com.project.imdang.common.domain.valueobject.CommutingArea; +import com.project.imdang.common.domain.valueobject.Environment; +import com.project.imdang.common.domain.valueobject.InfraNew; +import com.project.imdang.common.domain.valueobject.MemberId; +import com.project.imdang.common.domain.valueobject.gapInvestment.*; +import com.project.imdang.common.domain.valueobject.living.ChildrenPlan; +import com.project.imdang.common.domain.valueobject.living.LivingPerson; +import com.project.imdang.common.domain.valueobject.living.SchoolDistrict; +import com.project.imdang.common.domain.valueobject.living.Traffic; +import com.project.imdang.member.domain.valueobject.GapInvestmentId; +import lombok.Builder; +import lombok.Getter; + +@Getter +public class GapInvestment extends AggregateRoot { + + private final MemberId memberId; + private HopeGap hopeGap; + private InvestmentPlan investmentPlan; + private ApartmentSquare apartmentSquare; + private Household household; + private HouseType houseType; + private CommutingArea commutingArea; + private InfraNew infra; + private Environment environment; + + @Builder + public GapInvestment(GapInvestmentId id, MemberId memberId, HopeGap hopeGap, InvestmentPlan investmentPlan, ApartmentSquare apartmentSquare, Household household, HouseType houseType, CommutingArea commutingArea, InfraNew infra, Environment environment) { + setId(id); + this.memberId = memberId; + this.hopeGap = hopeGap; + this.investmentPlan = investmentPlan; + this.apartmentSquare = apartmentSquare; + this.household = household; + this.houseType = houseType; + this.commutingArea = commutingArea; + this.infra = infra; + this.environment = environment; + } + + public static GapInvestment createNewGapInvestment(MemberId memberId, HopeGap hopeGap, InvestmentPlan investmentPlan, ApartmentSquare apartmentSquare, Household household, HouseType houseType, CommutingArea commutingArea, InfraNew infra, Environment environment) { + return GapInvestment.builder() + .memberId(memberId) + .hopeGap(hopeGap) + .investmentPlan(investmentPlan) + .apartmentSquare(apartmentSquare) + .household(household) + .houseType(houseType) + .commutingArea(commutingArea) + .infra(infra) + .environment(environment) + .build(); + } +} \ No newline at end of file diff --git a/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/Member.java b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/Member.java index 8857258a..46c87558 100644 --- a/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/Member.java +++ b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/Member.java @@ -1,12 +1,7 @@ package com.project.imdang.member.domain.entity; import com.project.imdang.common.domain.entity.AggregateRoot; -import com.project.imdang.common.domain.valueobject.Gender; -import com.project.imdang.common.domain.valueobject.MemberId; -import com.project.imdang.common.domain.valueobject.MemberStatus; -import com.project.imdang.common.domain.valueobject.OAuthProvider; -import com.project.imdang.common.domain.valueobject.Penalty; -import com.project.imdang.common.domain.valueobject.PenaltyPeriod; +import com.project.imdang.common.domain.valueobject.*; import com.project.imdang.member.domain.valueobject.AccusePenaltyPolicy; import lombok.Builder; import lombok.Getter; @@ -35,6 +30,16 @@ public class Member extends AggregateRoot { private MemberStatus status; private PenaltyPeriod penaltyPeriod; + private Purpose purpose; + private Budget budget; + private MonthIncome monthIncome; + + private String firstPriority; + private String secondPriority; + private String thirdPriority; + + private String interestDistrict; + public static Member createNewMember(String oAuthId, OAuthProvider oAuthProvider) { return Member.builder() .id(new MemberId(UUID.randomUUID())) @@ -60,7 +65,14 @@ public Member(MemberId id, Boolean isDeleted, Long accusedCount, MemberStatus status, - PenaltyPeriod penaltyPeriod) { + PenaltyPeriod penaltyPeriod, + Purpose purpose, + Budget budget, + MonthIncome monthIncome, + String firstPriority, + String secondPriority, + String thirdPriority, + String interestDistrict) { setId(id); this.nickname = nickname; this.birthDate = birthDate; @@ -75,6 +87,13 @@ public Member(MemberId id, this.accusedCount = accusedCount; this.status = status; this.penaltyPeriod = penaltyPeriod; + this.purpose = purpose; + this.budget = budget; + this.monthIncome = monthIncome; + this.firstPriority = firstPriority; + this.secondPriority = secondPriority; + this.thirdPriority = thirdPriority; + this.interestDistrict = interestDistrict; } public void join(String nickname, String birthDate, Gender gender, String deviceToken) { @@ -119,4 +138,23 @@ public Member updateInsightCreateDate() { this.latestInsightCreateDate = LocalDate.now(); return this; } + + public Member setCommonCondition(Purpose purpose, Budget budget, MonthIncome monthIncome) { + this.purpose = purpose; + this.budget = budget; + this.monthIncome = monthIncome; + return this; + } + + public Member setPriority(String firstPriority, String secondPriority, String thirdPriority) { + this.firstPriority = firstPriority; + this.secondPriority = secondPriority; + this.thirdPriority = thirdPriority; + return this; + } + + public Member setInterestDistrict(String interestDistrict) { + this.interestDistrict = interestDistrict; + return this; + } } diff --git a/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/valueobject/ActualLivingId.java b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/valueobject/ActualLivingId.java new file mode 100644 index 00000000..1ae3f023 --- /dev/null +++ b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/valueobject/ActualLivingId.java @@ -0,0 +1,9 @@ +package com.project.imdang.member.domain.valueobject; + +import com.project.imdang.common.domain.valueobject.BaseId; + +public class ActualLivingId extends BaseId { + public ActualLivingId(Long value) { + super(value); + } +} diff --git a/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/valueobject/GapInvestmentId.java b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/valueobject/GapInvestmentId.java new file mode 100644 index 00000000..f63c7437 --- /dev/null +++ b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/valueobject/GapInvestmentId.java @@ -0,0 +1,9 @@ +package com.project.imdang.member.domain.valueobject; + +import com.project.imdang.common.domain.valueobject.BaseId; + +public class GapInvestmentId extends BaseId { + public GapInvestmentId(Long value) { + super(value); + } +} diff --git a/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/valueobject/MemberPriorityId.java b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/valueobject/MemberPriorityId.java new file mode 100644 index 00000000..8c5633e9 --- /dev/null +++ b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/valueobject/MemberPriorityId.java @@ -0,0 +1,9 @@ +package com.project.imdang.member.domain.valueobject; + +import com.project.imdang.common.domain.valueobject.BaseId; + +public class MemberPriorityId extends BaseId { + public MemberPriorityId(Long value) { + super(value); + } +} diff --git a/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/adapter/ConditionRepositoryImpl.java b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/adapter/ConditionRepositoryImpl.java new file mode 100644 index 00000000..b4bd6b5f --- /dev/null +++ b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/adapter/ConditionRepositoryImpl.java @@ -0,0 +1,37 @@ +package com.project.imdang.member.persistence.adapter; + +import com.project.imdang.member.domain.entity.ActualLiving; +import com.project.imdang.member.domain.entity.GapInvestment; +import com.project.imdang.member.domain.ports.output.repository.ConditionRepository; +import com.project.imdang.member.persistence.entity.ActualLivingEntity; +import com.project.imdang.member.persistence.entity.GapInvestmentEntity; +import com.project.imdang.member.persistence.mapper.ActualLivingPersistenceMapper; +import com.project.imdang.member.persistence.mapper.GapInvestmentPersistenceMapper; +import com.project.imdang.member.persistence.repository.ActualLivingJpaRepository; +import com.project.imdang.member.persistence.repository.GapInvestmentJpaRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +@Repository +@RequiredArgsConstructor +public class ConditionRepositoryImpl implements ConditionRepository { + + private final GapInvestmentJpaRepository gapInvestmentJpaRepository; + private final GapInvestmentPersistenceMapper gapInvestmentMapper; + private final ActualLivingJpaRepository actualLivingJpaRepository; + private final ActualLivingPersistenceMapper actualLivingMapper; + + @Override + public GapInvestment saveGapInvestment(GapInvestment gapInvestment) { + GapInvestmentEntity gapInvestmentEntity = gapInvestmentMapper.gapInvestmentToGapInvestmentEntity(gapInvestment); + GapInvestmentEntity saved = gapInvestmentJpaRepository.save(gapInvestmentEntity); + return gapInvestmentMapper.gapInvestmentEntityToGapInvestment(saved); + } + + @Override + public ActualLiving saveActualLiving(ActualLiving actualLiving) { + ActualLivingEntity actualLivingEntity = actualLivingMapper.actualLivingToActualLivingEntity(actualLiving); + ActualLivingEntity saved = actualLivingJpaRepository.save(actualLivingEntity); + return actualLivingMapper.actualLivingEntityToActualLiving(saved); + } +} diff --git a/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/ActualLivingEntity.java b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/ActualLivingEntity.java new file mode 100644 index 00000000..4e99c966 --- /dev/null +++ b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/ActualLivingEntity.java @@ -0,0 +1,44 @@ +package com.project.imdang.member.persistence.entity; + +import com.project.imdang.common.domain.valueobject.CommutingArea; +import com.project.imdang.common.domain.valueobject.Environment; +import com.project.imdang.common.domain.valueobject.InfraNew; +import com.project.imdang.common.domain.valueobject.living.ChildrenPlan; +import com.project.imdang.common.domain.valueobject.living.LivingPerson; +import com.project.imdang.common.domain.valueobject.living.SchoolDistrict; +import com.project.imdang.common.domain.valueobject.living.Traffic; +import jakarta.persistence.*; +import lombok.*; + +import java.util.UUID; + +@Builder +@AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter @Setter +@Table(name = "actual_living") +@Entity +public class ActualLivingEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(columnDefinition = "CHAR(36)") + private UUID memberId; + + @Enumerated(EnumType.STRING) + private LivingPerson livingPerson; + @Enumerated(EnumType.STRING) + private ChildrenPlan childrenPlan; + @Enumerated(EnumType.STRING) + private CommutingArea commutingArea; + @Enumerated(EnumType.STRING) + private Traffic traffic; + @Enumerated(EnumType.STRING) + private SchoolDistrict schoolDistrict; + @Enumerated(EnumType.STRING) + private InfraNew infra; + @Enumerated(EnumType.STRING) + private Environment environment; +} diff --git a/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/GapInvestmentEntity.java b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/GapInvestmentEntity.java new file mode 100644 index 00000000..4d212126 --- /dev/null +++ b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/GapInvestmentEntity.java @@ -0,0 +1,43 @@ +package com.project.imdang.member.persistence.entity; + +import com.project.imdang.common.domain.valueobject.CommutingArea; +import com.project.imdang.common.domain.valueobject.Environment; +import com.project.imdang.common.domain.valueobject.InfraNew; +import com.project.imdang.common.domain.valueobject.gapInvestment.*; +import jakarta.persistence.*; +import lombok.*; + +import java.util.UUID; + +@Builder +@AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter @Setter +@Table(name = "gap_investment") +@Entity +public class GapInvestmentEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(columnDefinition = "CHAR(36)") + private UUID memberId; + + @Enumerated(EnumType.STRING) + private HopeGap hopeGap; + @Enumerated(EnumType.STRING) + private InvestmentPlan investmentPlan; + @Enumerated(EnumType.STRING) + private ApartmentSquare apartmentSquare; + @Enumerated(EnumType.STRING) + private Household household; + @Enumerated(EnumType.STRING) + private HouseType houseType; + @Enumerated(EnumType.STRING) + private CommutingArea commutingArea; + @Enumerated(EnumType.STRING) + private InfraNew infra; + @Enumerated(EnumType.STRING) + private Environment environment; +} diff --git a/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/MemberEntity.java b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/MemberEntity.java index ba7c2ab2..97becb2f 100644 --- a/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/MemberEntity.java +++ b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/MemberEntity.java @@ -1,9 +1,6 @@ package com.project.imdang.member.persistence.entity; -import com.project.imdang.common.domain.valueobject.Gender; -import com.project.imdang.common.domain.valueobject.MemberStatus; -import com.project.imdang.common.domain.valueobject.OAuthProvider; -import com.project.imdang.common.domain.valueobject.PenaltyPeriod; +import com.project.imdang.common.domain.valueobject.*; import jakarta.persistence.AttributeOverride; import jakarta.persistence.AttributeOverrides; import jakarta.persistence.Column; @@ -58,6 +55,19 @@ public class MemberEntity { @Enumerated(EnumType.STRING) private MemberStatus status; + @Enumerated(EnumType.STRING) + private Purpose purpose; + @Enumerated(EnumType.STRING) + private Budget budget; + @Enumerated(EnumType.STRING) + private MonthIncome monthIncome; + + private String firstPriority; + private String secondPriority; + private String thirdPriority; + + private String interestDistrict; + @Embedded @AttributeOverrides({ @AttributeOverride(name = "from", column = @Column(name = "penalty_from")), diff --git a/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/mapper/ActualLivingPersistenceMapper.java b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/mapper/ActualLivingPersistenceMapper.java new file mode 100644 index 00000000..4d90e245 --- /dev/null +++ b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/mapper/ActualLivingPersistenceMapper.java @@ -0,0 +1,41 @@ +package com.project.imdang.member.persistence.mapper; + + +import com.project.imdang.common.domain.valueobject.MemberId; +import com.project.imdang.member.domain.entity.ActualLiving; +import com.project.imdang.member.domain.valueobject.ActualLivingId; +import com.project.imdang.member.persistence.entity.ActualLivingEntity; +import org.springframework.stereotype.Component; + +import java.util.Objects; + +@Component +public class ActualLivingPersistenceMapper { + public ActualLivingEntity actualLivingToActualLivingEntity(ActualLiving actualLiving) { + return ActualLivingEntity.builder() + .id(!Objects.isNull(actualLiving.getId()) ? actualLiving.getId().getValue() : null ) + .memberId(actualLiving.getMemberId().getValue()) + .livingPerson(actualLiving.getLivingPerson()) + .childrenPlan(actualLiving.getChildrenPlan()) + .commutingArea(actualLiving.getCommutingArea()) + .traffic(actualLiving.getTraffic()) + .schoolDistrict(actualLiving.getSchoolDistrict()) + .infra(actualLiving.getInfra()) + .environment(actualLiving.getEnvironment()) + .build(); + } + + public ActualLiving actualLivingEntityToActualLiving(ActualLivingEntity actualLivingEntity) { + return ActualLiving.builder() + .id(new ActualLivingId(actualLivingEntity.getId())) + .memberId(new MemberId(actualLivingEntity.getMemberId())) + .livingPerson(actualLivingEntity.getLivingPerson()) + .childrenPlan(actualLivingEntity.getChildrenPlan()) + .commutingArea(actualLivingEntity.getCommutingArea()) + .traffic(actualLivingEntity.getTraffic()) + .schoolDistrict(actualLivingEntity.getSchoolDistrict()) + .infra(actualLivingEntity.getInfra()) + .environment(actualLivingEntity.getEnvironment()) + .build(); + } +} diff --git a/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/mapper/GapInvestmentPersistenceMapper.java b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/mapper/GapInvestmentPersistenceMapper.java new file mode 100644 index 00000000..acea1830 --- /dev/null +++ b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/mapper/GapInvestmentPersistenceMapper.java @@ -0,0 +1,41 @@ +package com.project.imdang.member.persistence.mapper; + + +import com.project.imdang.common.domain.valueobject.MemberId; +import com.project.imdang.member.domain.entity.GapInvestment; +import com.project.imdang.member.domain.valueobject.GapInvestmentId; +import com.project.imdang.member.persistence.entity.GapInvestmentEntity; +import org.springframework.stereotype.Component; + +import java.util.Objects; + +@Component +public class GapInvestmentPersistenceMapper { + public GapInvestmentEntity gapInvestmentToGapInvestmentEntity(GapInvestment gapInvestment) { + return GapInvestmentEntity.builder() + .id(!Objects.isNull(gapInvestment.getId()) ? gapInvestment.getId().getValue() : null ) + .memberId(gapInvestment.getMemberId().getValue()) + .hopeGap(gapInvestment.getHopeGap()) + .investmentPlan(gapInvestment.getInvestmentPlan()) + .apartmentSquare(gapInvestment.getApartmentSquare()) + .household(gapInvestment.getHousehold()) + .commutingArea(gapInvestment.getCommutingArea()) + .infra(gapInvestment.getInfra()) + .environment(gapInvestment.getEnvironment()) + .build(); + } + + public GapInvestment gapInvestmentEntityToGapInvestment(GapInvestmentEntity gapInvestmentEntity) { + return GapInvestment.builder() + .id(new GapInvestmentId(gapInvestmentEntity.getId())) + .memberId(new MemberId(gapInvestmentEntity.getMemberId())) + .hopeGap(gapInvestmentEntity.getHopeGap()) + .investmentPlan(gapInvestmentEntity.getInvestmentPlan()) + .apartmentSquare(gapInvestmentEntity.getApartmentSquare()) + .household(gapInvestmentEntity.getHousehold()) + .commutingArea(gapInvestmentEntity.getCommutingArea()) + .infra(gapInvestmentEntity.getInfra()) + .environment(gapInvestmentEntity.getEnvironment()) + .build(); + } +} diff --git a/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/mapper/MemberPersistenceMapper.java b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/mapper/MemberPersistenceMapper.java index f9be7abd..9b2deb49 100644 --- a/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/mapper/MemberPersistenceMapper.java +++ b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/mapper/MemberPersistenceMapper.java @@ -26,6 +26,13 @@ public MemberEntity memberToMemberEntity(Member member) { .accusedCount(member.getAccusedCount()) .status(member.getStatus()) .penaltyPeriod(member.getPenaltyPeriod()) + .purpose(member.getPurpose()) + .budget(member.getBudget()) + .monthIncome(member.getMonthIncome()) + .firstPriority(member.getFirstPriority()) + .secondPriority(member.getSecondPriority()) + .thirdPriority(member.getThirdPriority()) + .interestDistrict(member.getInterestDistrict()) .build(); } @@ -47,6 +54,13 @@ public Member memberEntityToMember(MemberEntity memberEntity) { .accusedCount(memberEntity.getAccusedCount()) .status(memberEntity.getStatus()) .penaltyPeriod(memberEntity.getPenaltyPeriod()) + .purpose(memberEntity.getPurpose()) + .budget(memberEntity.getBudget()) + .monthIncome(memberEntity.getMonthIncome()) + .firstPriority(memberEntity.getFirstPriority()) + .secondPriority(memberEntity.getSecondPriority()) + .thirdPriority(memberEntity.getThirdPriority()) + .interestDistrict(memberEntity.getInterestDistrict()) .build(); } } diff --git a/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/repository/ActualLivingJpaRepository.java b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/repository/ActualLivingJpaRepository.java new file mode 100644 index 00000000..66943d4c --- /dev/null +++ b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/repository/ActualLivingJpaRepository.java @@ -0,0 +1,10 @@ +package com.project.imdang.member.persistence.repository; + +import com.project.imdang.member.persistence.entity.ActualLivingEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ActualLivingJpaRepository extends JpaRepository { + +} diff --git a/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/repository/GapInvestmentJpaRepository.java b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/repository/GapInvestmentJpaRepository.java new file mode 100644 index 00000000..cb286473 --- /dev/null +++ b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/repository/GapInvestmentJpaRepository.java @@ -0,0 +1,10 @@ +package com.project.imdang.member.persistence.repository; + + +import com.project.imdang.member.persistence.entity.GapInvestmentEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface GapInvestmentJpaRepository extends JpaRepository { +}