package com.piggymetrics.notification.service; import com.piggymetrics.notification.domain.NotificationType; import com.piggymetrics.notification.domain.Recipient; import com.piggymetrics.notification.repository.RecipientRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.Assert; import java.util.Date; import java.util.List; @Service public class RecipientServiceImpl implements RecipientService { private final Logger log = LoggerFactory.getLogger(getClass()); @Autowired private RecipientRepository repository; @Override public Recipient findByAccountName(String accountName) { Assert.hasLength(accountName); return repository.findByAccountName(accountName); } /** * {@inheritDoc} */ @Override public Recipient save(String accountName, Recipient recipient) { recipient.setAccountName(accountName); recipient.getScheduledNotifications().values() .forEach(settings -> { if (settings.getLastNotified() == null) { settings.setLastNotified(new Date()); } }); repository.save(recipient); log.info("recipient {} settings has been updated", recipient); return recipient; } /** * {@inheritDoc} */ @Override public List<Recipient> findReadyToNotify(NotificationType type) { switch (type) { case BACKUP: return repository.findReadyForBackup(); case REMIND: return repository.findReadyForRemind(); default: throw new IllegalArgumentException(); } } /** * {@inheritDoc} */ @Override public void markNotified(NotificationType type, Recipient recipient) { recipient.getScheduledNotifications().get(type).setLastNotified(new Date()); repository.save(recipient); } }