package com.microservices.file.mapper;

import com.microservices.file.domain.FileUploadChunk;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 文件分片记录Mapper接口
 *
 * @author microservices
 */
@Mapper
public interface FileUploadChunkMapper {

    /**
     * 查询文件分片记录
     *
     * @param uploadId    上传ID
     * @param chunkNumber 分片序号
     * @return 文件分片记录
     */
    FileUploadChunk selectByUploadIdAndChunkNumber(@Param("uploadId") String uploadId, @Param("chunkNumber") Integer chunkNumber);

    /**
     * 查询文件分片记录列表
     *
     * @param uploadId 上传ID
     * @return 文件分片记录集合
     */
    List<FileUploadChunk> selectByUploadId(String uploadId);

    /**
     * 查询文件分片记录列表
     *
     * @param fileUploadChunk 文件分片记录
     * @return 文件分片记录集合
     */
    List<FileUploadChunk> selectChunkList(FileUploadChunk fileUploadChunk);

    /**
     * 新增文件分片记录
     *
     * @param fileUploadChunk 文件分片记录
     * @return 结果
     */
    int insertChunk(FileUploadChunk fileUploadChunk);

    /**
     * 批量新增文件分片记录
     *
     * @param chunks 文件分片记录集合
     * @return 结果
     */
    int batchInsertChunks(List<FileUploadChunk> chunks);

    /**
     * 修改文件分片记录
     *
     * @param fileUploadChunk 文件分片记录
     * @return 结果
     */
    int updateChunk(FileUploadChunk fileUploadChunk);

    /**
     * 删除文件分片记录
     *
     * @param uploadId 上传ID
     * @return 结果
     */
    int deleteByUploadId(String uploadId);

    /**
     * 批量删除文件分片记录
     *
     * @param uploadIds 需要删除的上传ID集合
     * @return 结果
     */
    int deleteByUploadIds(String[] uploadIds);

    /**
     * 统计已上传的分片数
     *
     * @param uploadId 上传ID
     * @return 已上传分片数
     */
    int countUploadedChunks(String uploadId);

    /**
     * 查询指定状态的分片列表
     *
     * @param uploadId 上传ID
     * @param status   状态
     * @return 文件分片记录集合
     */
    List<FileUploadChunk> selectByUploadIdAndStatus(@Param("uploadId") String uploadId, @Param("status") String status);

    /**
     * 批量更新分片状态
     *
     * @param uploadId 上传ID
     * @param status   状态
     * @return 结果
     */
    int updateStatusByUploadId(@Param("uploadId") String uploadId, @Param("status") String status);
}
