package com.microservices.pms.document.mapper;

import com.microservices.pms.document.domain.PmsDocument;
import com.microservices.pms.document.domain.vo.PmsDocumentFavoriteSearchVo;
import com.microservices.pms.document.domain.vo.PmsDocumentSearchVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 项目管理-文档库Mapper接口
 * 
 * @author wanjia
 * @date 2024-01-08
 */
@Mapper
public interface PmsDocumentMapper 
{
    /**
     * 查询项目管理-文档库
     *
     * @param id           项目管理-文档库主键
     * @param enterpriseId
     * @return 项目管理-文档库
     */
    public PmsDocument selectPmsDocumentByIdAndEnterpriseId(@Param("id") Long id, @Param("enterpriseId") Long enterpriseId, @Param("enterpriseAdmin") Boolean enterpriseAdmin, @Param("currentUserName") String currentUserName);

    /**
     * 查询项目管理-文档库列表
     * 
     * @param pmsDocument 项目管理-文档库
     * @return 项目管理-文档库集合
     */
    public List<PmsDocument> selectPmsDocumentList(PmsDocument pmsDocument);

    /**
     * 新增项目管理-文档库
     * 
     * @param pmsDocument 项目管理-文档库
     * @return 结果
     */
    public int insertPmsDocument(PmsDocument pmsDocument);

    int batchInsertPmsDocument(List<PmsDocument> pmsDocumentList);

    /**
     * 修改项目管理-文档库
     * 
     * @param pmsDocument 项目管理-文档库
     * @return 结果
     */
    public int updatePmsDocument(@Param("pmsDocument") PmsDocument pmsDocument, @Param("enterpriseAdmin") Boolean enterpriseAdmin, @Param("currentUserName") String currentUserName);

    /**
     * 删除项目管理-文档库
     * 
     * @param id 项目管理-文档库主键
     * @return 结果
     */
    public int deletePmsDocumentById(@Param("id") Long id, @Param("enterpriseAdmin") Boolean enterpriseAdmin, @Param("currentUserName") String currentUserName);

    /**
     * 批量删除项目管理-文档库
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deletePmsDocumentByIds(@Param("ids") Long[] ids, @Param("enterpriseAdmin") Boolean enterpriseAdmin, @Param("currentUserName") String currentUserName);

    List<PmsDocument> selectPmsDocumentListBySearchInput(PmsDocumentSearchVo pmsDocumentSearchVo);

    /**
     * 内部查询，无权限区分
     * @param id 文档id
     * @return 文档
     */
    PmsDocument selectPmsDocumentById(@Param("id") Long id);

    int countChildDocByIds(@Param("ids") Long[] ids);

    int countDocumentByNameAndTypeAndParenId(@Param("name") String name, @Param("docType") Integer docType, @Param("parenId") Long parenId, @Param("pmsProjectId") Long pmsProjectId);

    int deletePmsDocumentByIdWithoutAuthCheck(@Param("docId") Long docId);

    Long[] selectLinkedRepoIds(@Param("enterpriseId") Long enterpriseId, @Param("projectId") Long projectId);

    List<PmsDocument> selectPmsFavoriteDocumentList(PmsDocumentFavoriteSearchVo pmsDocumentFavoriteSearchVo);
}
