package com.njcn.rdms.module.project.dal.mysql.product;

import com.njcn.rdms.framework.mybatis.core.mapper.BaseMapperX;
import com.njcn.rdms.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.njcn.rdms.module.project.dal.dataobject.product.ProductRequirementModuleDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 产品需求模块 Mapper
 */
@Mapper
public interface ProductRequirementModuleMapper extends BaseMapperX<ProductRequirementModuleDO> {

    /**
     * 根据产品ID查询模块列表（用于构建模块树）
     */
    default List<ProductRequirementModuleDO> selectListByProductId(Long productId) {
        return selectList(new LambdaQueryWrapperX<ProductRequirementModuleDO>()
                .eq(ProductRequirementModuleDO::getProductId, productId)
                .orderByAsc(ProductRequirementModuleDO::getSort)
                .orderByAsc(ProductRequirementModuleDO::getCreateTime));
    }

    /**
     * 根据父模块ID查询子模块列表
     */
    default List<ProductRequirementModuleDO> selectListByParentId(Long parentId) {
        return selectList(new LambdaQueryWrapperX<ProductRequirementModuleDO>()
                .eq(ProductRequirementModuleDO::getParentId, parentId)
                .orderByAsc(ProductRequirementModuleDO::getSort));
    }

    /**
     * 根据产品ID和模块名称查询模块（用于校验名称唯一性）
     */
    default ProductRequirementModuleDO selectByProductIdAndModuleName(Long productId, String moduleName) {
        return selectOne(new LambdaQueryWrapperX<ProductRequirementModuleDO>()
                .eq(ProductRequirementModuleDO::getProductId, productId)
                .eq(ProductRequirementModuleDO::getModuleName, moduleName));
    }

    /**
     * 根据产品ID和父模块ID查询模块（用于查找产品的"全部需求"根模块）
     */
    default ProductRequirementModuleDO selectByProductIdAndParentId(Long productId, Long parentId) {
        return selectOne(new LambdaQueryWrapperX<ProductRequirementModuleDO>()
                .eq(ProductRequirementModuleDO::getProductId, productId)
                .eq(ProductRequirementModuleDO::getParentId, parentId));
    }

}
