From 38ad83059cd3cc9146b32304f54c187b49acad80 Mon Sep 17 00:00:00 2001 From: kyu-hyun Date: Sun, 27 Jul 2025 23:54:06 +0900 Subject: [PATCH 01/12] =?UTF-8?q?feat=20:=20=EC=A1=B0=EA=B1=B4=20=EA=B0=92?= =?UTF-8?q?=20=EB=A7=A4=ED=95=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../imdang/common/domain/valueobject/Budget.java | 13 +++++++++++++ .../common/domain/valueobject/CommutingArea.java | 16 ++++++++++++++++ .../common/domain/valueobject/Environment.java | 15 +++++++++++++++ .../common/domain/valueobject/InfraNew.java | 15 +++++++++++++++ .../common/domain/valueobject/MonthIncome.java | 13 +++++++++++++ .../common/domain/valueobject/Purpose.java | 11 +++++++++++ .../gapInvestment/ApartmentSquare.java | 15 +++++++++++++++ .../valueobject/gapInvestment/HopeGap.java | 16 ++++++++++++++++ .../valueobject/gapInvestment/HouseType.java | 14 ++++++++++++++ .../valueobject/gapInvestment/Household.java | 16 ++++++++++++++++ .../gapInvestment/InvestmentPlan.java | 16 ++++++++++++++++ .../domain/valueobject/living/ChildrenPlan.java | 14 ++++++++++++++ .../domain/valueobject/living/LivingPerson.java | 15 +++++++++++++++ .../valueobject/living/SchoolDistrict.java | 15 +++++++++++++++ .../domain/valueobject/living/Traffic.java | 16 ++++++++++++++++ 15 files changed, 220 insertions(+) create mode 100644 common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/Budget.java create mode 100644 common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/CommutingArea.java create mode 100644 common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/Environment.java create mode 100644 common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/InfraNew.java create mode 100644 common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/MonthIncome.java create mode 100644 common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/Purpose.java create mode 100644 common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/ApartmentSquare.java create mode 100644 common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/HopeGap.java create mode 100644 common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/HouseType.java create mode 100644 common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/Household.java create mode 100644 common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/InvestmentPlan.java create mode 100644 common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/ChildrenPlan.java create mode 100644 common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/LivingPerson.java create mode 100644 common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/SchoolDistrict.java create mode 100644 common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/Traffic.java 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..6717a754 --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/Budget.java @@ -0,0 +1,13 @@ +package com.project.imdang.common.domain.valueobject; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@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; +} 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..2ec29a8f --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/CommutingArea.java @@ -0,0 +1,16 @@ +package com.project.imdang.common.domain.valueobject; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 출퇴근 지역 + */ +@Getter +@RequiredArgsConstructor +public enum CommutingArea { + GANGNAM("강남"), YEOUIDO("여의도"), GWANGHWAMUN("광화문"), EULJIRO("을지로"), SEONGSU("성수"), + PANGYO("판교"), MAPO("마포"), GURO("구로"), SANGAM("상암DMC"), GANGSEO("강서"), SONGPA("송파"); + + private final String 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..aada729b --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/Environment.java @@ -0,0 +1,15 @@ +package com.project.imdang.common.domain.valueobject; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 환경 + */ +@Getter +@RequiredArgsConstructor +public enum Environment { + PARK("공원"), HIKING("등산로"), HANGANG("한강"), + RIVER("하천"), DENSE_APARTMENT("아파트 밀집"); + private final String 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..a604211f --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/InfraNew.java @@ -0,0 +1,15 @@ +package com.project.imdang.common.domain.valueobject; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 인프라 + */ +@Getter +@RequiredArgsConstructor +public enum InfraNew { + MART("대형마트"), HOSPITAL("대형병원"), DEPARTMENT_STORE("백화점"), + CHILD_FACILITIY("아이_동반시설"), CULTURE_FACILITY("문화시설"); + private final String 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..9127875b --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/MonthIncome.java @@ -0,0 +1,13 @@ +package com.project.imdang.common.domain.valueobject; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@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; +} 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..57e6e062 --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/Purpose.java @@ -0,0 +1,11 @@ +package com.project.imdang.common.domain.valueobject; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum Purpose { + LIVING("실거주"), GAP_INVESTMENT("갭투자"); + private final String 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..a295133c --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/ApartmentSquare.java @@ -0,0 +1,15 @@ +package com.project.imdang.common.domain.valueobject.gapInvestment; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 아파트 평수 + */ +@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; +} 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..e41fef36 --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/HopeGap.java @@ -0,0 +1,16 @@ +package com.project.imdang.common.domain.valueobject.gapInvestment; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 희망 갭 정도 + */ +@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; +} 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..6555c10b --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/HouseType.java @@ -0,0 +1,14 @@ +package com.project.imdang.common.domain.valueobject.gapInvestment; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 유형 + */ +@Getter +@RequiredArgsConstructor +public enum HouseType { + NEW("신축"), OLD("구축"); + private final String 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..35e357c6 --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/Household.java @@ -0,0 +1,16 @@ +package com.project.imdang.common.domain.valueobject.gapInvestment; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 세대수 + */ +@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; +} 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..c864e846 --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/InvestmentPlan.java @@ -0,0 +1,16 @@ +package com.project.imdang.common.domain.valueobject.gapInvestment; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 투자 계획 + */ +@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; +} 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..02e90c05 --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/ChildrenPlan.java @@ -0,0 +1,14 @@ +package com.project.imdang.common.domain.valueobject.living; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 아이 유무 + */ +@Getter +@RequiredArgsConstructor +public enum ChildrenPlan { + NO("자녀 계획 없음"), YES("자녀 계획 있음"), ONE("1명"), TWO("2명"), THREE("3명"); + private final String 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..8d1335e7 --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/LivingPerson.java @@ -0,0 +1,15 @@ +package com.project.imdang.common.domain.valueobject.living; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 함께 살 인원 + */ +@Getter +@RequiredArgsConstructor +public enum LivingPerson { + NEW_COUPLE("신혼부부"), FAMILY("가족(3인 이상)"), OLD_COUPLE("중년부부"), SINGLE("혼자"); + + private final String 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..8d9ca29d --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/SchoolDistrict.java @@ -0,0 +1,15 @@ +package com.project.imdang.common.domain.valueobject.living; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 학군 + */ +@Getter +@RequiredArgsConstructor +public enum SchoolDistrict { + ELEMENTARY_APARTMENT("초품아"), PRESTIGIOUS_SCHOOL("명문_초/중/고"), CLOSE_ACADEMY("학원가_근접"), + BABY_COMMUNITY("육아_커뮤니티_활발"), SAFE_ROUTE("안전한_통학로"); + private final String 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..7566cfaa --- /dev/null +++ b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/living/Traffic.java @@ -0,0 +1,16 @@ +package com.project.imdang.common.domain.valueobject.living; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 교통 + */ +@Getter +@RequiredArgsConstructor +public enum Traffic { + STATION_AREA("역세권"), BUS_STOP("버스정류장_가까움"), CONVENIENT_PARKING("주차_편리"), + CONNECT_PARKING("주차장_엘리베이터_연결"), COMMUTING_CAR("자차_출퇴근_편리"); + + private final String value; +} From 410e2be7be25e6b1570a3d8e6c238a7c732f2962 Mon Sep 17 00:00:00 2001 From: kyu-hyun Date: Sun, 27 Jul 2025 23:54:44 +0900 Subject: [PATCH 02/12] =?UTF-8?q?feat=20:=20=EA=B0=AD=ED=88=AC=EC=9E=90,?= =?UTF-8?q?=20=EC=8B=A4=EA=B1=B0=EC=A3=BC,=20=EC=9A=B0=EC=84=A0=EC=88=9C?= =?UTF-8?q?=EC=9C=84=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/domain/entity/ActualLiving.java | 40 ++++++++++++++++++ .../member/domain/entity/GapInvestment.java | 39 +++++++++++++++++ .../imdang/member/domain/entity/Member.java | 10 ++--- .../member/domain/entity/MemberPriority.java | 29 +++++++++++++ .../domain/valueobject/ActualLivingId.java | 9 ++++ .../domain/valueobject/GapInvestmentId.java | 9 ++++ .../domain/valueobject/MemberPriorityId.java | 9 ++++ .../entity/ActualLivingEntity.java | 42 +++++++++++++++++++ .../entity/GapInvestmentEntity.java | 40 ++++++++++++++++++ .../persistence/entity/MemberEntity.java | 10 +++-- .../entity/MemberPriorityEntity.java | 22 ++++++++++ 11 files changed, 249 insertions(+), 10 deletions(-) create mode 100644 member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/ActualLiving.java create mode 100644 member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/GapInvestment.java create mode 100644 member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/MemberPriority.java create mode 100644 member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/valueobject/ActualLivingId.java create mode 100644 member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/valueobject/GapInvestmentId.java create mode 100644 member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/valueobject/MemberPriorityId.java create mode 100644 member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/ActualLivingEntity.java create mode 100644 member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/GapInvestmentEntity.java create mode 100644 member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/MemberPriorityEntity.java 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..5b254138 --- /dev/null +++ b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/ActualLiving.java @@ -0,0 +1,40 @@ + +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.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(MemberId memberId, LivingPerson livingPerson, ChildrenPlan childrenPlan, CommutingArea commutingArea, Traffic traffic, SchoolDistrict schoolDistrict, InfraNew infra, Environment environment) { + this.memberId = memberId; + this.livingPerson = livingPerson; + this.childrenPlan = childrenPlan; + this.commutingArea = commutingArea; + this.traffic = traffic; + this.schoolDistrict = schoolDistrict; + this.infra = infra; + this.environment = environment; + } +} 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..1555e276 --- /dev/null +++ b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/GapInvestment.java @@ -0,0 +1,39 @@ + +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.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(MemberId memberId, HopeGap hopeGap, InvestmentPlan investmentPlan, ApartmentSquare apartmentSquare, Household household, HouseType houseType, CommutingArea commutingArea, InfraNew infra, Environment environment) { + 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; + } +} \ 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..532c930a 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,9 @@ public class Member extends AggregateRoot { private MemberStatus status; private PenaltyPeriod penaltyPeriod; + private Budget budget; + private MonthIncome monthIncome; + public static Member createNewMember(String oAuthId, OAuthProvider oAuthProvider) { return Member.builder() .id(new MemberId(UUID.randomUUID())) diff --git a/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/MemberPriority.java b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/MemberPriority.java new file mode 100644 index 00000000..22fd1278 --- /dev/null +++ b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/MemberPriority.java @@ -0,0 +1,29 @@ +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.member.domain.valueobject.AccusePenaltyPolicy; +import com.project.imdang.member.domain.valueobject.MemberPriorityId; +import lombok.Builder; +import lombok.Getter; + +import java.time.LocalDate; +import java.util.UUID; + +@Getter +public class MemberPriority extends AggregateRoot { + + private final MemberId memberId; + private final String first; + private final String second; + private final String third; + + @Builder + public MemberPriority(MemberPriorityId memberPriorityId, MemberId memberId, String first, String second, String third) { + setId(memberPriorityId); + this.memberId = memberId; + this.first = first; + this.second = second; + this.third = third; + } +} 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/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..0ed5ae05 --- /dev/null +++ b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/ActualLivingEntity.java @@ -0,0 +1,42 @@ +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 + private Long id; + + 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..ecdd3657 --- /dev/null +++ b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/GapInvestmentEntity.java @@ -0,0 +1,40 @@ +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 + private Long id; + + 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..429d8663 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,11 @@ public class MemberEntity { @Enumerated(EnumType.STRING) private MemberStatus status; + @Enumerated(EnumType.STRING) + private Budget budget; + @Enumerated(EnumType.STRING) + private MonthIncome monthIncome; + @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/entity/MemberPriorityEntity.java b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/MemberPriorityEntity.java new file mode 100644 index 00000000..464473c3 --- /dev/null +++ b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/MemberPriorityEntity.java @@ -0,0 +1,22 @@ +package com.project.imdang.member.persistence.entity; + +import jakarta.persistence.*; +import lombok.*; +import java.util.UUID; + +@Builder +@AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter @Setter +@Table(name = "member_priority") +@Entity +public class MemberPriorityEntity { + + @Id + private Long id; + + private UUID memberId; + private String first; + private String second; + private String third; +} From 767647e1499279c99ccf7ef77e4bb34c572f6f09 Mon Sep 17 00:00:00 2001 From: khlee Date: Mon, 28 Jul 2025 16:58:39 +0900 Subject: [PATCH 03/12] =?UTF-8?q?feat=20:=20member=20=EC=BB=AC=EB=9F=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../imdang/member/domain/entity/Member.java | 16 +++++++++++++++- .../member/persistence/entity/MemberEntity.java | 2 ++ .../mapper/MemberPersistenceMapper.java | 6 ++++++ 3 files changed, 23 insertions(+), 1 deletion(-) 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 532c930a..4ae9c690 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 @@ -30,6 +30,7 @@ public class Member extends AggregateRoot { private MemberStatus status; private PenaltyPeriod penaltyPeriod; + private Purpose purpose; private Budget budget; private MonthIncome monthIncome; @@ -58,7 +59,10 @@ public Member(MemberId id, Boolean isDeleted, Long accusedCount, MemberStatus status, - PenaltyPeriod penaltyPeriod) { + PenaltyPeriod penaltyPeriod, + Purpose purpose, + Budget budget, + MonthIncome monthIncome) { setId(id); this.nickname = nickname; this.birthDate = birthDate; @@ -73,6 +77,9 @@ public Member(MemberId id, this.accusedCount = accusedCount; this.status = status; this.penaltyPeriod = penaltyPeriod; + this.purpose = purpose; + this.budget = budget; + this.monthIncome = monthIncome; } public void join(String nickname, String birthDate, Gender gender, String deviceToken) { @@ -117,4 +124,11 @@ 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; + } } 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 429d8663..a92d788f 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 @@ -55,6 +55,8 @@ public class MemberEntity { @Enumerated(EnumType.STRING) private MemberStatus status; + @Enumerated(EnumType.STRING) + private Purpose purpose; @Enumerated(EnumType.STRING) private Budget budget; @Enumerated(EnumType.STRING) 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..4aafb0e9 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,9 @@ public MemberEntity memberToMemberEntity(Member member) { .accusedCount(member.getAccusedCount()) .status(member.getStatus()) .penaltyPeriod(member.getPenaltyPeriod()) + .purpose(member.getPurpose()) + .budget(member.getBudget()) + .monthIncome(member.getMonthIncome()) .build(); } @@ -47,6 +50,9 @@ public Member memberEntityToMember(MemberEntity memberEntity) { .accusedCount(memberEntity.getAccusedCount()) .status(memberEntity.getStatus()) .penaltyPeriod(memberEntity.getPenaltyPeriod()) + .purpose(memberEntity.getPurpose()) + .budget(memberEntity.getBudget()) + .monthIncome(memberEntity.getMonthIncome()) .build(); } } From 51572526f18693a90b681bc3ad92116619340707 Mon Sep 17 00:00:00 2001 From: khlee Date: Mon, 28 Jul 2025 17:00:58 +0900 Subject: [PATCH 04/12] =?UTF-8?q?feat=20:=20=EC=A1=B0=EA=B1=B4/=EC=9A=B0?= =?UTF-8?q?=EC=84=A0=EC=88=9C=EC=9C=84=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/constant/RequestPath.java | 1 + .../dto/member/ConditionRequest.java | 30 +++++++ .../application/rest/MemberController.java | 69 +++++++++++++-- .../domain/MemberApplicationServiceImpl.java | 11 ++- .../member/ActualLivingConditionCommand.java | 27 ++++++ .../domain/dto/member/ConditionCommand.java | 18 ++++ .../member/GapInvestmentConditionCommand.java | 27 ++++++ .../domain/dto/member/PriorityCommand.java | 13 +++ .../member/ConditionCommandHandler.java | 83 +++++++++++++++++++ .../service/MemberApplicationService.java | 7 +- .../repository/ConditionRepository.java | 9 ++ .../member/domain/MemberDomainService.java | 16 +++- .../domain/MemberDomainServiceImpl.java | 26 +++++- .../member/domain/entity/ActualLiving.java | 10 +-- .../member/domain/entity/GapInvestment.java | 3 +- .../adapter/ConditionRepositoryImpl.java | 37 +++++++++ .../mapper/ActualLivingPersistenceMapper.java | 41 +++++++++ .../GapInvestmentPersistenceMapper.java | 41 +++++++++ .../repository/ActualLivingJpaRepository.java | 10 +++ .../GapInvestmentJpaRepository.java | 10 +++ 20 files changed, 462 insertions(+), 27 deletions(-) create mode 100644 member-service/member-application/src/main/java/com/project/imdang/member/application/dto/member/ConditionRequest.java create mode 100644 member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/ActualLivingConditionCommand.java create mode 100644 member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/ConditionCommand.java create mode 100644 member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/GapInvestmentConditionCommand.java create mode 100644 member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/PriorityCommand.java create mode 100644 member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/handler/member/ConditionCommandHandler.java create mode 100644 member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/ports/output/repository/ConditionRepository.java create mode 100644 member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/adapter/ConditionRepositoryImpl.java create mode 100644 member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/mapper/ActualLivingPersistenceMapper.java create mode 100644 member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/mapper/GapInvestmentPersistenceMapper.java create mode 100644 member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/repository/ActualLivingJpaRepository.java create mode 100644 member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/repository/GapInvestmentJpaRepository.java 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..31d75f32 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 + "/condition"; public static final String WITHDRAW_MEMBER = MEMBER + "/withdraw"; // ******************* terms ******************* diff --git a/member-service/member-application/src/main/java/com/project/imdang/member/application/dto/member/ConditionRequest.java b/member-service/member-application/src/main/java/com/project/imdang/member/application/dto/member/ConditionRequest.java new file mode 100644 index 00000000..2cae3adb --- /dev/null +++ b/member-service/member-application/src/main/java/com/project/imdang/member/application/dto/member/ConditionRequest.java @@ -0,0 +1,30 @@ +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; + +public record ConditionRequest( + Purpose purpose, + Budget budget, + MonthIncome monthIncome, + LivingPerson livingPerson, + ChildrenPlan childrenPlan, + HopeGap hopeGap, + InvestmentPlan investmentPlan, + Traffic traffic, + SchoolDistrict schoolDistrict, + ApartmentSquare apartmentSquare, + Household household, + HouseType houseType, + CommutingArea commutingArea, + InfraNew infra, + Environment environment, + String firstPriority, + String secondPriority, + String thirdPriority +) { +} 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..844e197f 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.ConditionRequest; 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,62 @@ 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 = "조건/우선순위 설정 성공") + }) + @PutMapping(CONDITION_MEMBER) + public ApiResponse condition(@AuthenticationPrincipal UUID memberId, + @RequestBody @Valid ConditionRequest conditionRequest) { + + Purpose purpose = conditionRequest.purpose(); + ConditionCommand conditionCommand = null; + //실거주 + if (purpose == Purpose.LIVING) { + conditionCommand = ActualLivingConditionCommand.builder() + .memberId(new MemberId(memberId)) + .purpose(conditionRequest.purpose()) + .budget(conditionRequest.budget()) + .monthIncome(conditionRequest.monthIncome()) + .livingPerson(conditionRequest.livingPerson()) + .childrenPlan(conditionRequest.childrenPlan()) + .commutingArea(conditionRequest.commutingArea()) + .traffic(conditionRequest.traffic()) + .schoolDistrict(conditionRequest.schoolDistrict()) + .infra(conditionRequest.infra()) + .environment(conditionRequest.environment()) + .build(); + } + //갭투자 + else if (purpose == Purpose.GAP_INVESTMENT) { + conditionCommand = GapInvestmentConditionCommand.builder() + .memberId(new MemberId(memberId)) + .purpose(conditionRequest.purpose()) + .budget(conditionRequest.budget()) + .monthIncome(conditionRequest.monthIncome()) + .hopeGap(conditionRequest.hopeGap()) + .investmentPlan(conditionRequest.investmentPlan()) + .apartmentSquare(conditionRequest.apartmentSquare()) + .household(conditionRequest.household()) + .houseType(conditionRequest.houseType()) + .commutingArea(conditionRequest.commutingArea()) + .infra(conditionRequest.infra()) + .environment(conditionRequest.environment()) + .build(); + } + + PriorityCommand priorityCommand = PriorityCommand.builder() + .firstPriority(conditionRequest.firstPriority()) + .secondPriority(conditionRequest.secondPriority()) + .thirdPriority(conditionRequest.thirdPriority()) + .build(); + + Boolean joinResult = memberApplicationService.condition(conditionCommand, priorityCommand); + 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..5543cf08 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) { + return conditionCommandHandler.condition(conditionCommand, priorityCommand); + } } 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..80b6f398 --- /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.*; + +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class ActualLivingConditionCommand extends ConditionCommand { + private LivingPerson livingPerson; + private ChildrenPlan childrenPlan; + private Traffic traffic; + private SchoolDistrict schoolDistrict; + + @Builder + + 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..311c8ac1 --- /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,18 @@ +package com.project.imdang.member.domain.dto.member; + +import com.project.imdang.common.domain.valueobject.*; +import lombok.*; + +@Builder +@AllArgsConstructor +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +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..31fece01 --- /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.*; + + +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class GapInvestmentConditionCommand extends ConditionCommand { + private HopeGap hopeGap; + private InvestmentPlan investmentPlan; + private ApartmentSquare apartmentSquare; + private Household household; + private HouseType houseType; + + @Builder + + 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/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..21f3bb5c --- /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,83 @@ +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.ActualLivingConditionCommand; +import com.project.imdang.member.domain.dto.member.ConditionCommand; +import com.project.imdang.member.domain.dto.member.GapInvestmentConditionCommand; +import com.project.imdang.member.domain.dto.member.PriorityCommand; +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.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) { + // 1. 토큰에서 유저 정보 추출 후 검증 + final MemberId memberId = conditionCommand.getMemberId(); + Member member = memberHelper.get(memberId); + + // 2. 조건 정보 저장 + //2-1. 공통 조건 저장 + member = memberDomainService.setCommonCondition(member, conditionCommand.getPurpose(), conditionCommand.getBudget(), conditionCommand.getMonthIncome()); + memberHelper.save(member); + + //실거주인 경우 + 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() + ); + } + //갭투자인 경우 + 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() + ); + } + // 3. 우선순위 저장 + // 4. 저장 + return true; + } + + private void convertStringToEnum(String nickname) { + if (memberHelper.getByNickname(nickname).isPresent()) { + String errorMessage = "Nickname is already used!"; + log.error(errorMessage); + throw new DomainException(errorMessage); + } + } + +} 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..c6ae4dba 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); } 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..17381c53 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,10 @@ 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); } 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..d2e734c0 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,20 @@ 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 null; + } + + @Override + public GapInvestment setGapInvestmentCondition(MemberId memberId, HopeGap hopeGap, InvestmentPlan investmentPlan, ApartmentSquare apartmentSquare, Household household, HouseType houseType, CommutingArea commutingArea, InfraNew infra, Environment environment) { + return null; + } } 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 index 5b254138..a6ee76c8 100644 --- 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 @@ -2,10 +2,7 @@ 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.*; 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; @@ -14,6 +11,8 @@ import lombok.Builder; import lombok.Getter; +import java.time.ZonedDateTime; + @Getter public class ActualLiving extends AggregateRoot { @@ -27,7 +26,8 @@ public class ActualLiving extends AggregateRoot { private Environment environment; @Builder - public ActualLiving(MemberId memberId, LivingPerson livingPerson, ChildrenPlan childrenPlan, CommutingArea commutingArea, Traffic traffic, SchoolDistrict schoolDistrict, InfraNew infra, Environment environment) { + 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; 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 index 1555e276..2eb3173f 100644 --- 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 @@ -25,7 +25,8 @@ public class GapInvestment extends AggregateRoot { private Environment environment; @Builder - public GapInvestment(MemberId memberId, HopeGap hopeGap, InvestmentPlan investmentPlan, ApartmentSquare apartmentSquare, Household household, HouseType houseType, CommutingArea commutingArea, InfraNew infra, Environment environment) { + 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; 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/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/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 { +} From 1d0421f3d00a46022e98c4385cdd6f4225f8a206 Mon Sep 17 00:00:00 2001 From: kyu-hyun Date: Tue, 29 Jul 2025 00:24:01 +0900 Subject: [PATCH 05/12] =?UTF-8?q?feat=20:=20=EC=9A=B0=EC=84=A0=EC=88=9C?= =?UTF-8?q?=EC=9C=84=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/domain/entity/MemberPriority.java | 29 ------------------- .../entity/MemberPriorityEntity.java | 22 -------------- 2 files changed, 51 deletions(-) delete mode 100644 member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/MemberPriority.java delete mode 100644 member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/MemberPriorityEntity.java diff --git a/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/MemberPriority.java b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/MemberPriority.java deleted file mode 100644 index 22fd1278..00000000 --- a/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/MemberPriority.java +++ /dev/null @@ -1,29 +0,0 @@ -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.member.domain.valueobject.AccusePenaltyPolicy; -import com.project.imdang.member.domain.valueobject.MemberPriorityId; -import lombok.Builder; -import lombok.Getter; - -import java.time.LocalDate; -import java.util.UUID; - -@Getter -public class MemberPriority extends AggregateRoot { - - private final MemberId memberId; - private final String first; - private final String second; - private final String third; - - @Builder - public MemberPriority(MemberPriorityId memberPriorityId, MemberId memberId, String first, String second, String third) { - setId(memberPriorityId); - this.memberId = memberId; - this.first = first; - this.second = second; - this.third = third; - } -} diff --git a/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/MemberPriorityEntity.java b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/MemberPriorityEntity.java deleted file mode 100644 index 464473c3..00000000 --- a/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/entity/MemberPriorityEntity.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.project.imdang.member.persistence.entity; - -import jakarta.persistence.*; -import lombok.*; -import java.util.UUID; - -@Builder -@AllArgsConstructor -@NoArgsConstructor(access = AccessLevel.PROTECTED) -@Getter @Setter -@Table(name = "member_priority") -@Entity -public class MemberPriorityEntity { - - @Id - private Long id; - - private UUID memberId; - private String first; - private String second; - private String third; -} From ae56fc9f53d6bc34a074f669d563e7d065fd7cb0 Mon Sep 17 00:00:00 2001 From: kyu-hyun Date: Tue, 29 Jul 2025 00:24:33 +0900 Subject: [PATCH 06/12] =?UTF-8?q?feat=20:=20=EC=9A=B0=EC=84=A0=EC=88=9C?= =?UTF-8?q?=EC=9C=84=20=EC=A0=80=EC=9E=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/ConditionCommandHandler.java | 39 +++++++++++++------ .../member/domain/MemberDomainService.java | 2 +- .../domain/MemberDomainServiceImpl.java | 10 ++++- .../member/domain/entity/ActualLiving.java | 15 ++++++- .../member/domain/entity/GapInvestment.java | 18 +++++++++ .../imdang/member/domain/entity/Member.java | 19 ++++++++- .../persistence/entity/MemberEntity.java | 4 ++ .../mapper/MemberPersistenceMapper.java | 6 +++ 8 files changed, 96 insertions(+), 17 deletions(-) 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 index 21f3bb5c..67ffa113 100644 --- 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 @@ -11,6 +11,7 @@ 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; @@ -33,12 +34,14 @@ public Boolean condition(ConditionCommand conditionCommand, PriorityCommand prio final MemberId memberId = conditionCommand.getMemberId(); Member member = memberHelper.get(memberId); - // 2. 조건 정보 저장 - //2-1. 공통 조건 저장 + // 2. 우선순위 저장 + member = memberDomainService.setPriority(member, priorityCommand.getFirstPriority(), priorityCommand.getSecondPriority(), priorityCommand.getThirdPriority()); + // 3. 조건 정보 저장 + //3-1. 공통 조건 저장 member = memberDomainService.setCommonCondition(member, conditionCommand.getPurpose(), conditionCommand.getBudget(), conditionCommand.getMonthIncome()); memberHelper.save(member); - //실거주인 경우 + //3-2.실거주인 경우 if (conditionCommand.getPurpose() == Purpose.LIVING) { ActualLivingConditionCommand actualLivingConditionCommand = (ActualLivingConditionCommand) conditionCommand; ActualLiving actualLiving = memberDomainService.setActualLivingCondition( @@ -51,6 +54,7 @@ public Boolean condition(ConditionCommand conditionCommand, PriorityCommand prio actualLivingConditionCommand.getInfra(), actualLivingConditionCommand.getEnvironment() ); + saveAC(actualLiving); } //갭투자인 경우 else if (conditionCommand.getPurpose() == Purpose.GAP_INVESTMENT){ @@ -66,18 +70,31 @@ else if (conditionCommand.getPurpose() == Purpose.GAP_INVESTMENT){ gapInvestmentConditionCommand.getInfra(), gapInvestmentConditionCommand.getEnvironment() ); + saveGC(gapInvestment); } - // 3. 우선순위 저장 - // 4. 저장 return true; } - private void convertStringToEnum(String nickname) { - if (memberHelper.getByNickname(nickname).isPresent()) { - String errorMessage = "Nickname is already used!"; - log.error(errorMessage); - throw new DomainException(errorMessage); - } + + 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-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 17381c53..e4eba1fd 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 @@ -29,6 +29,6 @@ public interface MemberDomainService { 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); } 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 d2e734c0..e084ff2e 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 @@ -62,11 +62,17 @@ public Member setCommonCondition(Member member, Purpose purpose, Budget budget, @Override public ActualLiving setActualLivingCondition(MemberId memberId, LivingPerson livingPerson, ChildrenPlan childrenPlan, SchoolDistrict schoolDistrict, Traffic traffic, CommutingArea commutingArea, InfraNew infra, Environment environment) { - return null; + 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 null; + 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; } } 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 index a6ee76c8..fc8d3a65 100644 --- 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 @@ -11,8 +11,6 @@ import lombok.Builder; import lombok.Getter; -import java.time.ZonedDateTime; - @Getter public class ActualLiving extends AggregateRoot { @@ -37,4 +35,17 @@ public ActualLiving(ActualLivingId id, MemberId memberId, LivingPerson livingPer 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 index 2eb3173f..9c881303 100644 --- 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 @@ -7,6 +7,10 @@ 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; @@ -37,4 +41,18 @@ public GapInvestment(GapInvestmentId id, MemberId memberId, HopeGap hopeGap, Inv 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 4ae9c690..f28cc09a 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 @@ -34,6 +34,10 @@ public class Member extends AggregateRoot { private Budget budget; private MonthIncome monthIncome; + private String firstPriority; + private String secondPriority; + private String thirdPriority; + public static Member createNewMember(String oAuthId, OAuthProvider oAuthProvider) { return Member.builder() .id(new MemberId(UUID.randomUUID())) @@ -62,7 +66,10 @@ public Member(MemberId id, PenaltyPeriod penaltyPeriod, Purpose purpose, Budget budget, - MonthIncome monthIncome) { + MonthIncome monthIncome, + String firstPriority, + String secondPriority, + String thirdPriority) { setId(id); this.nickname = nickname; this.birthDate = birthDate; @@ -80,6 +87,9 @@ public Member(MemberId id, this.purpose = purpose; this.budget = budget; this.monthIncome = monthIncome; + this.firstPriority = firstPriority; + this.secondPriority = secondPriority; + this.thirdPriority = thirdPriority; } public void join(String nickname, String birthDate, Gender gender, String deviceToken) { @@ -131,4 +141,11 @@ public Member setCommonCondition(Purpose purpose, Budget budget, MonthIncome mon 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; + } } 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 a92d788f..da1cdffe 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 @@ -62,6 +62,10 @@ public class MemberEntity { @Enumerated(EnumType.STRING) private MonthIncome monthIncome; + private String firstPriority; + private String secondPriority; + private String thirdPriority; + @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/MemberPersistenceMapper.java b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/mapper/MemberPersistenceMapper.java index 4aafb0e9..5c2e9aa7 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 @@ -29,6 +29,9 @@ public MemberEntity memberToMemberEntity(Member member) { .purpose(member.getPurpose()) .budget(member.getBudget()) .monthIncome(member.getMonthIncome()) + .firstPriority(member.getFirstPriority()) + .secondPriority(member.getSecondPriority()) + .thirdPriority(member.getThirdPriority()) .build(); } @@ -53,6 +56,9 @@ public Member memberEntityToMember(MemberEntity memberEntity) { .purpose(memberEntity.getPurpose()) .budget(memberEntity.getBudget()) .monthIncome(memberEntity.getMonthIncome()) + .firstPriority(memberEntity.getFirstPriority()) + .secondPriority(memberEntity.getSecondPriority()) + .thirdPriority(memberEntity.getThirdPriority()) .build(); } } From f6ed61edfafa43f20ac3b706faf2bfc9f7cde399 Mon Sep 17 00:00:00 2001 From: khlee Date: Tue, 29 Jul 2025 11:12:25 +0900 Subject: [PATCH 07/12] =?UTF-8?q?feat=20:=20enum=20value=20=EB=A7=A4?= =?UTF-8?q?=ED=95=91=20=ED=95=A8=EC=88=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common-domain-core/build.gradle | 3 +++ .../common/domain/valueobject/Budget.java | 17 +++++++++++++++ .../domain/valueobject/CommutingArea.java | 18 ++++++++++++++++ .../domain/valueobject/Environment.java | 17 +++++++++++++++ .../common/domain/valueobject/InfraNew.java | 19 ++++++++++++++++- .../domain/valueobject/MonthIncome.java | 17 +++++++++++++++ .../common/domain/valueobject/Purpose.java | 17 +++++++++++++++ .../gapInvestment/ApartmentSquare.java | 18 ++++++++++++++++ .../valueobject/gapInvestment/HopeGap.java | 17 +++++++++++++++ .../valueobject/gapInvestment/Household.java | 17 +++++++++++++++ .../gapInvestment/InvestmentPlan.java | 17 +++++++++++++++ .../valueobject/living/ChildrenPlan.java | 17 +++++++++++++++ .../valueobject/living/LivingPerson.java | 17 +++++++++++++++ .../valueobject/living/SchoolDistrict.java | 21 +++++++++++++++++-- .../domain/valueobject/living/Traffic.java | 21 +++++++++++++++++-- 15 files changed, 248 insertions(+), 5 deletions(-) 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 index 6717a754..6cf574db 100644 --- 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 @@ -1,8 +1,12 @@ 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 { @@ -10,4 +14,17 @@ public enum Budget { 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 index 2ec29a8f..cb960870 100644 --- 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 @@ -1,8 +1,13 @@ 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; + /** * 출퇴근 지역 */ @@ -13,4 +18,17 @@ public enum CommutingArea { 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 index aada729b..47f62f6e 100644 --- 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 @@ -1,8 +1,12 @@ 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; + /** * 환경 */ @@ -12,4 +16,17 @@ 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 index a604211f..15e5ef85 100644 --- 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 @@ -1,8 +1,12 @@ 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; + /** * 인프라 */ @@ -10,6 +14,19 @@ @RequiredArgsConstructor public enum InfraNew { MART("대형마트"), HOSPITAL("대형병원"), DEPARTMENT_STORE("백화점"), - CHILD_FACILITIY("아이_동반시설"), CULTURE_FACILITY("문화시설"); + 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 index 9127875b..2c649edc 100644 --- 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 @@ -1,8 +1,12 @@ 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 { @@ -10,4 +14,17 @@ public enum MonthIncome { 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 index 57e6e062..d2f46681 100644 --- 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 @@ -1,11 +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 index a295133c..3423c017 100644 --- 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 @@ -1,8 +1,13 @@ 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; + /** * 아파트 평수 */ @@ -12,4 +17,17 @@ 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 index e41fef36..4c3beb80 100644 --- 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 @@ -1,8 +1,12 @@ 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; + /** * 희망 갭 정도 */ @@ -13,4 +17,17 @@ public enum HopeGap { 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/Household.java b/common/common-domain/common-domain-core/src/main/java/com/project/imdang/common/domain/valueobject/gapInvestment/Household.java index 35e357c6..2aeafbdc 100644 --- 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 @@ -1,8 +1,12 @@ 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; + /** * 세대수 */ @@ -13,4 +17,17 @@ public enum Household { 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 index c864e846..ddf38b44 100644 --- 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 @@ -1,8 +1,12 @@ 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; + /** * 투자 계획 */ @@ -13,4 +17,17 @@ public enum InvestmentPlan { 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 index 02e90c05..4d2431b7 100644 --- 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 @@ -1,8 +1,12 @@ 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; + /** * 아이 유무 */ @@ -11,4 +15,17 @@ 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 index 8d1335e7..c70faf79 100644 --- 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 @@ -1,8 +1,12 @@ 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; + /** * 함께 살 인원 */ @@ -12,4 +16,17 @@ 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 index 8d9ca29d..9133ba4e 100644 --- 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 @@ -1,15 +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("안전한_통학로"); + 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 index 7566cfaa..dbe82c2e 100644 --- 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 @@ -1,16 +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("자차_출퇴근_편리"); + 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; + } } From 52d10ca3d061785966a0db6145ef52970479dd75 Mon Sep 17 00:00:00 2001 From: khlee Date: Tue, 29 Jul 2025 11:12:35 +0900 Subject: [PATCH 08/12] =?UTF-8?q?feat=20:=20enum=20value=20=EB=A7=A4?= =?UTF-8?q?=ED=95=91=20=ED=95=A8=EC=88=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../valueobject/gapInvestment/HouseType.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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 index 6555c10b..b0212f49 100644 --- 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 @@ -1,8 +1,12 @@ 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; + /** * 유형 */ @@ -11,4 +15,17 @@ 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; + } } From 541248b908740790e061df1d3e434e0e5931a88c Mon Sep 17 00:00:00 2001 From: khlee Date: Tue, 29 Jul 2025 11:12:52 +0900 Subject: [PATCH 09/12] =?UTF-8?q?fix=20:=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../imdang/member/application/rest/MemberController.java | 2 +- .../domain/dto/member/ActualLivingConditionCommand.java | 4 ++-- .../imdang/member/domain/dto/member/ConditionCommand.java | 5 +++-- .../domain/dto/member/GapInvestmentConditionCommand.java | 4 ++-- .../imdang/member/persistence/entity/ActualLivingEntity.java | 2 ++ .../member/persistence/entity/GapInvestmentEntity.java | 3 +++ 6 files changed, 13 insertions(+), 7 deletions(-) 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 844e197f..8b29b018 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 @@ -102,7 +102,7 @@ public ApiResponse join(@AuthenticationPrincipal UUID memberId, responseCode = "200", description = "조건/우선순위 설정 성공") }) - @PutMapping(CONDITION_MEMBER) + @PostMapping(CONDITION_MEMBER) public ApiResponse condition(@AuthenticationPrincipal UUID memberId, @RequestBody @Valid ConditionRequest conditionRequest) { 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 index 80b6f398..8cd557d7 100644 --- 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 @@ -6,8 +6,10 @@ 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; @@ -15,8 +17,6 @@ public class ActualLivingConditionCommand extends ConditionCommand { private Traffic traffic; private SchoolDistrict schoolDistrict; - @Builder - 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; 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 index 311c8ac1..3804211c 100644 --- 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 @@ -2,11 +2,12 @@ import com.project.imdang.common.domain.valueobject.*; import lombok.*; +import lombok.experimental.SuperBuilder; -@Builder +@SuperBuilder @AllArgsConstructor @Getter -@NoArgsConstructor(access = AccessLevel.PRIVATE) +@NoArgsConstructor(access = AccessLevel.PROTECTED) public class ConditionCommand { private MemberId memberId; private Purpose purpose; 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 index 31fece01..e76855a3 100644 --- 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 @@ -3,9 +3,11 @@ 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; @@ -14,8 +16,6 @@ public class GapInvestmentConditionCommand extends ConditionCommand { private Household household; private HouseType houseType; - @Builder - 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; 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 index 0ed5ae05..4e99c966 100644 --- 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 @@ -21,8 +21,10 @@ public class ActualLivingEntity { @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @Column(columnDefinition = "CHAR(36)") private UUID memberId; @Enumerated(EnumType.STRING) 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 index ecdd3657..4d212126 100644 --- 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 @@ -18,9 +18,12 @@ 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) From f27e9827945c0af2b4dfe58b0e9188d03286df2d Mon Sep 17 00:00:00 2001 From: khlee Date: Tue, 29 Jul 2025 11:13:27 +0900 Subject: [PATCH 10/12] =?UTF-8?q?test=20:=20=EC=A1=B0=EA=B1=B4/=EC=9A=B0?= =?UTF-8?q?=EC=84=A0=EC=88=9C=EC=9C=84=20=EC=84=A4=EC=A0=95=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20(=EC=8B=A4=EA=B1=B0=EC=A3=BC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../imdang/insight/InsightControllerTest.java | 2 +- .../imdang/member/MemberControllerTest.java | 52 ++++++++++++++++++- .../com/project/imdang/member/TestData.java | 3 +- 3 files changed, 53 insertions(+), 4 deletions(-) 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"; From 1de507ae3591202e1ed7f3c88d53b9e48c1b9057 Mon Sep 17 00:00:00 2001 From: khlee Date: Tue, 29 Jul 2025 11:29:14 +0900 Subject: [PATCH 11/12] =?UTF-8?q?feat:=20=EA=B4=80=EC=8B=AC=EB=8F=99?= =?UTF-8?q?=EB=84=A4=20=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ionRequest.java => OnboardingRequest.java} | 5 +- .../application/rest/MemberController.java | 60 ++++++++++--------- .../domain/MemberApplicationServiceImpl.java | 4 +- .../dto/member/InterestDistrictCommand.java | 10 ++++ .../member/ConditionCommandHandler.java | 20 ++++--- .../service/MemberApplicationService.java | 2 +- .../member/domain/MemberDomainService.java | 2 + .../domain/MemberDomainServiceImpl.java | 6 ++ .../imdang/member/domain/entity/Member.java | 11 +++- .../persistence/entity/MemberEntity.java | 2 + .../mapper/MemberPersistenceMapper.java | 2 + 11 files changed, 81 insertions(+), 43 deletions(-) rename member-service/member-application/src/main/java/com/project/imdang/member/application/dto/member/{ConditionRequest.java => OnboardingRequest.java} (91%) create mode 100644 member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/dto/member/InterestDistrictCommand.java diff --git a/member-service/member-application/src/main/java/com/project/imdang/member/application/dto/member/ConditionRequest.java b/member-service/member-application/src/main/java/com/project/imdang/member/application/dto/member/OnboardingRequest.java similarity index 91% rename from member-service/member-application/src/main/java/com/project/imdang/member/application/dto/member/ConditionRequest.java rename to member-service/member-application/src/main/java/com/project/imdang/member/application/dto/member/OnboardingRequest.java index 2cae3adb..6587bed5 100644 --- a/member-service/member-application/src/main/java/com/project/imdang/member/application/dto/member/ConditionRequest.java +++ b/member-service/member-application/src/main/java/com/project/imdang/member/application/dto/member/OnboardingRequest.java @@ -7,7 +7,7 @@ import com.project.imdang.common.domain.valueobject.living.SchoolDistrict; import com.project.imdang.common.domain.valueobject.living.Traffic; -public record ConditionRequest( +public record OnboardingRequest( Purpose purpose, Budget budget, MonthIncome monthIncome, @@ -25,6 +25,7 @@ public record ConditionRequest( Environment environment, String firstPriority, String secondPriority, - String thirdPriority + String thirdPriority, + 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 8b29b018..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 @@ -3,7 +3,7 @@ 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.ConditionRequest; +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.*; @@ -104,51 +104,55 @@ public ApiResponse join(@AuthenticationPrincipal UUID memberId, }) @PostMapping(CONDITION_MEMBER) public ApiResponse condition(@AuthenticationPrincipal UUID memberId, - @RequestBody @Valid ConditionRequest conditionRequest) { + @RequestBody @Valid OnboardingRequest onboardingRequest) { - Purpose purpose = conditionRequest.purpose(); + Purpose purpose = onboardingRequest.purpose(); ConditionCommand conditionCommand = null; //실거주 if (purpose == Purpose.LIVING) { conditionCommand = ActualLivingConditionCommand.builder() .memberId(new MemberId(memberId)) - .purpose(conditionRequest.purpose()) - .budget(conditionRequest.budget()) - .monthIncome(conditionRequest.monthIncome()) - .livingPerson(conditionRequest.livingPerson()) - .childrenPlan(conditionRequest.childrenPlan()) - .commutingArea(conditionRequest.commutingArea()) - .traffic(conditionRequest.traffic()) - .schoolDistrict(conditionRequest.schoolDistrict()) - .infra(conditionRequest.infra()) - .environment(conditionRequest.environment()) + .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(conditionRequest.purpose()) - .budget(conditionRequest.budget()) - .monthIncome(conditionRequest.monthIncome()) - .hopeGap(conditionRequest.hopeGap()) - .investmentPlan(conditionRequest.investmentPlan()) - .apartmentSquare(conditionRequest.apartmentSquare()) - .household(conditionRequest.household()) - .houseType(conditionRequest.houseType()) - .commutingArea(conditionRequest.commutingArea()) - .infra(conditionRequest.infra()) - .environment(conditionRequest.environment()) + .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(conditionRequest.firstPriority()) - .secondPriority(conditionRequest.secondPriority()) - .thirdPriority(conditionRequest.thirdPriority()) + .firstPriority(onboardingRequest.firstPriority()) + .secondPriority(onboardingRequest.secondPriority()) + .thirdPriority(onboardingRequest.thirdPriority()) .build(); - Boolean joinResult = memberApplicationService.condition(conditionCommand, priorityCommand); + //관심동네 + InterestDistrictCommand interestDistrictCommand = new InterestDistrictCommand(onboardingRequest.interestDistrict()); + + Boolean joinResult = memberApplicationService.condition(conditionCommand, priorityCommand, interestDistrictCommand); return ApiResponse.success(joinResult); } 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 5543cf08..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 @@ -61,7 +61,7 @@ public Boolean updateMember(MemberId memberId) { } @Override - public Boolean condition(ConditionCommand conditionCommand, PriorityCommand priorityCommand) { - return conditionCommandHandler.condition(conditionCommand, priorityCommand); + 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/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/handler/member/ConditionCommandHandler.java b/member-service/member-domain/member-application-service/src/main/java/com/project/imdang/member/domain/handler/member/ConditionCommandHandler.java index 67ffa113..fa93c8ec 100644 --- 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 @@ -4,10 +4,7 @@ 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.ActualLivingConditionCommand; -import com.project.imdang.member.domain.dto.member.ConditionCommand; -import com.project.imdang.member.domain.dto.member.GapInvestmentConditionCommand; -import com.project.imdang.member.domain.dto.member.PriorityCommand; +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; @@ -29,19 +26,24 @@ public class ConditionCommandHandler { private final ConditionRepository conditionRepository; @Transactional - public Boolean condition(ConditionCommand conditionCommand, PriorityCommand priorityCommand) { + 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. 조건 정보 저장 - //3-1. 공통 조건 저장 + + // 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); - //3-2.실거주인 경우 + //4-2. 실거주인 경우 if (conditionCommand.getPurpose() == Purpose.LIVING) { ActualLivingConditionCommand actualLivingConditionCommand = (ActualLivingConditionCommand) conditionCommand; ActualLiving actualLiving = memberDomainService.setActualLivingCondition( @@ -56,7 +58,7 @@ public Boolean condition(ConditionCommand conditionCommand, PriorityCommand prio ); saveAC(actualLiving); } - //갭투자인 경우 + //4-2. 갭투자인 경우 else if (conditionCommand.getPurpose() == Purpose.GAP_INVESTMENT){ GapInvestmentConditionCommand gapInvestmentConditionCommand = (GapInvestmentConditionCommand) conditionCommand; GapInvestment gapInvestment = memberDomainService.setGapInvestmentCondition( 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 c6ae4dba..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 @@ -17,5 +17,5 @@ public interface MemberApplicationService { Boolean accuseMember(MemberId memberId); Boolean updateMember(MemberId memberId); - Boolean condition(ConditionCommand conditionCommand, PriorityCommand priorityCommand); + Boolean condition(ConditionCommand conditionCommand, PriorityCommand priorityCommand, InterestDistrictCommand interestDistrictCommand); } 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 e4eba1fd..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 @@ -31,4 +31,6 @@ public interface MemberDomainService { 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 e084ff2e..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 @@ -75,4 +75,10 @@ public Member setPriority(Member member, String firstRank, String secondRank, St 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/Member.java b/member-service/member-domain/member-domain-core/src/main/java/com/project/imdang/member/domain/entity/Member.java index f28cc09a..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 @@ -38,6 +38,8 @@ public class Member extends AggregateRoot { 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())) @@ -69,7 +71,8 @@ public Member(MemberId id, MonthIncome monthIncome, String firstPriority, String secondPriority, - String thirdPriority) { + String thirdPriority, + String interestDistrict) { setId(id); this.nickname = nickname; this.birthDate = birthDate; @@ -90,6 +93,7 @@ public Member(MemberId id, this.firstPriority = firstPriority; this.secondPriority = secondPriority; this.thirdPriority = thirdPriority; + this.interestDistrict = interestDistrict; } public void join(String nickname, String birthDate, Gender gender, String deviceToken) { @@ -148,4 +152,9 @@ public Member setPriority(String firstPriority, String secondPriority, String th this.thirdPriority = thirdPriority; return this; } + + public Member setInterestDistrict(String interestDistrict) { + this.interestDistrict = interestDistrict; + return this; + } } 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 da1cdffe..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 @@ -66,6 +66,8 @@ public class MemberEntity { 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/MemberPersistenceMapper.java b/member-service/member-persistence/src/main/java/com/project/imdang/member/persistence/mapper/MemberPersistenceMapper.java index 5c2e9aa7..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 @@ -32,6 +32,7 @@ public MemberEntity memberToMemberEntity(Member member) { .firstPriority(member.getFirstPriority()) .secondPriority(member.getSecondPriority()) .thirdPriority(member.getThirdPriority()) + .interestDistrict(member.getInterestDistrict()) .build(); } @@ -59,6 +60,7 @@ public Member memberEntityToMember(MemberEntity memberEntity) { .firstPriority(memberEntity.getFirstPriority()) .secondPriority(memberEntity.getSecondPriority()) .thirdPriority(memberEntity.getThirdPriority()) + .interestDistrict(memberEntity.getInterestDistrict()) .build(); } } From cd8a13b53c90d4152e8c7e2551e3d3c2c82b76fe Mon Sep 17 00:00:00 2001 From: khlee Date: Tue, 29 Jul 2025 13:45:25 +0900 Subject: [PATCH 12/12] refactor --- .../application/constant/RequestPath.java | 2 +- .../valueobject/gapInvestment/HopeGap.java | 4 ++-- .../dto/member/OnboardingRequest.java | 20 +++++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) 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 31d75f32..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,7 +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 + "/condition"; + 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/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 index 4c3beb80..3ffdf3ed 100644 --- 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 @@ -13,8 +13,8 @@ @Getter @RequiredArgsConstructor public enum HopeGap { - UPPER_20("갭20% 이상"), UPPER_30("갭30% 이상"), UPPER_40("갭40% 이상"), UPPER_50("갭50% 이상"), - UPPER_60("갭60% 이상"), NO_MATTER("상관 없어요"); + UPPER_20("갭 20% 이상"), UPPER_30("갭 30% 이상"), UPPER_40("갭 40% 이상"), UPPER_50("갭 50% 이상"), + UPPER_60("갭 60% 이상"), NO_MATTER("상관 없어요"); private final String value; 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 index 6587bed5..1be5cbc0 100644 --- 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 @@ -6,26 +6,46 @@ 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 ) { }