package fr.ippon.tatami.service;
import fr.ippon.tatami.domain.User;
import fr.ippon.tatami.repository.TagFollowerRepository;
import fr.ippon.tatami.repository.UserTagRepository;
import fr.ippon.tatami.security.AuthenticationService;
import fr.ippon.tatami.service.util.DomainUtil;
import fr.ippon.tatami.web.rest.dto.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.inject.Inject;
/**
* Manages the tag memberships.
* <p/>
* - A tag follower is someone who follows a tag
* - A user tag is a tag followed by a user
*
* @author Julien Dubois
*/
@Service
public class TagMembershipService {
private final Logger log = LoggerFactory.getLogger(TagMembershipService.class);
@Inject
private TagFollowerRepository tagFollowerRepository;
@Inject
private UserTagRepository userTagRepository;
@Inject
private AuthenticationService authenticationService;
public boolean followTag(Tag tag) {
log.debug("Following tag : {}", tag);
User currentUser = authenticationService.getCurrentUser();
for (String alreadyFollowingTest : userTagRepository.findTags(currentUser.getLogin())) {
if (alreadyFollowingTest.equals(tag.getName())) {
log.debug("User {} already follows tag {}", currentUser.getLogin(), tag);
return false;
}
}
String domain = DomainUtil.getDomainFromLogin(currentUser.getLogin());
userTagRepository.addTag(currentUser.getLogin(), tag.getName());
tagFollowerRepository.addFollower(domain, tag.getName(), currentUser.getLogin());
log.debug("User " + currentUser.getLogin() +
" now follows tag " + tag);
return true;
}
public boolean unfollowTag(Tag tag) {
log.debug("Removing followed tag : {}", tag);
User currentUser = authenticationService.getCurrentUser();
boolean tagAlreadyFollowed = false;
for (String alreadyFollowingTest : userTagRepository.findTags(currentUser.getLogin())) {
if (alreadyFollowingTest.equals(tag.getName())) {
tagAlreadyFollowed = true;
}
}
if (tagAlreadyFollowed) {
String domain = DomainUtil.getDomainFromLogin(currentUser.getLogin());
userTagRepository.removeTag(currentUser.getLogin(), tag.getName());
tagFollowerRepository.removeFollower(domain, tag.getName(), currentUser.getLogin());
log.debug("User " + currentUser.getLogin() +
" has stopped following tag " + tag);
return true;
} else {
return false;
}
}
}