package com.microservices.pms.product.service;

import com.microservices.common.core.web.page.GenericsTableDataInfo;
import com.microservices.pms.product.domain.PmsProductModule;
import com.microservices.pms.product.domain.vo.PmsProductModuleDataVo;
import com.microservices.pms.product.domain.vo.TreeSelect;

import java.util.List;

/**
 * 产品模块Service接口
 * 
 * @author otto
 * @date 2023-10-10
 */
public interface IPmsProductModuleService 
{
    /**
     * 查询产品模块
     *
     * @param id        产品模块主键
     * @param checkRole
     * @return 产品模块
     */
    public PmsProductModule selectPmsProductModuleById(Long id, boolean checkRole);

    /**
     * 查询产品模块列表
     *
     * @param pmsProductModule 产品模块
     * @param type
     * @return 产品模块集合
     */
    public GenericsTableDataInfo<PmsProductModuleDataVo> selectPmsProductModuleList(PmsProductModule pmsProductModule, int type);

    /**
     * 新增产品模块
     *
     * @param pmsProductModule 产品模块
     * @param type
     * @return 结果
     */
    public Long insertPmsProductModule(PmsProductModule pmsProductModule, int type);

    /**
     * 修改产品模块
     * 
     * @param pmsProductModule 产品模块
     * @return 结果
     */
    public int updatePmsProductModule(PmsProductModule pmsProductModule);

    /**
     * 删除产品模块信息
     * 
     * @param id 产品模块主键
     * @return 结果
     */
    public int deletePmsProductModuleById(Long id);

    /**
     * 构建模块的树状结构
     *
     * @param pmsProductModule 模块搜索条件
     * @param type             模块类型（1产品模块 2测试用例模块, 3测试单，实际取测试用例模块）
     * @return 模块树状结构
     */
    List<TreeSelect> selectPmsProductModuleTreeList(PmsProductModule pmsProductModule, int type);

    /**
     * 查询模块及模块子级ID列表
     * @param parentModuleId 父级模块ID
     * @return 模块ID列表
     */
    List<Long> selectChildrenPmsProductModuleIdList(Long parentModuleId);

    /**
     * 删除产品下所有模块
     *
     * @param productIdentifier 产品标识
     */
    void deletePmsProductModuleByProductIdentifier(String productIdentifier);

    /**
     * 同步产品模块到测试用例模块
     *
     * @param testcaseId 测试用例ID
     * @return 是否成功
     */
    boolean syncByProductModule(Long projectId);
}
