Skip to content

Commit dca6cf1

Browse files
authored
Merge pull request #299 from GDGoCINHA/develop
feat(recruit-member): align schema and answer mapping to frontend pay…
2 parents 99816f2 + 9485c8e commit dca6cf1

5 files changed

Lines changed: 92 additions & 17 deletions

File tree

src/main/java/inha/gdgoc/domain/recruit/member/controller/RecruitMemberController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import static inha.gdgoc.domain.recruit.member.controller.message.RecruitMemberMessage.PHONE_NUMBER_DUPLICATION_CHECK_SUCCESS;
1111
import static inha.gdgoc.domain.recruit.member.controller.message.RecruitMemberMessage.STUDENT_ID_DUPLICATION_CHECK_SUCCESS;
1212

13-
import inha.gdgoc.domain.recruit.member.dto.request.ApplicationRequest;
1413
import inha.gdgoc.domain.recruit.member.dto.request.CheckEmailRequest;
1514
import inha.gdgoc.domain.recruit.member.dto.request.CheckPhoneNumberRequest;
1615
import inha.gdgoc.domain.recruit.member.dto.request.CheckStudentIdRequest;
@@ -50,6 +49,7 @@
5049
import org.springframework.web.bind.annotation.RequestPart;
5150
import org.springframework.web.bind.annotation.RestController;
5251
import org.springframework.web.multipart.MultipartFile;
52+
import java.util.Map;
5353

5454
@Tag(name = "Recruit - Members", description = "리크루팅 지원자 관리 API")
5555
@RequestMapping("/api/v1/recruit/member")
@@ -69,7 +69,7 @@ public class RecruitMemberController {
6969

7070
@PostMapping(value = "/apply", consumes = MediaType.APPLICATION_JSON_VALUE)
7171
public ResponseEntity<ApiResponse<Void, Void>> recruitMemberAdd(
72-
@RequestBody ApplicationRequest applicationRequest
72+
@RequestBody Map<String, Object> applicationRequest
7373
) {
7474
recruitMemberService.addRecruitMember(applicationRequest);
7575

@@ -78,7 +78,7 @@ public ResponseEntity<ApiResponse<Void, Void>> recruitMemberAdd(
7878

7979
@PostMapping(value = "/apply", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
8080
public ResponseEntity<ApiResponse<Void, Void>> recruitMemberAddMultipart(
81-
@RequestPart("request") ApplicationRequest applicationRequest,
81+
@RequestPart("request") Map<String, Object> applicationRequest,
8282
@RequestPart(value = "file", required = false) MultipartFile file
8383
) {
8484
recruitMemberService.addRecruitMember(applicationRequest);

src/main/java/inha/gdgoc/domain/recruit/member/dto/request/RecruitMemberRequest.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,9 @@
1717
@Getter
1818
public class RecruitMemberRequest {
1919
private String name;
20-
private String grade;
2120
private String studentId;
2221
private String enrolledClassification;
2322
private String phoneNumber;
24-
private String nationality;
2523
private String email;
2624
private String gender;
2725
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd")
@@ -33,11 +31,9 @@ public RecruitMember toEntity(AdmissionSemester admissionSemester) {
3331
String cleanPhone = phoneNumber.replaceAll("[^0-9]", "");
3432
return RecruitMember.builder()
3533
.name(name)
36-
.grade(grade)
3734
.studentId(studentId)
3835
.enrolledClassification(EnrolledClassification.fromStatus(enrolledClassification))
3936
.phoneNumber(cleanPhone)
40-
.nationality(nationality)
4137
.email(email)
4238
.gender(Gender.fromType(gender))
4339
.birth(birth)

src/main/java/inha/gdgoc/domain/recruit/member/entity/RecruitMember.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ public class RecruitMember extends BaseEntity {
3838
@Column(name = "name", nullable = false)
3939
private String name;
4040

41-
@Column(name = "grade", nullable = false)
42-
private String grade;
43-
4441
@Column(name = "student_id", nullable = false, unique = true)
4542
private String studentId;
4643

@@ -51,9 +48,6 @@ public class RecruitMember extends BaseEntity {
5148
@Column(name = "phone_number", nullable = false, unique = true)
5249
private String phoneNumber;
5350

54-
@Column(name = "nationality", nullable = false)
55-
private String nationality;
56-
5751
@Column(name = "email", nullable = false)
5852
private String email;
5953

src/main/java/inha/gdgoc/domain/recruit/member/service/RecruitMemberService.java

Lines changed: 79 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.fasterxml.jackson.databind.ObjectMapper;
77
import inha.gdgoc.domain.recruit.member.dto.request.ApplicationRequest;
88
import inha.gdgoc.domain.recruit.member.dto.request.RecruitMemberMemoRequest;
9+
import inha.gdgoc.domain.recruit.member.dto.request.RecruitMemberRequest;
910
import inha.gdgoc.domain.recruit.member.dto.response.CheckEmailResponse;
1011
import inha.gdgoc.domain.recruit.member.dto.response.CheckPhoneNumberResponse;
1112
import inha.gdgoc.domain.recruit.member.dto.response.CheckStudentIdResponse;
@@ -19,7 +20,9 @@
1920
import inha.gdgoc.domain.recruit.member.repository.RecruitMemberMemoRepository;
2021
import inha.gdgoc.domain.recruit.member.repository.RecruitMemberRepository;
2122
import inha.gdgoc.global.util.SemesterCalculator;
23+
import java.util.HashMap;
2224
import java.util.List;
25+
import java.util.Map;
2326
import lombok.RequiredArgsConstructor;
2427
import org.springframework.data.domain.Page;
2528
import 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
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
ALTER TABLE IF EXISTS recruit_member
2+
DROP COLUMN IF EXISTS grade,
3+
DROP COLUMN IF EXISTS nationality;
4+
5+
ALTER TABLE IF EXISTS answer
6+
DROP COLUMN IF EXISTS gdg_user_motive,
7+
DROP COLUMN IF EXISTS gdg_user_story,
8+
DROP COLUMN IF EXISTS gdg_period,
9+
DROP COLUMN IF EXISTS gdg_route,
10+
DROP COLUMN IF EXISTS gdg_expect;

0 commit comments

Comments
 (0)