package org.xyzh.file.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.dto.system.TbSysFile;

import java.util.List;

/**
 * @description 文件Mapper接口
 * @filename FileMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-16
 */
@Mapper
public interface FileMapper extends BaseMapper<TbSysFile>{

    /**
     * @description 插入文件记录
     * @param file 文件对象
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-16
     */
    int insertFile(@Param("file") TbSysFile file);

    /**
     * @description 根据文件ID查询文件信息
     * @param fileId 文件ID
     * @return TbSysFile 文件信息
     * @author yslg
     * @since 2025-10-16
     */
    TbSysFile selectFileById(@Param("fileId") String fileId);

    /**
     * @description 根据文件ID查询文件信息（包括已删除）
     * @param fileId 文件ID
     * @return TbSysFile 文件信息
     * @author yslg
     * @since 2025-10-16
     */
    TbSysFile selectFileByIdIncludeDeleted(@Param("fileId") String fileId);

    /**
     * @description 根据业务ID查询文件列表
     * @param module 所属模块
     * @param businessId 业务ID
     * @return List<TbSysFile> 文件列表
     * @author yslg
     * @since 2025-10-16
     */
    List<TbSysFile> selectFilesByBusinessId(@Param("module") String module, @Param("businessId") String businessId);

    /**
     * @description 根据上传者查询文件列表
     * @param uploader 上传者用户ID
     * @return List<TbSysFile> 文件列表
     * @author yslg
     * @since 2025-10-16
     */
    List<TbSysFile> selectFilesByUploader(@Param("uploader") String uploader);

    /**
     * @description 逻辑删除文件
     * @param fileId 文件ID
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-16
     */
    int logicDeleteFileById(@Param("fileId") String fileId);

    /**
     * @description 物理删除文件
     * @param fileId 文件ID
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-16
     */
    int deleteFileById(@Param("fileId") String fileId);

    /**
     * @description 批量逻辑删除文件
     * @param fileIds 文件ID列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-16
     */
    int batchLogicDeleteFiles(@Param("fileIds") List<String> fileIds);
}

