package ru.bvn13.voidforum.repositories; import ru.bvn13.voidforum.models.Post; import ru.bvn13.voidforum.models.User; import ru.bvn13.voidforum.models.support.PostStatus; import ru.bvn13.voidforum.models.support.PostType; 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.repository.query.Param; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import java.util.List; /** * bvn13 */ @Repository @Transactional public interface PostRepository extends JpaRepository { Post findByPermalinkAndPostStatus(String permalink, PostStatus postStatus); Post findByIdAndPostStatus(Long postId, PostStatus postStatus); Page findAllByPostType(PostType postType, Pageable pageRequest); Page findAllByPostTypeAndPostStatus(PostType postType, PostStatus postStatus, Pageable pageRequest); Page findAllByPostTypeAndPostStatusAndDeletedMarkAndCensored(PostType postType, PostStatus postStatus, Boolean deletedMark, Boolean censored, Pageable pageRequest); List findAllByPostTypeAndPostStatus(PostType postType, PostStatus postStatus); @Query("SELECT p FROM Post p INNER JOIN p.tags t WHERE t.name = :tag") Page findByTag(@Param("tag") String tag, Pageable pageable); @Query("SELECT t.name, count(p) as tag_count from Post p " + "INNER JOIN p.tags t " + "WHERE p.postStatus = :status " + "GROUP BY t.id " + "ORDER BY tag_count DESC") List countPostsByTags(@Param("status") PostStatus status); Page findAllByPostTypeAndPostStatusAndDeletedMark(PostType postType, PostStatus postStatus, Boolean deletedMark, Pageable pageRequest); Page findAllByUser(User user, Pageable pageRequest); }