package com.example.repository;
import java.util.Collection;
import java.util.List;
import com.example.entity.Board;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.stereotype.Repository;
@Repository
public interface BoardRepository extends MongoRepository<Board, Long> {
// 작성자가 'a'인 사람의 목록 조회
List<Board> findByTitle(String title);
List<Board> findByWriter(String writer);
// 조회수가 100인 게시물 목록 조회
List<Board> findByHit(long hit);
// 조회수가 200 미만인 게시물 목록 조회
List<Board> findByHitLessThan(long hit);
// 조회수가 300 이상인 게시물 목록 조회
List<Board> findByHitGreaterThanEqual(long hit);
// 글 번호가 컬렉션에 담긴 1, 5, 7만 조회
List<Board> findByNoIn(Collection<Long> nos);
List<Board> findByNoNotIn(Collection<Long> nos);
// 직접 구현
// 컨트롤러에서 bRepository.getBoardTitle("제목")
@Query(value = "{ title : ?0 }")
List<Board> getBoardTitle(String title);
@Query(value = "{ writer : ?0 }")
List<Board> getBoardWriter(String writer);
@Query(value = "{ hit : ?0 }")
List<Board> getBoardHit(long hit);
@Query(value = "{ title : {$regex: ?0} }")
List<Board> getBoardTitleLike(String title);
// ex) 컨트롤러에서 bRepository.getBoardTitle("가")
// 제목에 "가" 내용이 포함된것 가져옴.
// 조회수가 n보다 작다 <, <e, >, >e
@Query(value = "{ hit : {$lt : ?0} }")
List<Board> getBoardHitLt(long hit);
// 제목과 작성자가 일치(AND)
@Query(value = "{ title: ?0, writer:?1 }")
// @Query(value = "{$and : [{title: ?0}, {writer:?1}] }")
List<Board> getBoardTitleAndWriter(String title, String writer);
// 제목과 작성자 둘중 하나(OR)
@Query(value = "{$or : [{title: ?0}, {writer:?1}] }")
List<Board> getBoardTitleOrWriter(String title, String writer);
// 전체 제목에 포함것 중에서 개수
@Query(value = "{ title : {$regex: ?0} }", count = true)
long getBoardTitleLikeCount(String title);
// 작성자가 정확하게 일치하는 목록을 글번호 기준 내림차순
@Query(value = "{ writer : ?0 }", sort = "{_id : -1}")
List<Board> getBoardWriterSort(String writer);
}