package com.persagy.proxy.adm.service;

import com.persagy.dmp.basic.model.QueryCriteria;
import com.persagy.proxy.adm.request.AdmQueryCriteria;
import com.persagy.proxy.adm.request.AdmResponse;
import com.persagy.proxy.common.entity.InstanceUrlParam;

import java.util.List;

/**
 * ADM 通用接口
 * @author Charlie Yu
 * @date 2021-08-16
 */
public interface IAdmBaseService<T> {

    /**
     * 查询
     * @param context
     * @param request
     * @param clazz
     * @return
     */
    AdmResponse doQuery(InstanceUrlParam context, AdmQueryCriteria request, Class<T> clazz);

    /**
     * 新增
     * @param context
     * @param clazz
     * @param voList
     * @return
     */
    List<T> doInsert(InstanceUrlParam context, Class<T> clazz, List<T> voList);

    /**
     * 修改
     * @param context
     * @param clazz
     * @param voList
     * @return
     */
    List<T> doUpdate(InstanceUrlParam context, Class<T> clazz, List<T> voList);

    /**
     * 删除
     * @param context
     * @param voList
     * @return
     */
    void doDelete(InstanceUrlParam context, List<T> voList);

    /**
     * 根据物理世界对象查询条件查询
     * @param request
     * @return
     */
    AdmResponse doQuery(InstanceUrlParam context, QueryCriteria request, Class<T> clazz);

    /**
     * 条件查询标记计算关系
     * @param context
     * @param dmpRequest
     * @param clazz
     * @return
     */
    AdmResponse doQueryRelationProjectCal(InstanceUrlParam context, QueryCriteria dmpRequest, Class<T> clazz);

    /**
     * 修改标记计算关系
     * @param context
     * @param clazz
     * @param voList
     * @return
     */
    List<T> doUpdateRelationProjectCal(InstanceUrlParam context, Class<T> clazz, List<T> voList);

    /**
     * 查询对象类型
     * @param context
     * @param request
     * @param clazz
     * @return
     */
    AdmResponse queryObjectClassCode(InstanceUrlParam context, AdmQueryCriteria request, Class<T> clazz);
}
