package cn.reghao.oss.store.db.mapper;

import cn.reghao.oss.storeapi.dto.DeleteFile;
import cn.reghao.oss.storeapi.dto.FileInfo;
import cn.reghao.oss.store.model.po.FileMeta;
import cn.reghao.oss.storeapi.dto.ObjectMeta;
import cn.reghao.jutil.jdk.db.BaseMapper;
import cn.reghao.jutil.jdk.db.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author reghao
 * @date 2022-11-24 11:11:06
 */
@Mapper
public interface FileMetaMapper extends BaseMapper<FileMeta> {
    void updateScopeByObjectName(@Param("scope") int scope, @Param("objectName") String objectName);
    void updateScopeByObjectNames(@Param("scope") int scope, @Param("list") List<String> list);

    List<FileMeta> findFileMetaByPage(Page page);
    FileMeta findBySha256sum(String sha256sum);
    FileMeta findByObjectName(String objectName);
    List<FileMeta> findByObjectNames(List<String> list);
    FileMeta findByObjectId(String objectId);
    List<FileMeta> findByContentId(String contentId);
    ObjectMeta findObjectMeta(String objectName);
    ObjectMeta findObjectMetaById(String objectName);
    List<String> findObjectNames(List<String> list);

    /******************************************************************************************************************/
    List<FileMeta> findAll0(@Param("bucket") String bucket, @Param("max") Integer max, @Param("regex") String regex);
    List<FileMeta> findAll1(@Param("bucket") String bucket, @Param("prefix") String prefix, @Param("max") Integer max);
    List<FileMeta> findAll2(@Param("bucket") String bucket, @Param("prefix") String prefix, @Param("start") String start, @Param("max") Integer max);
    void updateFilename(@Param("objectId") String objectId, @Param("filename") String filename);
    void updateParent(@Param("objectId") String objectId, @Param("pid") String pid);
    void updateBatch(List<FileMeta> list);

    int countByPid(String pid);
    List<FileInfo> findFileInfoByPage(Page page, @Param("pid") String pid);
    List<FileInfo> findFileInfo1ByPage(Page page, @Param("pid") String pid);
    List<FileInfo> findDirectories(String pid);

    int countByKeyword(String keyword);
    List<FileInfo> findKeywordByPage(Page page, @Param("keyword") String keyword);

    int countDeletedFiles();
    List<DeleteFile> findDeletedFileByPage(Page page);
    List<FileMeta> findFileInfos(@Param("objectIds") List<String> objectIds);
    List<FileMeta> findByFilename(@Param("pid") String pid, @Param("filename") String filename);
    List<FileMeta> findByPid(String pid);
    List<String> findObjectPrefix();
}
