package it.demo.twitterlike.server.repository; import it.demo.twitterlike.server.domain.User; import java.util.List; import org.joda.time.DateTime; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.rest.core.annotation.RepositoryRestResource; import org.springframework.data.rest.core.annotation.RestResource; @RepositoryRestResource(collectionResourceRel = "users", path = "users", exported = true) public interface UserRepository extends PagingAndSortingRepository<User, String>, JpaSpecificationExecutor<User> { @Query("select u from #{#entityName} u where u.email=?1 and u.password=?2") @RestResource(exported = false) User login(String email, String password); Slice<User> findByLastName(String lastname, Pageable pageable); @Query("select u from #{#entityName} u where u.activationKey = ?1") User getUserByActivationKey(String activationKey); @Query("select u from #{#entityName} u where u.activated = false and u.createdDate > ?1") List<User> findNotActivatedUsersByCreationDateBefore(DateTime dateTime); @Query("select following from #{#entityName} u inner join u.following following where u.login = ?1") Page<User> findFollowersByLogin(String login, Pageable pageable); @Query("select followers from #{#entityName} u inner join u.followers followers where u.login = ?1") Page<User> findFollowingsByLogin(String login, Pageable pageable); User findOneByEmail(String email); }