diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryService.java b/src/main/java/com/commafeed/backend/dao/FeedEntryService.java index 3ff9122c..6b8e23f4 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedEntryService.java +++ b/src/main/java/com/commafeed/backend/dao/FeedEntryService.java @@ -112,6 +112,14 @@ public class FeedEntryService extends GenericDAO { return buildList(query.getResultList()); } + public Long getUnreadCount(Feed feed, User user) { + TypedQuery query = em.createNamedQuery("Entry.unreadByFeedCount", + Long.class); + query.setParameter("feed", feed); + query.setParameter("userId", user.getId()); + return query.getSingleResult(); + } + public List getEntries(Feed feed, User user, boolean unreadOnly) { return getEntries(feed, user, unreadOnly, -1, -1); diff --git a/src/main/java/com/commafeed/frontend/model/Subscription.java b/src/main/java/com/commafeed/frontend/model/Subscription.java index 63ba82c8..4bb637b9 100644 --- a/src/main/java/com/commafeed/frontend/model/Subscription.java +++ b/src/main/java/com/commafeed/frontend/model/Subscription.java @@ -9,7 +9,7 @@ public class Subscription implements Serializable { private String name; private String message; private String feedUrl; - private int unread; + private long unread; public Long getId() { return id; @@ -27,11 +27,11 @@ public class Subscription implements Serializable { this.name = name; } - public int getUnread() { + public long getUnread() { return unread; } - public void setUnread(int unread) { + public void setUnread(long unread) { this.unread = unread; } diff --git a/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java b/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java index b0c5b54f..3609e14c 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java @@ -206,9 +206,8 @@ public class SubscriptionsREST extends AbstractREST { sub.setName(subscription.getTitle()); sub.setMessage(subscription.getFeed().getMessage()); sub.setFeedUrl(subscription.getFeed().getLink()); - // TODO use count instead of retrieving everything here - int size = feedEntryService.getEntries(subscription.getFeed(), - getUser(), true).size(); + long size = feedEntryService.getUnreadCount( + subscription.getFeed(), getUser()); sub.setUnread(size); category.getFeeds().add(sub); } diff --git a/src/main/resources/META-INF/orm.xml b/src/main/resources/META-INF/orm.xml index e5e9eb1e..1af3d39e 100644 --- a/src/main/resources/META-INF/orm.xml +++ b/src/main/resources/META-INF/orm.xml @@ -23,6 +23,9 @@ select e, s from FeedEntry e LEFT JOIN e.statuses s WITH (s.user.id=:userId) where e.feed=:feed and not exists (select s2 from FeedEntryStatus s2 where s2.entry=e and s2.user.id=:userId and s2.read=true) order by e.updated desc + + select count(e) from FeedEntry e LEFT JOIN e.statuses s WITH (s.user.id=:userId) where e.feed=:feed and not exists (select s2 from FeedEntryStatus s2 where s2.entry=e and s2.user.id=:userId and s2.read=true) + select e, s from FeedEntry e LEFT JOIN e.statuses s WITH (s.user.id=:userId) where e.feed=:feed order by e.updated desc