Skip to content

Commit

Permalink
Merge pull request #302 from 6QuizOnTheBlock/be/feat/#153-receiveRelay
Browse files Browse the repository at this point in the history
feat #153: ์ด์–ด๋‹ฌ๋ฆฌ๊ธฐ ํƒ€์ž„์•„์›ƒ ์‹œ ์ข…๋ฃŒ ์Šค์ผ€์ค„๋ง ์ถ”๊ฐ€
  • Loading branch information
Henry-Cha authored May 13, 2024
2 parents 07dcb15 + 1459b50 commit eb6adae
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.quiz.ourclass.domain.organization.entity.Organization;
import com.quiz.ourclass.domain.relay.entity.Relay;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;

Expand All @@ -10,4 +11,6 @@ public interface RelayRepository extends JpaRepository<Relay, Long>, RelayReposi
Boolean existsByOrganizationAndEndStatusIsFalse(Organization organization);

Optional<Relay> findByOrganizationIdAndEndStatusIsFalse(long organizationId);

List<Relay> findAllByEndStatusIsFalse();
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,12 @@
import com.quiz.ourclass.global.exception.GlobalException;
import com.quiz.ourclass.global.util.ConstantUtil;
import com.quiz.ourclass.global.util.UserAccessUtil;
import com.quiz.ourclass.global.util.scheduler.SchedulingService;
import java.time.LocalDateTime;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -36,6 +40,7 @@ public class RelayServiceImpl implements RelayService {
private final OrganizationRepository organizationRepository;
private final MemberOrganizationRepository memberOrganizationRepository;
private final UserAccessUtil accessUtil;
private final SchedulingService schedulingService;


@Transactional
Expand Down Expand Up @@ -136,7 +141,9 @@ public ReceiveRelayResponse receiveRelay(long id, ReceiveRelayRequest receiveRel
.orElseThrow(() -> new GlobalException(ErrorCode.MEMBER_ORGANIZATION_NOT_FOUND));
memberOrganization.updateRelayCount();
memberOrganizationRepository.save(memberOrganization);
//TODO: ํƒ€์ž„์•„์›ƒ ์Šค์ผ€์ค„๋Ÿฌ ์ฒดํฌ

schedulingService.scheduleTask(relayMember, this::relayClosing,
relayMember.getReceiveTime().plusDays(ConstantUtil.RELAY_TIMEOUT_DAY));
return ReceiveRelayResponse.builder()
.senderName(currentRunner.getCurMember().getName())
.question(currentRunner.getQuestion())
Expand All @@ -160,4 +167,31 @@ public SendRelayResponse sendRelay(long id) {
.prevMemberName(prevRelayMember.getCurMember().getName())
.prevQuestion(prevRelayMember.getQuestion()).build();
}

protected void relayClosing(RelayMember relayMember) {
Relay relay = relayMember.getRelay();
relay.setEndStatus(true);
relayRepository.save(relay);
relayMember.setEndStatus(true);
Member curMember = relayMember.getCurMember();
MemberOrganization memberOrganization = memberOrganizationRepository.findByOrganizationAndMember(
relay.getOrganization(), curMember).orElseThrow();
memberOrganization.updateExp(ConstantUtil.RELAY_DEMERIT);
relayMemberRepository.save(relayMember);
}

@EventListener(ApplicationReadyEvent.class)
protected void challengeClosingReload() {
List<Relay> relays = relayRepository.findAllByEndStatusIsFalse();
relays.forEach(relay -> {
RelayMember lastRunner = relay.getLastRunner();
if (lastRunner.getReceiveTime().plusDays(ConstantUtil.RELAY_TIMEOUT_DAY)
.isBefore(LocalDateTime.now())) {
relayClosing(lastRunner);
} else {
schedulingService.scheduleTask(lastRunner, this::relayClosing,
lastRunner.getReceiveTime().plusDays(ConstantUtil.RELAY_TIMEOUT_DAY));
}
});
}
}

0 comments on commit eb6adae

Please sign in to comment.