Skip to content

Commit 46517ae

Browse files
authored
Merge pull request #106 from JonghyeokNam/develop
[refactor] 설문조사 나머지 추가, 자기소개 추가, 다중 선택 가능으로 변경
2 parents cfabe69 + 0f1d6cd commit 46517ae

13 files changed

Lines changed: 345 additions & 68 deletions

File tree

src/main/java/com/arom/with_travel/domain/member/service/MemberSignupService.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,20 +60,14 @@ public MemberSignupResponseDto registerWithSurvey(String email,
6060
// surveyRepository.save(survey);
6161
// });
6262

63-
SurveyRequestDto s = req.getSurvey(); // 단일 설문
63+
SurveyRequestDto s = req.getSurvey();
6464
Survey survey = surveyRepository.findByMemberIdAndIsDeletedFalse(member.getId())
6565
.map(existing -> {
66-
existing.update(
67-
s.getEnergyLevel()
68-
// 이후 섹션 늘리면 여기에 추가
69-
);
66+
existing.update(s);
7067
return existing;
7168
})
72-
.orElseGet(() -> Survey.create(
73-
member,
74-
s.getEnergyLevel()
75-
// 이후 섹션 늘리면 여기에 추가
76-
));
69+
.orElseGet(() -> Survey.create(member, s));
70+
7771
surveyRepository.save(survey);
7872

7973
member.markAdditionalDataChecked();
Lines changed: 88 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
package com.arom.with_travel.domain.survey;
22

33
import com.arom.with_travel.domain.member.Member;
4-
import com.arom.with_travel.domain.survey.enums.EnergyLevel;
4+
import com.arom.with_travel.domain.survey.dto.request.SurveyRequestDto;
5+
import com.arom.with_travel.domain.survey.enums.*;
56
import com.arom.with_travel.global.entity.BaseEntity;
67
import jakarta.persistence.*;
7-
import jakarta.validation.constraints.NotNull;
88
import lombok.AccessLevel;
99
import lombok.Getter;
1010
import lombok.NoArgsConstructor;
1111
import org.hibernate.annotations.SQLDelete;
1212
import org.hibernate.annotations.SQLRestriction;
1313

14+
import java.util.HashSet;
15+
import java.util.Set;
16+
1417
@Getter
1518
@Entity
1619
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@@ -26,18 +29,94 @@ public class Survey extends BaseEntity {
2629
@JoinColumn(name = "member_id", nullable = false)
2730
private Member member;
2831

29-
@NotNull
32+
@ElementCollection(fetch = FetchType.LAZY)
33+
@CollectionTable(name = "survey_energy_levels", joinColumns = @JoinColumn(name = "survey_id"))
34+
@Column(name = "energy_level", length = 50)
35+
@Enumerated(EnumType.STRING)
36+
private Set<EnergyLevel> energyLevels = new HashSet<>();
37+
38+
@ElementCollection(fetch = FetchType.LAZY)
39+
@CollectionTable(name = "survey_travel_goals", joinColumns = @JoinColumn(name = "survey_id"))
40+
@Column(name = "travel_goal", length = 50)
41+
@Enumerated(EnumType.STRING)
42+
private Set<TravelGoal> travelGoals = new HashSet<>();
43+
44+
@ElementCollection(fetch = FetchType.LAZY)
45+
@CollectionTable(name = "survey_travel_paces", joinColumns = @JoinColumn(name = "survey_id"))
46+
@Column(name = "travel_pace", length = 50)
47+
@Enumerated(EnumType.STRING)
48+
private Set<TravelPace> travelPaces = new HashSet<>();
49+
50+
@ElementCollection(fetch = FetchType.LAZY)
51+
@CollectionTable(name = "survey_comm_styles", joinColumns = @JoinColumn(name = "survey_id"))
52+
@Column(name = "comm_style", length = 50)
53+
@Enumerated(EnumType.STRING)
54+
private Set<CommStyle> commStyles = new HashSet<>();
55+
56+
@ElementCollection(fetch = FetchType.LAZY)
57+
@CollectionTable(name = "survey_personalities", joinColumns = @JoinColumn(name = "survey_id"))
58+
@Column(name = "personality", length = 50)
59+
@Enumerated(EnumType.STRING)
60+
private Set<RecordTendency> recordTendencies = new HashSet<>();
61+
62+
@ElementCollection(fetch = FetchType.LAZY)
63+
@CollectionTable(name = "survey_companion_styles", joinColumns = @JoinColumn(name = "survey_id"))
64+
@Column(name = "companion_style", length = 50)
65+
@Enumerated(EnumType.STRING)
66+
private Set<CompanionStyle> companionStyles = new HashSet<>();
67+
68+
@ElementCollection(fetch = FetchType.LAZY)
69+
@CollectionTable(name = "survey_spend_patterns", joinColumns = @JoinColumn(name = "survey_id"))
70+
@Column(name = "spend_pattern", length = 50)
3071
@Enumerated(EnumType.STRING)
31-
@Column(name = "energy_level", nullable = false, length = 50)
32-
private EnergyLevel energyLevel;
72+
private Set<SpendPattern> spendPatterns = new HashSet<>();
3373

34-
private Survey(Member member, EnergyLevel energyLevel) {
35-
this.energyLevel = energyLevel;
74+
// @Column(name = "introduction", length = 1000)
75+
// private String introduction;
76+
77+
// ---- 생성/수정 로직 ----
78+
private Survey(Member member,
79+
Set<EnergyLevel> energyLevels,
80+
Set<TravelGoal> travelGoals,
81+
Set<TravelPace> travelPaces,
82+
Set<CommStyle> commStyles,
83+
Set<RecordTendency> recordTendencies,
84+
Set<CompanionStyle> companionStyles,
85+
Set<SpendPattern> spendPatterns) {
86+
this.energyLevels = safe(energyLevels);
87+
this.travelGoals = safe(travelGoals);
88+
this.travelPaces = safe(travelPaces);
89+
this.commStyles = safe(commStyles);
90+
this.recordTendencies = safe(recordTendencies);
91+
this.companionStyles= safe(companionStyles);
92+
this.spendPatterns = safe(spendPatterns);
93+
// this.introduction = introduction;
3694
linkMember(member);
3795
}
3896

39-
public static Survey create(Member member, EnergyLevel energyLevel) {
40-
return new Survey(member, energyLevel);
97+
public static Survey create(Member member, SurveyRequestDto dto){
98+
return new Survey(
99+
member,
100+
dto.getEnergyLevels(), dto.getTravelGoals(), dto.getTravelPaces(),
101+
dto.getCommStyles(), dto.getRecordTendencies(), dto.getCompanionStyles(),
102+
dto.getSpendPatterns()
103+
// dto.getIntroduction()
104+
);
105+
}
106+
107+
public void update(SurveyRequestDto dto){
108+
this.energyLevels = safe(dto.getEnergyLevels());
109+
this.travelGoals = safe(dto.getTravelGoals());
110+
this.travelPaces = safe(dto.getTravelPaces());
111+
this.commStyles = safe(dto.getCommStyles());
112+
this.recordTendencies = safe(dto.getRecordTendencies());
113+
this.companionStyles = safe(dto.getCompanionStyles());
114+
this.spendPatterns = safe(dto.getSpendPatterns());
115+
// this.introduction = dto.getIntroduction();
116+
}
117+
118+
private <T> Set<T> safe(Set<T> in){
119+
return (in == null) ? new HashSet<>() : new HashSet<>(in);
41120
}
42121

43122
private void linkMember(Member newMember) {
@@ -49,8 +128,4 @@ private void linkMember(Member newMember) {
49128
newMember.setSurvey(this);
50129
}
51130
}
52-
53-
public void update(EnergyLevel energyLevel) {
54-
this.energyLevel = energyLevel;
55-
}
56131
}
Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,29 @@
11
package com.arom.with_travel.domain.survey.dto.request;
22

3-
import com.arom.with_travel.domain.survey.enums.EnergyLevel;
3+
import com.arom.with_travel.domain.survey.enums.*;
44
import jakarta.validation.constraints.NotNull;
5+
import jakarta.validation.constraints.Size;
56
import lombok.AllArgsConstructor;
67
import lombok.Builder;
78
import lombok.Getter;
89
import lombok.NoArgsConstructor;
910

11+
import java.util.Set;
12+
1013
@Getter
1114
@NoArgsConstructor
1215
@AllArgsConstructor
1316
@Builder
1417
public class SurveyRequestDto {
1518

16-
@NotNull(message = "energyLevel은 필수입니다.")
17-
private EnergyLevel energyLevel;
18-
// @NotNull TravelGoal travelGoal,
19-
// @NotNull TravelPace travelPace,
20-
// @NotNull CommStyle commStyle,
21-
// @NotNull Personality personality,
22-
// @NotNull CompanionStyle companionStyle,
23-
// @NotNull SpendPattern spendPattern
19+
private Set<EnergyLevel> energyLevels;
20+
private Set<TravelGoal> travelGoals;
21+
private Set<TravelPace> travelPaces;
22+
private Set<CommStyle> commStyles;
23+
private Set<RecordTendency> recordTendencies;
24+
private Set<CompanionStyle> companionStyles;
25+
private Set<SpendPattern> spendPatterns;
26+
27+
// @Size(max = 1000, message = "자기소개는 최대 1000자입니다.")
28+
// private String introduction;
2429
}
Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package com.arom.with_travel.domain.survey.dto.response;
22

33
import com.arom.with_travel.domain.survey.Survey;
4-
import com.arom.with_travel.domain.survey.enums.EnergyLevel;
4+
import com.arom.with_travel.domain.survey.enums.*;
55
import lombok.AllArgsConstructor;
66
import lombok.Builder;
77
import lombok.Getter;
88
import lombok.NoArgsConstructor;
99

1010
import java.util.List;
11+
import java.util.Set;
1112

1213
@Getter
1314
@NoArgsConstructor
@@ -17,22 +18,28 @@ public class SurveyResponseDto {
1718
private Long surveyId;
1819
private Long memberId;
1920

20-
private EnergyLevel energyLevel;
21-
// 나중에 추가되면 주석 해제
22-
// private TravelGoal travelGoal;
23-
// private TravelPace travelPace;
24-
// private CommStyle commStyle;
25-
// private Personality personality;
26-
// private CompanionStyle companionStyle;
27-
// private SpendPattern spendPattern;
21+
private Set<EnergyLevel> energyLevels;
22+
private Set<TravelGoal> travelGoals;
23+
private Set<TravelPace> travelPaces;
24+
private Set<CommStyle> commStyles;
25+
private Set<RecordTendency> recordTendencies;
26+
private Set<CompanionStyle> companionStyles;
27+
private Set<SpendPattern> spendPatterns;
28+
29+
// private String introduction;
2830

2931
public static SurveyResponseDto from(Survey s) {
3032
return SurveyResponseDto.builder()
3133
.surveyId(s.getId())
3234
.memberId(s.getMember().getId())
33-
.energyLevel(s.getEnergyLevel())
34-
// .travelGoal(s.getTravelGoal())
35-
// ...
35+
.energyLevels(s.getEnergyLevels())
36+
.travelGoals(s.getTravelGoals())
37+
.travelPaces(s.getTravelPaces())
38+
.commStyles(s.getCommStyles())
39+
.recordTendencies(s.getRecordTendencies())
40+
.companionStyles(s.getCompanionStyles())
41+
.spendPatterns(s.getSpendPatterns())
42+
// .introduction(s.getIntroduction())
3643
.build();
3744
}
3845
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.arom.with_travel.domain.survey.enums;
2+
3+
import com.arom.with_travel.global.exception.BaseException;
4+
import com.arom.with_travel.global.exception.error.ErrorCode;
5+
import com.fasterxml.jackson.annotation.JsonCreator;
6+
import com.fasterxml.jackson.annotation.JsonValue;
7+
import lombok.AllArgsConstructor;
8+
9+
import java.util.Arrays;
10+
11+
@AllArgsConstructor
12+
public enum CommStyle implements SurveyEnum {
13+
14+
TALKATIVE("TALKATIVE", "#수다쟁이"),
15+
QUIET("QUIET", "#조용한편"),
16+
REACTION_KING("REACTION_KING", "#리액션킹"),
17+
RESPECT_ME_TIME("RESPECT_ME_TIME", "#개인시간존중");
18+
19+
private final String code;
20+
private final String label;
21+
22+
@Override public String getCode(){return code;}
23+
@Override public String getLabel(){return label;}
24+
25+
@JsonValue
26+
public String json(){return code;}
27+
28+
@JsonCreator
29+
public static CommStyle from(String value){
30+
return Arrays.stream(values())
31+
.filter(v -> v.name().equalsIgnoreCase(value) || v.getCode().equalsIgnoreCase(value))
32+
.findFirst()
33+
.orElseThrow(() -> BaseException.from(ErrorCode.INVALID_SURVEY_TRAVELGOAL));
34+
}
35+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.arom.with_travel.domain.survey.enums;
2+
3+
import com.arom.with_travel.global.exception.BaseException;
4+
import com.arom.with_travel.global.exception.error.ErrorCode;
5+
import com.fasterxml.jackson.annotation.JsonCreator;
6+
import com.fasterxml.jackson.annotation.JsonValue;
7+
import lombok.AllArgsConstructor;
8+
9+
import java.util.Arrays;
10+
11+
@AllArgsConstructor
12+
public enum CompanionStyle implements SurveyEnum {
13+
14+
LEADER("LEADER", "#리더발휘"),
15+
FOLLOWER("FOLLOWER", "#따라가는편"),
16+
OPINION_GIVER("OPINION_GIVER", "#의견제시"),
17+
MOOD_MAKER("MOOD_MAKER", "#분위기메이커");
18+
19+
private final String code;
20+
private final String label;
21+
22+
@Override public String getCode(){return code;}
23+
@Override public String getLabel(){return label;}
24+
25+
@JsonValue
26+
public String json(){return code;}
27+
28+
@JsonCreator
29+
public static CompanionStyle from(String value){
30+
return Arrays.stream(values())
31+
.filter(v -> v.name().equalsIgnoreCase(value) || v.getCode().equalsIgnoreCase(value))
32+
.findFirst()
33+
.orElseThrow(() -> BaseException.from(ErrorCode.INVALID_SURVEY_TRAVELGOAL));
34+
}
35+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.arom.with_travel.domain.survey.enums;
2+
3+
import com.arom.with_travel.global.exception.BaseException;
4+
import com.arom.with_travel.global.exception.error.ErrorCode;
5+
import com.fasterxml.jackson.annotation.JsonCreator;
6+
import com.fasterxml.jackson.annotation.JsonValue;
7+
import lombok.AllArgsConstructor;
8+
9+
import java.util.Arrays;
10+
11+
@AllArgsConstructor
12+
public enum RecordTendency implements SurveyEnum {
13+
14+
LIFE_SHOT_HUNTER("LIFE_SHOT_HUNTER", "#인생샷헌터"),
15+
CANT_SKIP_SELFIE("CANT_SKIP_SELFIE", "#셀카는못참지"),
16+
LOVE_RECORDING("LOVE_RECORDING", "#기록좋아"),
17+
EYES_ONLY("EYES_ONLY", "#눈으로만감상");
18+
19+
private final String code;
20+
private final String label;
21+
22+
@Override public String getCode(){return code;}
23+
@Override public String getLabel(){return label;}
24+
25+
@JsonValue
26+
public String json(){return code;}
27+
28+
@JsonCreator
29+
public static RecordTendency from(String value){
30+
return Arrays.stream(values())
31+
.filter(v -> v.name().equalsIgnoreCase(value) || v.getCode().equalsIgnoreCase(value))
32+
.findFirst()
33+
.orElseThrow(() -> BaseException.from(ErrorCode.INVALID_SURVEY_TRAVELGOAL));
34+
}
35+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.arom.with_travel.domain.survey.enums;
2+
3+
import com.arom.with_travel.global.exception.BaseException;
4+
import com.arom.with_travel.global.exception.error.ErrorCode;
5+
import com.fasterxml.jackson.annotation.JsonCreator;
6+
import com.fasterxml.jackson.annotation.JsonValue;
7+
import lombok.AllArgsConstructor;
8+
9+
import java.util.Arrays;
10+
11+
@AllArgsConstructor
12+
public enum SpendPattern implements SurveyEnum {
13+
14+
VALUE_FOR_MONEY("VALUE_FOR_MONEY", "#가성비추구"),
15+
VALUE_INVESTING("VALUE_INVESTING", "#가치투자"),
16+
FLEX("FLEX", "#플렉스");
17+
18+
private final String code;
19+
private final String label;
20+
21+
@Override public String getCode(){return code;}
22+
@Override public String getLabel(){return label;}
23+
24+
@JsonValue
25+
public String json(){return code;}
26+
27+
@JsonCreator
28+
public static SpendPattern from(String value){
29+
return Arrays.stream(values())
30+
.filter(v -> v.name().equalsIgnoreCase(value) || v.getCode().equalsIgnoreCase(value))
31+
.findFirst()
32+
.orElseThrow(() -> BaseException.from(ErrorCode.INVALID_SURVEY_TRAVELGOAL));
33+
}
34+
}

0 commit comments

Comments
 (0)