package com.estate.expert.admin.domain.project; import com.estate.expert.admin.domain.common.EntityBaseRepository; import com.estate.expert.admin.domain.project.enums.ProjectType; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.util.List; public interface ProjectRepository extends EntityBaseRepository { @Query("select p from Project p where ( :keyword is null or :keyword = '' or p.name like %:keyword% ) " + "and ( coalesce(:projectTypes, null) is null or p.type in :projectTypes ) " + "and ( coalesce(:clientIds, null) is null or p.client.id in :clientIds ) " + "and p.deleted = false " + "order by p.updateTime desc") Page findProjects(@Param("keyword") String keyword, @Param("projectTypes") List projectTypes, @Param("clientIds") List clientIds, Pageable page); @Query("select p from Project p where ( :keyword is null or :keyword = '' or p.name like %:keyword% ) " + "and ( coalesce(:projectTypes, null) is null or p.type in :projectTypes ) " + "and ( coalesce(:clientIds, null) is null or p.client.id in :clientIds ) " + "and p.deleted = false " + "order by p.updateTime desc") List findProjects(@Param("keyword") String keyword, @Param("projectTypes") List projectTypes, @Param("clientIds") List clientIds); List findAllByClientIdAndDeleted(Integer clientId, boolean deleted); @Query("select p.id from Project p where ( :keyword is null or :keyword = '' or p.name like %:keyword% ) " + "and p.deleted = false" ) List listProjectIds(@Param("keyword") String keyword); @Query("select p from Project p where ( :name is null or :name = '' or p.name like %:name% ) " + "and p.deleted = false " + "order by p.updateTime desc") List findAllByTitleIdAndDeleted(String name); }