Skip to content

Commit c8f77c6

Browse files
committed
[Feat] 프로젝트 생성 후 매핑 변경 시 기존 DB 업데이트
1 parent 7a974a4 commit c8f77c6

2 files changed

Lines changed: 26 additions & 0 deletions

File tree

src/main/java/com/campusform/server/project/application/service/ProjectService.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
import java.util.ArrayList;
44
import java.util.List;
5+
import java.util.Map;
56
import java.util.stream.Collectors;
67

8+
import com.campusform.server.recruiting.domain.model.applicant.Applicant;
9+
710
import org.springframework.context.ApplicationEventPublisher;
811
import org.springframework.stereotype.Service;
912
import org.springframework.transaction.annotation.Transactional;
@@ -24,6 +27,7 @@
2427
import com.campusform.server.project.domain.exception.TokenNotFoundException;
2528
import com.campusform.server.project.domain.model.setting.Project;
2629
import com.campusform.server.project.domain.model.setting.ProjectAdmin;
30+
import com.campusform.server.project.domain.model.setting.ProjectValueMapping;
2731
import com.campusform.server.project.domain.repository.ProjectRepository;
2832
import com.campusform.server.recruiting.domain.repository.ApplicantRepository;
2933
import com.campusform.server.recruiting.infrastructure.persistence.ApplicantJpaRepository;
@@ -303,6 +307,7 @@ public PositionValuesResponse getStoredPositionValues(Long projectId, Long userI
303307

304308
/**
305309
* 포지션 값 치환 규칙 추가·갱신 (기존 매핑 유지, 요청 항목은 동일 fromValue면 toValue만 갱신)
310+
* 변경된 규칙을 적용해 해당 프로젝트 지원자들의 position 컬럼도 함께 갱신한다.
306311
*/
307312
@Transactional
308313
public void updatePositionValueMappings(Long projectId, Long userId,
@@ -316,6 +321,20 @@ public void updatePositionValueMappings(Long projectId, Long userId,
316321
project.addOrUpdateValueMapping(item.getFromValue(), item.getToValue()));
317322
}
318323
projectRepository.save(project);
324+
325+
// 치환 규칙 적용: 시트 원시값(fromValue)을 가진 지원자 → toValue로 DB 갱신
326+
Map<String, String> positionMapping = project.getValueMappings().stream()
327+
.collect(Collectors.toMap(ProjectValueMapping::getFromValue, ProjectValueMapping::getToValue,
328+
(existing, replacement) -> existing));
329+
List<Applicant> applicants = applicantRepository.findByProjectId(projectId);
330+
for (Applicant applicant : applicants) {
331+
if (applicant.getPosition() == null) continue;
332+
String mapped = positionMapping.get(applicant.getPosition().trim());
333+
if (mapped != null && !mapped.equals(applicant.getPosition())) {
334+
applicant.updatePosition(mapped);
335+
applicantRepository.save(applicant);
336+
}
337+
}
319338
}
320339

321340
private void validateCreateProjectRequest(CreateProjectRequest request) {

src/main/java/com/campusform/server/recruiting/domain/model/applicant/Applicant.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,13 @@ public void updateScreeningResult(RecruitmentStage stage, ScreeningResult status
150150
stage));
151151
}
152152

153+
/**
154+
* 포지션 값 치환 규칙 변경 시 지원자 position만 갱신 (다른 필드·추가답변 유지)
155+
*/
156+
public void updatePosition(String position) {
157+
this.position = position != null ? position.trim() : null;
158+
}
159+
153160
/**
154161
* 지원자 정보를 업데이트합니다.
155162
*

0 commit comments

Comments
 (0)