diff --git a/src/main/java/run/halo/app/model/params/AttachmentQuery.java b/src/main/java/run/halo/app/model/params/AttachmentQuery.java new file mode 100644 index 000000000..0c6f4a553 --- /dev/null +++ b/src/main/java/run/halo/app/model/params/AttachmentQuery.java @@ -0,0 +1,18 @@ +package run.halo.app.model.params; + +import lombok.Data; + +/** + * Attachment query params. + * + * @author : RYAN0UP + * @date : 2019/04/18 + */ +@Data +public class AttachmentQuery { + + /** + * Keyword. + */ + private String keyword; +} diff --git a/src/main/java/run/halo/app/repository/AttachmentRepository.java b/src/main/java/run/halo/app/repository/AttachmentRepository.java index 58b3adb30..a4a3e852f 100644 --- a/src/main/java/run/halo/app/repository/AttachmentRepository.java +++ b/src/main/java/run/halo/app/repository/AttachmentRepository.java @@ -1,13 +1,13 @@ package run.halo.app.repository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import run.halo.app.model.entity.Attachment; import run.halo.app.repository.base.BaseRepository; -import run.halo.app.repository.base.BaseRepository; /** * Attachment repository * * @author johnniang */ -public interface AttachmentRepository extends BaseRepository { +public interface AttachmentRepository extends BaseRepository, JpaSpecificationExecutor { } diff --git a/src/main/java/run/halo/app/service/AttachmentService.java b/src/main/java/run/halo/app/service/AttachmentService.java index 7fc836c29..c3036de8a 100644 --- a/src/main/java/run/halo/app/service/AttachmentService.java +++ b/src/main/java/run/halo/app/service/AttachmentService.java @@ -7,6 +7,7 @@ import org.springframework.web.multipart.MultipartFile; import run.halo.app.exception.FileOperationException; import run.halo.app.model.dto.AttachmentOutputDTO; import run.halo.app.model.entity.Attachment; +import run.halo.app.model.params.AttachmentQuery; import run.halo.app.service.base.CrudService; @@ -24,7 +25,7 @@ public interface AttachmentService extends CrudService { * @return a page of attachment output dto */ @NonNull - Page pageDtosBy(@NonNull Pageable pageable); + Page pageDtosBy(@NonNull Pageable pageable, AttachmentQuery attachmentQuery); /** * Uploads file. diff --git a/src/main/java/run/halo/app/service/impl/AttachmentServiceImpl.java b/src/main/java/run/halo/app/service/impl/AttachmentServiceImpl.java index 57cfa40ff..a4093fc28 100644 --- a/src/main/java/run/halo/app/service/impl/AttachmentServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/AttachmentServiceImpl.java @@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; import org.springframework.lang.NonNull; import org.springframework.stereotype.Service; import org.springframework.util.Assert; @@ -12,6 +13,7 @@ import run.halo.app.handler.file.FileHandlers; import run.halo.app.model.dto.AttachmentOutputDTO; import run.halo.app.model.entity.Attachment; import run.halo.app.model.enums.AttachmentType; +import run.halo.app.model.params.AttachmentQuery; import run.halo.app.model.properties.AttachmentProperties; import run.halo.app.model.support.UploadResult; import run.halo.app.repository.AttachmentRepository; @@ -19,6 +21,9 @@ import run.halo.app.service.AttachmentService; import run.halo.app.service.OptionService; import run.halo.app.service.base.AbstractCrudService; +import javax.persistence.criteria.Predicate; +import java.util.LinkedList; +import java.util.List; import java.util.Objects; /** @@ -47,16 +52,36 @@ public class AttachmentServiceImpl extends AbstractCrudService pageDtosBy(Pageable pageable) { + public Page pageDtosBy(@NonNull Pageable pageable, AttachmentQuery attachmentQuery) { Assert.notNull(pageable, "Page info must not be null"); // List all - Page attachmentPage = listAll(pageable); + Page attachmentPage = attachmentRepository.findAll(buildSpecByQuery(attachmentQuery), pageable); // Convert and return return attachmentPage.map(this::convertToDto); } + @NonNull + private Specification buildSpecByQuery(@NonNull AttachmentQuery attachmentQuery) { + Assert.notNull(attachmentQuery, "Attachment query must not be null"); + + return (Specification) (root, query, criteriaBuilder) -> { + List predicates = new LinkedList<>(); + + if (attachmentQuery.getKeyword() != null) { + + String likeCondition = String.format("%%%s%%", StringUtils.strip(attachmentQuery.getKeyword())); + + Predicate nameLike = criteriaBuilder.like(root.get("name"), likeCondition); + + predicates.add(criteriaBuilder.or(nameLike)); + } + + return query.where(predicates.toArray(new Predicate[0])).getRestriction(); + }; + } + @Override public Attachment upload(MultipartFile file) { Assert.notNull(file, "Multipart file must not be null"); diff --git a/src/main/java/run/halo/app/web/controller/admin/api/AttachmentController.java b/src/main/java/run/halo/app/web/controller/admin/api/AttachmentController.java index 4e8b8485d..247e96b93 100644 --- a/src/main/java/run/halo/app/web/controller/admin/api/AttachmentController.java +++ b/src/main/java/run/halo/app/web/controller/admin/api/AttachmentController.java @@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import run.halo.app.model.dto.AttachmentOutputDTO; import run.halo.app.model.entity.Attachment; +import run.halo.app.model.params.AttachmentQuery; import run.halo.app.service.AttachmentService; import java.util.LinkedList; @@ -39,8 +40,9 @@ public class AttachmentController { * @return Page */ @GetMapping - public Page pageBy(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable) { - return attachmentService.pageDtosBy(pageable); + public Page pageBy(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable, + AttachmentQuery attachmentQuery) { + return attachmentService.pageDtosBy(pageable, attachmentQuery); } /**