Skip to content

Commit 6b60d4c

Browse files
authored
Merge pull request #217 from choiseoji/main
Feat: Application 락 적용
2 parents 0ff17c6 + 454d34f commit 6b60d4c

3 files changed

Lines changed: 21 additions & 3 deletions

File tree

src/main/java/ceos/backend/domain/application/helper/ApplicationHelper.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,15 @@ public Application getApplicationById(Long id) {
5757
});
5858
}
5959

60+
public Application getApplicationByIdForUpdate(Long id) {
61+
return applicationRepository
62+
.findByIdWithPessimisticLock(id)
63+
.orElseThrow(
64+
() -> {
65+
throw ApplicantNotFound.EXCEPTION;
66+
});
67+
}
68+
6069
public Application getApplicationByUuidAndEmail(String uuid, String email) {
6170
return applicationRepository
6271
.findByUuidAndEmail(uuid, email)

src/main/java/ceos/backend/domain/application/repository/ApplicationRepository.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
import ceos.backend.domain.application.domain.Pass;
66
import ceos.backend.global.common.entity.Part;
77
import java.util.Optional;
8+
9+
import jakarta.persistence.LockModeType;
810
import org.springframework.data.domain.Page;
911
import org.springframework.data.domain.PageRequest;
1012
import org.springframework.data.jpa.repository.JpaRepository;
13+
import org.springframework.data.jpa.repository.Lock;
1114
import org.springframework.data.jpa.repository.Query;
1215
import org.springframework.data.repository.query.Param;
1316

@@ -63,4 +66,10 @@ Page<Application> findAllByPartAndDocumentPassAndFinalPass(
6366
@Param("convertedDocPass") Pass convertedDocPass,
6467
@Param("convertedFinalPass") Pass convertedFinalPass,
6568
PageRequest pageRequest);
69+
70+
71+
@Lock(LockModeType.PESSIMISTIC_WRITE)
72+
@Query("select a from Application a where a.id = :id")
73+
Optional<Application> findByIdWithPessimisticLock(@Param("id") Long id);
74+
6675
}

src/main/java/ceos/backend/domain/application/service/ApplicationService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ public GetInterviewTime getInterviewTime(Long applicationId) {
237237
public void updateInterviewTime(Long applicationId, UpdateInterviewTime updateInterviewTime) {
238238
recruitmentValidator.validateBetweenStartDateDocAndResultDateDoc(); // 기간 검증
239239
applicationValidator.validateExistingApplicant(applicationId); // 유저 검증
240-
final Application application = applicationHelper.getApplicationById(applicationId);
240+
final Application application = applicationHelper.getApplicationByIdForUpdate(applicationId);
241241
applicationValidator.validateDocumentPassStatus(application); // 서류 통과 검증
242242
final List<Interview> interviews = interviewRepository.findAll();
243243
final String duration =
@@ -262,15 +262,15 @@ public void updateDocumentPassStatus(Long applicationId, UpdatePassStatus update
262262
recruitmentValidator.validateBetweenStartDateDocAndResultDateDoc(); // 기간 검증
263263
applicationValidator.validateExistingApplicant(applicationId); // 유저 검증
264264

265-
final Application application = applicationHelper.getApplicationById(applicationId);
265+
final Application application = applicationHelper.getApplicationByIdForUpdate(applicationId);
266266
application.updateDocumentPass(updatePassStatus.getPass());
267267
}
268268

269269
@Transactional
270270
public void updateFinalPassStatus(Long applicationId, UpdatePassStatus updatePassStatus) {
271271
recruitmentValidator.validateBetweenResultDateDocAndResultDateFinal(); // 기간 검증
272272
applicationValidator.validateExistingApplicant(applicationId); // 유저 검증
273-
final Application application = applicationHelper.getApplicationById(applicationId);
273+
final Application application = applicationHelper.getApplicationByIdForUpdate(applicationId);
274274
applicationValidator.validateDocumentPassStatus(application); // 서류 통과 검증
275275

276276
application.updateFinalPass(updatePassStatus.getPass());

0 commit comments

Comments
 (0)