package egovframework.rte.psl.data.mongodb.repository;
import java.util.List;
import egovframework.rte.psl.data.mongodb.domain.Address;
import egovframework.rte.psl.data.mongodb.domain.Person;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Point;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
public interface PersonRepository extends MongoRepository<Person, String> {
// Query methods
List<Person> findByLastname(String lastname);
Page<Person> findByFirstname(String firstname, Pageable pageable);
Person findByAddress(Address address);
// Delete methods
List<Person> deleteByLastname(String lastname);
Long deletePersonByLastname(String lastname);
// Geo-spatial methods
// { 'location' : { '$near' : [point.x, point.y], '$maxDistance' : distance}}
List<Person> findByLocationNear(Point location, Distance distance);
// JSON based query methods
@Query("{ 'firstname' : ?0 }")
List<Person> findByThePersonsFirstname(String firstname);
}