Files
halo-plugin-moments/src/main/java/run/halo/moments/search/MomentHaloDocumentsProvider.java
T
2026-07-19 01:16:28 +08:00

57 lines
1.9 KiB
Java

package run.halo.moments.search;
import static run.halo.moments.ModelConst.SEARCH_DEFAULT_PAGE_SIZE;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Flux;
import run.halo.app.extension.ListOptions;
import run.halo.app.extension.ListResult;
import run.halo.app.extension.PageRequest;
import run.halo.app.extension.PageRequestImpl;
import run.halo.app.extension.ReactiveExtensionClient;
import run.halo.app.extension.index.query.QueryFactory;
import run.halo.app.extension.router.selector.FieldSelector;
import run.halo.app.search.HaloDocument;
import run.halo.app.search.HaloDocumentsProvider;
import run.halo.moments.Moment;
/**
* @author LIlGG
*/
@Component
@RequiredArgsConstructor
public class MomentHaloDocumentsProvider implements HaloDocumentsProvider {
public static final String MOMENT_DOCUMENT_TYPE = "moment.moment.halo.run";
private final ReactiveExtensionClient client;
private final DocumentConverter converter;
@Override
public Flux<HaloDocument> fetchAll() {
var options = new ListOptions();
var notDeleted = QueryFactory.isNull("metadata.deletionTimestamp");
var approved = QueryFactory.equal("spec.approved", "true");
options.setFieldSelector(FieldSelector.of(notDeleted).andQuery(approved));
var pageRequest = createPageRequest();
// make sure the moments are approved and not deleted.
return client.listBy(Moment.class, options, pageRequest)
.map(ListResult::getItems)
.flatMapMany(Flux::fromIterable)
.flatMap(converter::convert);
}
@Override
public String getType() {
return MOMENT_DOCUMENT_TYPE;
}
private PageRequest createPageRequest() {
return PageRequestImpl.of(1, SEARCH_DEFAULT_PAGE_SIZE,
Sort.by("metadata.creationTimestamp", "metadata.name"));
}
}