package eu.kielczewski.akanke.common.service.document; import eu.kielczewski.akanke.common.domain.Document; import eu.kielczewski.akanke.common.domain.FacebookStats; import eu.kielczewski.akanke.common.repository.DocumentRepository; import eu.kielczewski.akanke.common.service.facebook.FacebookStatsService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.inject.Inject; import java.util.List; @Component class DocumentFacebookStatsUpdater { private static final Logger LOGGER = LoggerFactory.getLogger(DocumentFacebookStatsUpdater.class); private final DocumentRepository documentRepository; private final FacebookStatsService facebookStatsService; @Autowired public DocumentFacebookStatsUpdater(DocumentRepository documentRepository, FacebookStatsService facebookStatsService) { this.documentRepository = documentRepository; this.facebookStatsService = facebookStatsService; } @Scheduled(initialDelay = 3600000, fixedRate = 3600000) public void updateAll() { LOGGER.debug("Updating Facebook stats in all documents..."); List<Document> documents = documentRepository.findAll(); documents.forEach(this::updateDocument); } private void updateDocument(Document document) { LOGGER.trace("Updating Facebook stats of document id={}", document.getId()); FacebookStats updated = facebookStatsService.get(document.getId()); FacebookStats current = document.getFacebookStats(); current.setCommentCount(updated.getCommentCount()); current.setShareCount(updated.getShareCount()); documentRepository.save(document); } }