22
33import java .util .ArrayList ;
44import java .util .List ;
5+ import java .util .Map ;
56import java .util .stream .Collectors ;
67
8+ import com .campusform .server .recruiting .domain .model .applicant .Applicant ;
9+
710import org .springframework .context .ApplicationEventPublisher ;
811import org .springframework .stereotype .Service ;
912import org .springframework .transaction .annotation .Transactional ;
2427import com .campusform .server .project .domain .exception .TokenNotFoundException ;
2528import com .campusform .server .project .domain .model .setting .Project ;
2629import com .campusform .server .project .domain .model .setting .ProjectAdmin ;
30+ import com .campusform .server .project .domain .model .setting .ProjectValueMapping ;
2731import com .campusform .server .project .domain .repository .ProjectRepository ;
2832import com .campusform .server .recruiting .domain .repository .ApplicantRepository ;
2933import 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 ) {
0 commit comments