Skip to content

Commit

Permalink
feat/#39: 강의 승인 로직 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
Gyuhyeok99 committed Dec 13, 2024
1 parent 7deb3c1 commit 24c26b8
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,7 @@
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;

import static inha.dayoook_e.application.domain.enums.Status.APPLYING;
Expand Down Expand Up @@ -373,31 +370,32 @@ private List<ApplicationGroup> findConflictingApplicationGroups(
List<Application> currentApplications,
User tutor
) {
// 현재 승인 대기 중이거나 이미 승인된 애플리케이션들 조회
List<ApplicationGroup> conflictGroups = new ArrayList<>();
List<Application> allActiveApplications = applicationJpaRepository.findAll().stream()
.filter(app ->
(app.getApplicationGroup().getStatus() == APPLYING ||
app.getApplicationGroup().getStatus() == APPROVED)
)
.collect(Collectors.toList());
log.info("겹치는 신청 찾기 시작 - 튜터 ID: {}", tutor.getId());

for (Application currentApp : currentApplications) {
// 현재 승인하려는 각 시간대에 대해 겹치는 다른 애플리케이션 그룹 찾기
List<ApplicationGroup> groupsWithConflictingTimeSlot = allActiveApplications.stream()
.filter(app ->
!app.getTutor().getId().equals(tutor.getId()) && // 현재 승인하는 튜터 제외
app.getDay().getId().equals(currentApp.getDay().getId()) &&
app.getTimeSlot().getId().equals(currentApp.getTimeSlot().getId())
)
.map(Application::getApplicationGroup)
.distinct()
.collect(Collectors.toList());

conflictGroups.addAll(groupsWithConflictingTimeSlot);
}
// 현재 신청의 시간대들을 Set으로 구성 (day_id와 time_slot_id 조합)
Set<String> currentTimeSlots = currentApplications.stream()
.map(app -> app.getDay().getId() + "_" + app.getTimeSlot().getId())
.collect(Collectors.toSet());

log.info("현재 신청 시간대: {}", currentTimeSlots);

// APPLYING 또는 APPROVED 상태의 다른 튜터의 신청만 조회
List<Application> activeApplications = applicationJpaRepository.findByTutorIdNotAndApplicationGroupStatusIn(
tutor.getId(),
Arrays.asList(APPLYING, APPROVED)
);

log.info("활성 상태 신청 수: {}", activeApplications.size());

// 시간이 겹치는 신청 그룹 찾기
Set<ApplicationGroup> conflictGroups = activeApplications.stream()
.filter(app -> currentTimeSlots.contains(app.getDay().getId() + "_" + app.getTimeSlot().getId()))
.map(Application::getApplicationGroup)
.collect(Collectors.toSet()); // Set으로 수집하여 자동으로 중복 제거

log.info("겹치는 신청 그룹 수: {}", conflictGroups.size());

return conflictGroups;
return new ArrayList<>(conflictGroups);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,20 @@
import inha.dayoook_e.application.domain.enums.Status;
import inha.dayoook_e.user.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

/**
* ApplicationJpaRepository는 Application 엔티티에 대한 데이터 액세스 기능을 제공.
*/
public interface ApplicationJpaRepository extends JpaRepository<Application, Integer> {
List<Application> findByTuteeAndTutor(User tutee, User tutor);

List<Application> findByTuteeAndStatusIn(User tutee, List<Status> applying);
@Query("SELECT a FROM Application a WHERE a.tutor.id != :tutorId " +
"AND a.applicationGroup.status IN :statuses")
List<Application> findByTutorIdNotAndApplicationGroupStatusIn(
@Param("tutorId") Integer tutorId,
@Param("statuses") List<Status> statuses
);
}

0 comments on commit 24c26b8

Please sign in to comment.