package com.sequenceiq.periscope.subscription; import java.util.List; import javax.inject.Inject; import javax.transaction.Transactional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import com.sequenceiq.periscope.domain.Subscription; import com.sequenceiq.periscope.repository.SubscriptionRepository; @Service @Transactional public class SubscriptionService { private static final Logger LOGGER = LoggerFactory.getLogger(SubscriptionService.class); @Inject private SubscriptionRepository subscriptionRepository; @Transactional(Transactional.TxType.NEVER) public Long subscribe(Subscription subscription) { List<Subscription> clientSubscriptions = subscriptionRepository.findByClientIdAndEndpoint(subscription.getClientId(), subscription.getEndpoint()); if (!clientSubscriptions.isEmpty()) { LOGGER.info(String.format("Subscription already exists for this client with the same endpoint [client: '%s', endpoint: '%s']", subscription.getClientId(), subscription.getEndpoint())); return clientSubscriptions.get(0).getId(); } return subscriptionRepository.save(subscription).getId(); } }