44import static inha .gdgoc .domain .recruit .member .exception .RecruitMemberErrorCode .RECRUIT_MEMBER_ALREADY_APPLIED ;
55
66import com .fasterxml .jackson .databind .ObjectMapper ;
7+ import inha .gdgoc .domain .resource .enums .S3KeyType ;
8+ import inha .gdgoc .domain .resource .service .S3Service ;
79import inha .gdgoc .domain .recruit .member .dto .request .ApplicationRequest ;
810import inha .gdgoc .domain .recruit .member .dto .request .RecruitMemberMemoRequest ;
911import inha .gdgoc .domain .recruit .member .dto .request .RecruitMemberRequest ;
2830import org .springframework .data .domain .Pageable ;
2931import org .springframework .stereotype .Service ;
3032import org .springframework .transaction .annotation .Transactional ;
33+ import org .springframework .web .multipart .MultipartFile ;
3134
3235@ RequiredArgsConstructor
3336@ Service
@@ -37,9 +40,10 @@ public class RecruitMemberService {
3740 private final AnswerRepository answerRepository ;
3841 private final ObjectMapper objectMapper ;
3942 private final SemesterCalculator semesterCalculator ;
43+ private final S3Service s3Service ;
4044
4145 @ Transactional
42- public void addRecruitMember (Map <String , Object > requestPayload ) {
46+ public void addRecruitMember (Map <String , Object > requestPayload , MultipartFile file ) {
4347 RecruitMemberRequest memberRequest ;
4448 Map <String , Object > answers ;
4549
@@ -52,6 +56,12 @@ public void addRecruitMember(Map<String, Object> requestPayload) {
5256 answers = buildAnswersFromNumberedPayload (requestPayload );
5357 }
5458
59+ if (file != null && !file .isEmpty ()) {
60+ String key = uploadProofFile (file );
61+ String proofFileUrl = s3Service .getS3FileUrl (key );
62+ answers .put ("proofFileUrl" , proofFileUrl );
63+ }
64+
5565 RecruitMember member = memberRequest
5666 .toEntity (semesterCalculator .currentSemester ());
5767 recruitMemberRepository .save (member );
@@ -72,6 +82,14 @@ public void addRecruitMember(Map<String, Object> requestPayload) {
7282 answerRepository .saveAll (answerEntities );
7383 }
7484
85+ private String uploadProofFile (MultipartFile file ) {
86+ try {
87+ return s3Service .upload (0L , S3KeyType .study , file );
88+ } catch (Exception e ) {
89+ throw new RuntimeException ("증빙 파일 업로드 중 오류가 발생했습니다." , e );
90+ }
91+ }
92+
7593 @ Transactional
7694 public void addRecruitMemberMemo (RecruitMemberMemoRequest recruitMemberMemoRequest ) {
7795 String cleanPhone = normalizePhoneNumber (recruitMemberMemoRequest .getPhoneNumber ());
@@ -144,7 +162,7 @@ private RecruitMemberRequest buildMemberFromNumberedPayload(Map<String, Object>
144162 Map <String , Object > step3 = asMap (payload .get ("3" ));
145163 Map <String , Object > step4 = asMap (payload .get ("4" ));
146164 Map <String , Object > step5 = asMap (payload .get ("5" ));
147- Map <String , Object > step11 = asMap (payload .get ("11 " ));
165+ Map <String , Object > step6 = asMap (payload .get ("6 " ));
148166
149167 Map <String , Object > member = new HashMap <>();
150168 member .put ("name" , step2 .get ("name" ));
@@ -155,20 +173,18 @@ private RecruitMemberRequest buildMemberFromNumberedPayload(Map<String, Object>
155173 member .put ("gender" , step4 .get ("gender" ));
156174 member .put ("birth" , step4 .get ("birth" ));
157175 member .put ("major" , step5 .get ("major" ));
158- member .put ("isPayed" , step11 .getOrDefault ("isPayed" , false ));
176+ member .put ("isPayed" , step6 .getOrDefault ("isPayed" , false ));
159177
160178 return objectMapper .convertValue (member , RecruitMemberRequest .class );
161179 }
162180
163181 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" ));
182+ Map <String , Object > step6 = asMap (payload .get ("6" ));
167183
168184 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" ));
185+ putIfPresent (answers , "gdgInterest" , step6 .get ("gdgInterest" ));
186+ putIfPresent (answers , "gdgWish" , step6 .get ("gdgWish" ));
187+ putIfPresent (answers , "gdgFeedback" , step6 .get ("gdgFeedback" ));
172188
173189 return answers ;
174190 }
0 commit comments