81 lines
5.8 KiB
Java
81 lines
5.8 KiB
Java
/**
|
|
*
|
|
*/
|
|
package de.bstly.board.repository;
|
|
|
|
import java.time.Instant;
|
|
import java.util.List;
|
|
|
|
import org.springframework.data.domain.Page;
|
|
import org.springframework.data.domain.Pageable;
|
|
import org.springframework.data.jpa.repository.JpaRepository;
|
|
import org.springframework.data.jpa.repository.Query;
|
|
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
|
|
import org.springframework.data.repository.query.Param;
|
|
import org.springframework.stereotype.Repository;
|
|
|
|
import de.bstly.board.model.Comment;
|
|
|
|
|
|
/**
|
|
* The Interface CommentRepository.
|
|
*/
|
|
@Repository
|
|
public interface CommentRepository
|
|
extends JpaRepository<Comment, Long>, QuerydslPredicateExecutor<Comment> {
|
|
|
|
/**
|
|
* Find all by ranking and parent.
|
|
*
|
|
* @param target the target
|
|
* @param date the date
|
|
* @param gravity the gravity
|
|
* @return the list
|
|
*/
|
|
@Query(value = "SELECT comment.*, ranked.ranking FROM comments AS comment LEFT JOIN (SELECT comment.id, (IFNULL(upvote.count,0) - IFNULL(downvote.count,0)) / POW(TIMESTAMPDIFF(HOUR, comment.created, :date)+2,:gravity) AS ranking FROM comments AS comment LEFT JOIN (SELECT upvote.target,COUNT(upvote.id) AS count FROM votes as upvote WHERE upvote.type = 0 AND upvote.target_type = 0 GROUP BY upvote.target) AS upvote ON upvote.target = comment.id LEFT JOIN (SELECT downvote.target,COUNT(downvote.id) AS count FROM votes as downvote WHERE downvote.type = 1 GROUP BY downvote.target) AS downvote ON downvote.target = comment.id) as ranked on ranked.id = comment.id WHERE comment.target = :target AND parent IS NULL AND comment.created < :date ORDER BY ranked.ranking DESC, comment.created DESC", countQuery = "SELECT count(*) FROM comments as comment WHERE comment.target = :target AND parent IS NULL AND comment.created < :date", nativeQuery = true)
|
|
List<Comment> findAllByRankingAndParent(@Param("target") Long target,
|
|
@Param("date") Instant date, @Param("gravity") double gravity);
|
|
|
|
/**
|
|
* Find all by ranking and parent.
|
|
*
|
|
* @param target the target
|
|
* @param parent the parent
|
|
* @param date the date
|
|
* @param gravity the gravity
|
|
* @return the list
|
|
*/
|
|
@Query(value = "SELECT comment.*, ranked.ranking FROM comments AS comment LEFT JOIN (SELECT comment.id, (IFNULL(upvote.count,0) - IFNULL(downvote.count,0)) / POW(TIMESTAMPDIFF(HOUR, comment.created, :date)+2,:gravity) AS ranking FROM comments AS comment LEFT JOIN (SELECT upvote.target,COUNT(upvote.id) AS count FROM votes as upvote WHERE upvote.type = 0 AND upvote.target_type = 0 GROUP BY upvote.target) AS upvote ON upvote.target = comment.id LEFT JOIN (SELECT downvote.target,COUNT(downvote.id) AS count FROM votes as downvote WHERE downvote.type = 1 GROUP BY downvote.target) AS downvote ON downvote.target = comment.id) as ranked on ranked.id = comment.id WHERE comment.target = :target AND parent = :parent AND comment.created < :date ORDER BY ranked.ranking DESC, comment.created DESC", countQuery = "SELECT count(*) FROM comments as comment WHERE comment.target = :target AND parent = :parent AND comment.created < :date", nativeQuery = true)
|
|
List<Comment> findAllByRankingAndParent(@Param("target") Long target,
|
|
@Param("parent") Long parent, @Param("date") Instant date,
|
|
@Param("gravity") double gravity);
|
|
|
|
/**
|
|
* Find all by ranking and parent.
|
|
*
|
|
* @param target the target
|
|
* @param date the date
|
|
* @param gravity the gravity
|
|
* @param pageable the pageable
|
|
* @return the page
|
|
*/
|
|
@Query(value = "SELECT comment.*, ranked.ranking FROM comments AS comment LEFT JOIN (SELECT comment.id, (IFNULL(upvote.count,0) - IFNULL(downvote.count,0)) / POW(TIMESTAMPDIFF(HOUR, comment.created, :date)+2,:gravity) AS ranking FROM comments AS comment LEFT JOIN (SELECT upvote.target,COUNT(upvote.id) AS count FROM votes as upvote WHERE upvote.type = 0 AND upvote.target_type = 0 GROUP BY upvote.target) AS upvote ON upvote.target = comment.id LEFT JOIN (SELECT downvote.target,COUNT(downvote.id) AS count FROM votes as downvote WHERE downvote.type = 1 GROUP BY downvote.target) AS downvote ON downvote.target = comment.id) as ranked on ranked.id = comment.id WHERE comment.target = :target AND parent IS NULL AND comment.created < :date ORDER BY ranked.ranking DESC, comment.created DESC", countQuery = "SELECT count(*) FROM comments as comment WHERE comment.target = :target AND parent IS NULL AND comment.created < :date", nativeQuery = true)
|
|
Page<Comment> findAllByRankingAndParent(@Param("target") Long target,
|
|
@Param("date") Instant date, @Param("gravity") double gravity, Pageable pageable);
|
|
|
|
/**
|
|
* Find all by ranking and parent.
|
|
*
|
|
* @param target the target
|
|
* @param parent the parent
|
|
* @param date the date
|
|
* @param gravity the gravity
|
|
* @param pageable the pageable
|
|
* @return the page
|
|
*/
|
|
@Query(value = "SELECT comment.*, ranked.ranking FROM comments AS comment LEFT JOIN (SELECT comment.id, (IFNULL(upvote.count,0) - IFNULL(downvote.count,0)) / POW(TIMESTAMPDIFF(HOUR, comment.created, :date)+2,:gravity) AS ranking FROM comments AS comment LEFT JOIN (SELECT upvote.target,COUNT(upvote.id) AS count FROM votes as upvote WHERE upvote.type = 0 AND upvote.target_type = 0 GROUP BY upvote.target) AS upvote ON upvote.target = comment.id LEFT JOIN (SELECT downvote.target,COUNT(downvote.id) AS count FROM votes as downvote WHERE downvote.type = 1 GROUP BY downvote.target) AS downvote ON downvote.target = comment.id) as ranked on ranked.id = comment.id WHERE comment.target = :target AND parent = :parent AND comment.created < :date ORDER BY ranked.ranking DESC, comment.created DESC", countQuery = "SELECT count(*) FROM comments as comment WHERE comment.target = :target AND parent = :parent AND comment.created < :date", nativeQuery = true)
|
|
Page<Comment> findAllByRankingAndParent(@Param("target") Long target,
|
|
@Param("parent") Long parent, @Param("date") Instant date,
|
|
@Param("gravity") double gravity, Pageable pageable);
|
|
}
|