populate statuses as read when a user subscribes

This commit is contained in:
Athou
2013-04-08 15:49:34 +02:00
parent fb71ee6b84
commit 99ce880fe0
5 changed files with 66 additions and 31 deletions

View File

@@ -1,14 +1,19 @@
package com.commafeed.backend.dao;
import java.util.List;
import java.util.Set;
import javax.ejb.Stateless;
import javax.inject.Inject;
import com.commafeed.backend.model.Feed;
import com.commafeed.backend.model.FeedCategory;
import com.commafeed.backend.model.FeedEntry;
import com.commafeed.backend.model.FeedEntryStatus;
import com.commafeed.backend.model.FeedSubscription;
import com.commafeed.backend.model.User;
import com.commafeed.frontend.utils.ModelFactory.MF;
import com.google.api.client.util.Lists;
import com.google.common.collect.Iterables;
import com.uaihebert.factory.EasyCriteriaFactory;
import com.uaihebert.model.EasyCriteria;
@@ -20,6 +25,45 @@ public class FeedSubscriptionService extends GenericDAO<FeedSubscription> {
@Inject
FeedCategoryService feedCategoryService;
@Inject
FeedService feedService;
@Inject
FeedEntryStatusService feedEntryStatusService;
public void subscribe(User user, String url, String title,
FeedCategory category) {
Feed feed = feedService.findByUrl(url);
if (feed == null) {
feed = new Feed();
feed.setUrl(url);
feedService.save(feed);
}
FeedSubscription sub = findByFeed(user, feed);
if (sub == null) {
sub = new FeedSubscription();
sub.setFeed(feed);
sub.setUser(user);
}
sub.setCategory(category);
sub.setTitle(title);
saveOrUpdate(sub);
List<FeedEntryStatus> statuses = Lists.newArrayList();
Set<FeedEntry> allEntries = feedService
.getByIdWithEntries(feed.getId()).getEntries();
for (FeedEntry entry : allEntries) {
FeedEntryStatus status = new FeedEntryStatus();
status.setEntry(entry);
status.setRead(true);
status.setSubscription(sub);
statuses.add(status);
}
feedEntryStatusService.save(statuses);
}
public FeedSubscription findById(User user, Long id) {
EasyCriteria<FeedSubscription> criteria = createCriteria();
criteria.andEquals(MF.i(proxy().getUser()), user);
@@ -43,7 +87,7 @@ public class FeedSubscriptionService extends GenericDAO<FeedSubscription> {
public List<FeedSubscription> findAll(User user) {
EasyCriteria<FeedSubscription> criteria = createCriteria();
criteria.andEquals(MF.i(proxy().getUser()), user);
criteria.innerJoinFetch(MF.i(proxy().getFeed()));
criteria.innerJoinFetch(MF.i(proxy().getUser()));
criteria.leftJoinFetch(MF.i(proxy().getCategory()));