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());
}
}