package com.mossle.api.keyvalue;

import java.util.List;
import java.util.Map;

import com.mossle.core.page.Page;

public interface KeyValueConnector {
    /**
     * 根据code查询数据. 认为code是业务主键.
     */
    Record findByCode(String code);

    /**
     * 根据ref查询数据. 认为ref是流程实例id.
     */
    Record findByRef(String ref);

    /**
     * 根据businessKey查询.
     */
    Record findByBusinessKey(String businessKey);

    /**
     * 保存数据.
     */
    void save(Record record);

    /**
     * 根据code删除数据.
     */
    void removeByCode(String code);

    /**
     * 根据businessKey删除.
     */
    void removeByBusinessKey(String businessKey);

    /**
     * 查询对应状态的，某人发起的数据，主要用来查询草稿.
     */
    List<Record> findByStatus(int status, String userId, String tenantId);

    /**
     * 分页查询.
     */
    Page pagedQuery(Page page, int status, String userId, String tenantId);

    /**
     * 查询总数.
     */
    long findTotalCount(String category, String q, String tenantId);

    /**
     * 分页查询数据.
     */
    List<Map<String, Object>> findResult(Page page, String category,
            String tenantId, Map<String, String> headers, String q);

    /**
     * 复制数据.
     */
    Record copyRecord(Record original, List<String> fields);
}
