66import com .fasterxml .jackson .databind .ObjectMapper ;
77import inha .gdgoc .domain .recruit .member .dto .request .ApplicationRequest ;
88import inha .gdgoc .domain .recruit .member .dto .request .RecruitMemberMemoRequest ;
9+ import inha .gdgoc .domain .recruit .member .dto .request .RecruitMemberRequest ;
910import inha .gdgoc .domain .recruit .member .dto .response .CheckEmailResponse ;
1011import inha .gdgoc .domain .recruit .member .dto .response .CheckPhoneNumberResponse ;
1112import inha .gdgoc .domain .recruit .member .dto .response .CheckStudentIdResponse ;
1920import inha .gdgoc .domain .recruit .member .repository .RecruitMemberMemoRepository ;
2021import inha .gdgoc .domain .recruit .member .repository .RecruitMemberRepository ;
2122import inha .gdgoc .global .util .SemesterCalculator ;
23+ import java .util .HashMap ;
2224import java .util .List ;
25+ import java .util .Map ;
2326import lombok .RequiredArgsConstructor ;
2427import org .springframework .data .domain .Page ;
2528import org .springframework .data .domain .Pageable ;
@@ -36,12 +39,24 @@ public class RecruitMemberService {
3639 private final SemesterCalculator semesterCalculator ;
3740
3841 @ Transactional
39- public void addRecruitMember (ApplicationRequest applicationRequest ) {
40- RecruitMember member = applicationRequest .getMember ()
42+ public void addRecruitMember (Map <String , Object > requestPayload ) {
43+ RecruitMemberRequest memberRequest ;
44+ Map <String , Object > answers ;
45+
46+ if (requestPayload .containsKey ("member" )) {
47+ ApplicationRequest applicationRequest = objectMapper .convertValue (requestPayload , ApplicationRequest .class );
48+ memberRequest = applicationRequest .getMember ();
49+ answers = normalizeAnswers (applicationRequest .getAnswers ());
50+ } else {
51+ memberRequest = buildMemberFromNumberedPayload (requestPayload );
52+ answers = buildAnswersFromNumberedPayload (requestPayload );
53+ }
54+
55+ RecruitMember member = memberRequest
4156 .toEntity (semesterCalculator .currentSemester ());
4257 recruitMemberRepository .save (member );
4358
44- List <Answer > answers = applicationRequest . getAnswers () .entrySet ().stream ()
59+ List <Answer > answerEntities = answers .entrySet ().stream ()
4560 .map (entry -> {
4661 try {
4762 // Object → JSON String 변환
@@ -54,7 +69,7 @@ public void addRecruitMember(ApplicationRequest applicationRequest) {
5469 })
5570 .toList ();
5671
57- answerRepository .saveAll (answers );
72+ answerRepository .saveAll (answerEntities );
5873 }
5974
6075 @ Transactional
@@ -123,4 +138,64 @@ private String normalizePhoneNumber(String phoneNumber) {
123138 return phoneNumber .replaceAll ("[^0-9]" , "" );
124139 }
125140
141+ @ SuppressWarnings ("unchecked" )
142+ private RecruitMemberRequest buildMemberFromNumberedPayload (Map <String , Object > payload ) {
143+ Map <String , Object > step2 = asMap (payload .get ("2" ));
144+ Map <String , Object > step3 = asMap (payload .get ("3" ));
145+ Map <String , Object > step4 = asMap (payload .get ("4" ));
146+ Map <String , Object > step5 = asMap (payload .get ("5" ));
147+ Map <String , Object > step11 = asMap (payload .get ("11" ));
148+
149+ Map <String , Object > member = new HashMap <>();
150+ member .put ("name" , step2 .get ("name" ));
151+ member .put ("studentId" , step2 .get ("studentId" ));
152+ member .put ("enrolledClassification" , step2 .get ("enrolledClassification" ));
153+ member .put ("phoneNumber" , step3 .get ("phoneNumber" ));
154+ member .put ("email" , step4 .get ("email" ));
155+ member .put ("gender" , step4 .get ("gender" ));
156+ member .put ("birth" , step4 .get ("birth" ));
157+ member .put ("major" , step5 .get ("major" ));
158+ member .put ("isPayed" , step11 .getOrDefault ("isPayed" , false ));
159+
160+ return objectMapper .convertValue (member , RecruitMemberRequest .class );
161+ }
162+
163+ private Map <String , Object > buildAnswersFromNumberedPayload (Map <String , Object > payload ) {
164+ Map <String , Object > step8 = asMap (payload .get ("8" ));
165+ Map <String , Object > step9 = asMap (payload .get ("9" ));
166+ Map <String , Object > step10 = asMap (payload .get ("10" ));
167+
168+ Map <String , Object > answers = new HashMap <>();
169+ putIfPresent (answers , "gdgInterest" , step8 .get ("gdgInterest" ));
170+ putIfPresent (answers , "gdgWish" , step9 .get ("gdgWish" ));
171+ putIfPresent (answers , "gdgFeedback" , step10 .get ("gdgFeedback" ));
172+
173+ return answers ;
174+ }
175+
176+ @ SuppressWarnings ("unchecked" )
177+ private Map <String , Object > asMap (Object value ) {
178+ if (value instanceof Map <?, ?> raw ) {
179+ return (Map <String , Object >) raw ;
180+ }
181+ return Map .of ();
182+ }
183+
184+ private void putIfPresent (Map <String , Object > target , String key , Object value ) {
185+ if (value != null ) {
186+ target .put (key , value );
187+ }
188+ }
189+
190+ private Map <String , Object > normalizeAnswers (Map <String , Object > rawAnswers ) {
191+ Map <String , Object > answers = new HashMap <>();
192+ if (rawAnswers == null ) {
193+ return answers ;
194+ }
195+ putIfPresent (answers , "gdgInterest" , rawAnswers .get ("gdgInterest" ));
196+ putIfPresent (answers , "gdgWish" , rawAnswers .get ("gdgWish" ));
197+ putIfPresent (answers , "gdgFeedback" , rawAnswers .get ("gdgFeedback" ));
198+ return answers ;
199+ }
200+
126201}
0 commit comments