refactored the way entries and statuses are fetched

This commit is contained in:
Athou
2013-07-19 11:17:19 +02:00
parent af274f797f
commit 079345b2e0
11 changed files with 362 additions and 395 deletions

View File

@@ -12,8 +12,10 @@ import org.apache.wicket.request.mapper.parameter.PageParameters;
import com.commafeed.backend.dao.FeedCategoryDAO;
import com.commafeed.backend.dao.FeedEntryStatusDAO;
import com.commafeed.backend.dao.FeedSubscriptionDAO;
import com.commafeed.backend.model.FeedCategory;
import com.commafeed.backend.model.FeedEntryStatus;
import com.commafeed.backend.model.FeedSubscription;
import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserRole.Role;
import com.commafeed.backend.model.UserSettings.ReadingOrder;
@@ -35,13 +37,16 @@ public class NextUnreadRedirectPage extends WebPage {
@Inject
FeedEntryStatusDAO feedEntryStatusDAO;
@Inject
FeedSubscriptionDAO feedSubscriptionDAO;
public NextUnreadRedirectPage(PageParameters params) {
String categoryId = params.get(PARAM_CATEGORYID).toString();
String orderParam = params.get(PARAM_READINGORDER).toString();
User user = CommaFeedSession.get().getUser();
ReadingOrder order = ReadingOrder.desc;
if (StringUtils.equals(orderParam, "asc")) {
order = ReadingOrder.asc;
}
@@ -49,16 +54,20 @@ public class NextUnreadRedirectPage extends WebPage {
List<FeedEntryStatus> statuses = null;
if (StringUtils.isBlank(categoryId)
|| CategoryREST.ALL.equals(categoryId)) {
statuses = feedEntryStatusDAO.findAllUnread(user, null, 0, 1,
order, true);
List<FeedSubscription> subscriptions = feedSubscriptionDAO
.findAll(user);
statuses = feedEntryStatusDAO.findBySubscriptions(subscriptions,
null, null, 0, 1, order, true);
} else {
FeedCategory category = feedCategoryDAO.findById(user,
Long.valueOf(categoryId));
if (category != null) {
List<FeedCategory> children = feedCategoryDAO
.findAllChildrenCategories(user, category);
statuses = feedEntryStatusDAO.findUnreadByCategories(children,
null, 0, 1, order, true);
List<FeedSubscription> subscriptions = feedSubscriptionDAO
.findByCategories(user, children);
statuses = feedEntryStatusDAO.findUnreadBySubscriptions(
subscriptions, null, 0, 1, order, true);
}
}

View File

@@ -107,12 +107,15 @@ public class CategoryREST extends AbstractResourceREST {
if (ALL.equals(id)) {
entries.setName("All");
List<FeedEntryStatus> list = null;
List<FeedSubscription> subscriptions = feedSubscriptionDAO
.findAll(getUser());
if (unreadOnly) {
list = feedEntryStatusDAO.findAllUnread(getUser(),
newerThanDate, offset, limit + 1, order, true);
list = feedEntryStatusDAO.findUnreadBySubscriptions(
subscriptions, newerThanDate, offset, limit + 1, order,
true);
} else {
list = feedEntryStatusDAO.findAll(getUser(), newerThanDate,
offset, limit + 1, order, true);
list = feedEntryStatusDAO.findBySubscriptions(subscriptions,
null, newerThanDate, offset, limit + 1, order, true);
}
for (FeedEntryStatus status : list) {
entries.getEntries().add(
@@ -132,20 +135,20 @@ public class CategoryREST extends AbstractResourceREST {
.get().isImageProxyEnabled()));
}
} else {
FeedCategory feedCategory = feedCategoryDAO.findById(getUser(),
FeedCategory parent = feedCategoryDAO.findById(getUser(),
Long.valueOf(id));
if (feedCategory != null) {
List<FeedCategory> childrenCategories = feedCategoryDAO
.findAllChildrenCategories(getUser(), feedCategory);
if (parent != null) {
List<FeedCategory> categories = feedCategoryDAO
.findAllChildrenCategories(getUser(), parent);
List<FeedSubscription> subs = feedSubscriptionDAO
.findByCategories(getUser(), categories);
List<FeedEntryStatus> list = null;
if (unreadOnly) {
list = feedEntryStatusDAO.findUnreadByCategories(
childrenCategories, newerThanDate, offset,
limit + 1, order, true);
list = feedEntryStatusDAO.findUnreadBySubscriptions(subs,
newerThanDate, offset, limit + 1, order, true);
} else {
list = feedEntryStatusDAO.findByCategories(
childrenCategories, newerThanDate, offset,
limit + 1, order, true);
list = feedEntryStatusDAO.findBySubscriptions(subs, null,
newerThanDate, offset, limit + 1, order, true);
}
for (FeedEntryStatus status : list) {
entries.getEntries().add(
@@ -154,7 +157,7 @@ public class CategoryREST extends AbstractResourceREST {
applicationSettingsService.get()
.isImageProxyEnabled()));
}
entries.setName(feedCategory.getName());
entries.setName(parent.getName());
}
}
@@ -223,17 +226,20 @@ public class CategoryREST extends AbstractResourceREST {
req.getOlderThan());
if (ALL.equals(req.getId())) {
feedEntryStatusDAO.markAllEntries(getUser(), olderThan);
List<FeedSubscription> subscriptions = feedSubscriptionDAO
.findAll(getUser());
feedEntryStatusDAO
.markSubscriptionEntries(subscriptions, olderThan);
} else if (STARRED.equals(req.getId())) {
feedEntryStatusDAO.markStarredEntries(getUser(), olderThan);
} else {
FeedCategory parent = feedCategoryDAO.findById(getUser(),
Long.valueOf(req.getId()));
List<FeedCategory> categories = feedCategoryDAO
.findAllChildrenCategories(
getUser(),
feedCategoryDAO.findById(getUser(),
Long.valueOf(req.getId())));
feedEntryStatusDAO.markCategoryEntries(getUser(), categories,
olderThan);
.findAllChildrenCategories(getUser(), parent);
List<FeedSubscription> subs = feedSubscriptionDAO.findByCategories(
getUser(), categories);
feedEntryStatusDAO.markSubscriptionEntries(subs, olderThan);
}
cache.invalidateUserData(getUser());
return Response.ok(Status.OK).build();

View File

@@ -15,7 +15,10 @@ import org.apache.commons.lang.StringUtils;
import com.commafeed.backend.cache.CacheService;
import com.commafeed.backend.dao.FeedEntryStatusDAO;
import com.commafeed.backend.dao.FeedSubscriptionDAO;
import com.commafeed.backend.model.FeedEntryStatus;
import com.commafeed.backend.model.FeedSubscription;
import com.commafeed.backend.model.UserSettings.ReadingOrder;
import com.commafeed.backend.services.FeedEntryService;
import com.commafeed.frontend.model.Entries;
import com.commafeed.frontend.model.Entry;
@@ -38,6 +41,9 @@ public class EntryREST extends AbstractResourceREST {
@Inject
FeedEntryStatusDAO feedEntryStatusDAO;
@Inject
FeedSubscriptionDAO feedSubscriptionDAO;
@Inject
CacheService cache;
@@ -67,7 +73,7 @@ public class EntryREST extends AbstractResourceREST {
for (MarkRequest r : req.getRequests()) {
markFeedEntry(r);
}
return Response.ok(Status.OK).build();
}
@@ -100,8 +106,10 @@ public class EntryREST extends AbstractResourceREST {
Entries entries = new Entries();
List<Entry> list = Lists.newArrayList();
List<FeedSubscription> subs = feedSubscriptionDAO.findAll(getUser());
List<FeedEntryStatus> entriesStatus = feedEntryStatusDAO
.findByKeywords(getUser(), keywords, offset, limit);
.findBySubscriptions(subs, keywords, null, offset, limit,
ReadingOrder.desc, true);
for (FeedEntryStatus status : entriesStatus) {
list.add(Entry.build(status, applicationSettingsService.get()
.getPublicUrl(), applicationSettingsService.get()

View File

@@ -2,6 +2,7 @@ package com.commafeed.frontend.rest.resources;
import java.io.StringWriter;
import java.net.URI;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
@@ -153,12 +154,13 @@ public class FeedREST extends AbstractResourceREST {
List<FeedEntryStatus> list = null;
if (unreadOnly) {
list = feedEntryStatusDAO.findUnreadBySubscription(
subscription, newerThanDate, offset, limit + 1, order,
true);
list = feedEntryStatusDAO.findUnreadBySubscriptions(
Arrays.asList(subscription), newerThanDate, offset,
limit + 1, order, true);
} else {
list = feedEntryStatusDAO.findBySubscription(subscription,
newerThanDate, offset, limit + 1, order, true);
list = feedEntryStatusDAO.findBySubscriptions(
Arrays.asList(subscription), null, newerThanDate,
offset, limit + 1, order, true);
}
for (FeedEntryStatus status : list) {
@@ -292,7 +294,8 @@ public class FeedREST extends AbstractResourceREST {
FeedSubscription subscription = feedSubscriptionDAO.findById(getUser(),
Long.valueOf(req.getId()));
if (subscription != null) {
feedEntryStatusDAO.markSubscriptionEntries(subscription, olderThan);
feedEntryStatusDAO.markSubscriptionEntries(
Arrays.asList(subscription), olderThan);
}
cache.invalidateUserData(getUser());
return Response.ok(Status.OK).build();