HashtagsXRep/hashtagsxrep

View on GitHub
src/main/java/cat/xarxarepublicana/hashtagsxrep/application/poll/FinishPollUseCase.java

Summary

Maintainability
A
0 mins
Test Coverage
package cat.xarxarepublicana.hashtagsxrep.application.poll;

import cat.xarxarepublicana.hashtagsxrep.domain.monitor.Monitor;
import cat.xarxarepublicana.hashtagsxrep.domain.monitor.MonitorFactory;
import cat.xarxarepublicana.hashtagsxrep.domain.monitor.MonitorRepository;
import cat.xarxarepublicana.hashtagsxrep.domain.notice.NoticeRepository;
import cat.xarxarepublicana.hashtagsxrep.domain.notice.PollClosedNotice;
import cat.xarxarepublicana.hashtagsxrep.domain.poll.Poll;
import cat.xarxarepublicana.hashtagsxrep.domain.poll.PollRepository;
import cat.xarxarepublicana.hashtagsxrep.domain.poll.Proposal;
import java.util.List;
import java.util.logging.Logger;
import org.apache.commons.lang3.StringUtils;

public class FinishPollUseCase {

  private static final Logger LOG = Logger.getLogger(FinishPollUseCase.class.getName());

  private final MonitorRepository monitorRepository;
  private final MonitorFactory monitorFactory;
  private final PollRepository pollRepository;
  private final NoticeRepository noticeRepository;

  public FinishPollUseCase(
      MonitorRepository monitorRepository,
      MonitorFactory monitorFactory,
      PollRepository pollRepository,
      NoticeRepository noticeRepository) {
    this.monitorRepository = monitorRepository;
    this.monitorFactory = monitorFactory;
    this.pollRepository = pollRepository;
    this.noticeRepository = noticeRepository;
  }

  public void createMonitorFromPoll() {
    Monitor monitor;
    Proposal winnerProposal;
    List<Poll> finishedPollsWithNoMonitor = pollRepository.findFinishedPollsWithNoMonitor();
    for (Poll poll : finishedPollsWithNoMonitor) {
      winnerProposal = pollRepository.findWinnerProposal(poll);
      if (winnerProposal != null) {
        monitor = monitorFactory.createMonitorFromPoll(poll.getId(), winnerProposal.getHashtag());
        LOG.info("Creating new monitor from poll: " + monitor.getId() + " - " + monitor.getTwitterQuery());
        monitorRepository.save(monitor);

        PollClosedNotice notice = new PollClosedNotice(
            poll.getDescription(),
            winnerProposal.getHashtag(),
            winnerProposal.getSubject(),
            poll.getId(),
            StringUtils.leftPad("" + poll.getStartEventTime().getHour(), 2, "0")
                + ":"
                + StringUtils.leftPad("" + poll.getStartEventTime().getMinute(), 2, "0") + "h");
        noticeRepository.publishPollClosedNotice(notice);
      } else {
        LOG.warning("Finished poll with no winner proposal, consider to delete it");
      }
    }
  }
}