package com.jwipc.aggregation;

import java.util.List;
import java.util.Set;

/**
 * 数据聚合服务
 *
 * @author zhangjie
 * @version 2023.07
 * @since back_repo 2023.07
 */
public interface ModelAggregationService {

  // 在解析数据


  /**
   * 集成所有与主表实体对象相关的关联数据列表。包括本地和远程服务的一对多聚合等。 也可以根据实际需求，单独调用该函数所包含的各个数据集成函数。
   *
   * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。
   */
  <M> void processRelationAggregation(List<M> resultList);

  /**
   * 集成所有与主表实体对象相关的关联数据列表。包括本地和远程服务的一对多聚合等。 也可以根据实际需求，单独调用该函数所包含的各个数据集成函数。
   *
   * @param resultList   主表实体对象列表。数据集成将直接作用于该对象列表。
   * @param ignoreFields 该集合中的字段，即便包含注解也不会在当前调用中进行数据组装。
   */
  <M> void processRelationAggregation(List<M> resultList, Set<String> ignoreFields);


  /**
   * 集成所有与主表实体对象相关的关联数据列表。包括本地和远程服务的一对多聚合等。 也可以根据实际需求，单独调用该函数所包含的各个数据集成函数。
   *
   * @param resultObj    主表实体。数据集成将直接作用于该对象列表。
   */
  <M> void processRelationAggregation(M resultObj);

  /**
   * 集成所有与主表实体对象相关的关联数据列表。包括本地和远程服务的一对多聚合等。 也可以根据实际需求，单独调用该函数所包含的各个数据集成函数。
   *
   * @param resultObj    主表实体。数据集成将直接作用于该对象列表。
   */
  <M> void processRelationAggregation(M resultObj, Set<String> ignoreFields);


}
