package cn.axzo.workflow.es.service;

import cn.axzo.workflow.common.model.request.es.InstanceSearchReqDTO;
import cn.axzo.workflow.common.model.response.BpmPageResult;
import cn.axzo.workflow.es.model.ProcessInstanceDocument;

import java.util.Collection;

/**
 * 操作流程实例的 ES Service
 *
 * @author wangli
 * @since 2024-09-27 11:06
 */
public interface EsProcessInstanceService {

    /**
     * 创建索引
     * <p>
     * 由于采用的是父子文档, 所以该接口会一并创建
     *
     * @return
     */
    Boolean createIndex();

    /**
     * 删除流程实例索引
     *
     * @return
     */
    Boolean deleteIndex();

    /**
     * 更新流程实例索引
     *
     * @return
     */
    Boolean updateIndex();

    /**
     * 新增流程实例文档
     *
     * @param processInstanceDocument
     * @return 成功的条数
     */
    Integer insert(String routing, ProcessInstanceDocument processInstanceDocument);

    /**
     * 批量新增流程实例文档
     *
     * @param processInstanceDocuments
     * @return
     */
    Integer insertBatch(String routing, Collection<ProcessInstanceDocument> processInstanceDocuments);

    /**
     * 更新流程实例文档
     *
     * @param routing
     * @param processInstanceDocument
     */
    Integer update(String routing, ProcessInstanceDocument processInstanceDocument);

    /**
     * 删除指定文档
     *
     * @param processInstanceId
     * @return
     */
    Integer delete(String processInstanceId);

    BpmPageResult<ProcessInstanceDocument> search(InstanceSearchReqDTO dto);
}
