package org.kalipo.repository; import org.joda.time.DateTime; import org.kalipo.domain.Comment; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.Query; import java.util.List; import java.util.Set; /** * Spring Data MongoDB repository for the Comment entity. */ public interface CommentRepository extends MongoRepository<Comment, String> { // todo remove threadId, body from results @Query(value = "{'threadId': ?0, 'status': { $in: ?1} }", fields = "{ 'id':1, 'parentId':1, 'threadId':1, 'createdDate':1, 'bodyHtml':1, 'displayName':1, 'level':1, 'influence':1, 'likes':1, 'dislikes':1, 'status':1, 'lastModifiedDate':1, 'createdByMod':1 }") Page<Comment> findByThreadIdAndStatusIn(String id, List<Comment.Status> status, Pageable pageable); Page<Comment> findByAuthorId(String userId, Pageable pageable); @Query(value = "{'authorId': ?0, 'status': 'APPROVED'}", count = true) Long getApprovedCommentCountOfUser(String userId); @Query(value = "{'authorId': ?0, 'status': 'REJECTED'}", count = true) Long getRejectedCommentCountOfUser(String login); @Query(value = "{'authorId': ?0, 'status': 'DELETED'}", count = true) Long getDeletedCommentCountOfUser(String login); @Query(value = "{'parentId': ?0}", count = true) Long countReplies(String commentId); @Query(value = "{'authorId': ?0, 'createdDate': {$gte: ?1, $lt: ?2}}", count = true) int countWithinDateRange(String currentLogin, DateTime from, DateTime to); @Query(value = "{'threadId': ?0, 'status' : 'APPROVED'}", count = true) int countApprovedInThread(String threadId); @Query(value = "{'threadId': ?0, 'status' : 'PENDING'}", count = true) int countPendingInThread(String threadId); @Query(value = "{'threadId': ?0, 'reportedCount' : {$gt: 0}}", count = true) int countReportedInThread(String threadId); Page<Comment> findByStatus(Comment.Status status, Pageable pageable); List<Comment> findByThreadId(String threadId, Sort sort); Set<Comment> findByParentId(String id); }