package com.aperture_software.glados_wiki.services; import com.aperture_software.glados_wiki.entities.Page; import com.aperture_software.glados_wiki.entities.PageContent; import com.google.common.base.Optional; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.bson.types.ObjectId; import org.mongodb.morphia.Datastore; import org.mongodb.morphia.query.Query; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * Created with IntelliJ IDEA. * User: jhyun * Date: 13. Nov. 16 * Time: 11:07 */ @Service public class PageContentService { @Autowired private Datastore datastore; public Optional<PageContent> load(ObjectId id) { PageContent c = datastore.get(PageContent.class, id); return Optional.fromNullable(c); } public void save(PageContent pageContent) { datastore.save(pageContent); } public void delete(PageContent pageContent) { datastore.delete(pageContent); } public List<PageContent> listVersions(Page page, final int offset, final int limit) { Query<PageContent> q = datastore.createQuery(PageContent.class) .offset(offset).limit(limit) .order("-ctime"); q.field("page").equal(page); return q.asList(); } public long countVersions(Page page) { Query<PageContent> q = datastore.createQuery(PageContent.class); q.field("page").equal(page); return q.countAll(); } public Pair<Long, List<PageContent>> listRecents(final int offset, final int limit) { Query<PageContent> q = datastore.createQuery(PageContent.class) .offset(offset).limit(limit) .order("-ctime"); return new ImmutablePair<Long, List<PageContent>>(q.countAll(), q.asList()); } }