package fileupload // Repository 存储层接口:宿主用自己的 ORM/表结构实现(本包不关心表怎么建)。 // 语义约定: // - Delete* 为软删或硬删由宿主决定,但之后 GetTaskByUploadID / 各 Find 必须查不到; // - Find* 只需返回未删除的最新一条。 type Repository interface { // CreateTask 新建任务(Id/UploadId 已由本包赋值)。 CreateTask(t *TaskInfo) error // GetTaskByUploadID 按 uploadId 取未删除任务;不存在返回 (nil, nil)。 GetTaskByUploadID(uploadID string) (*TaskInfo, error) // FindDoneByMD5 取同 MD5 已完成任务中最新一条;无则 (nil, nil)。 FindDoneByMD5(md5 string) (*TaskInfo, error) // FindUploadingByMD5 取同 MD5 进行中任务一条(断点续传);无则 (nil, nil)。 FindUploadingByMD5(md5 string) (*TaskInfo, error) // UpdateTaskMerged 合并成功:置 done 并记录 storagePath。 UpdateTaskMerged(id int64, storagePath string) error // SetTaskStatus 更新任务状态(error/merging 等流转)。 SetTaskStatus(id int64, status string) error // CountChunks 统计任务已确认分片数。 CountChunks(uploadID string) (int, error) // ChunkExists 分片是否已确认(幂等依据)。 ChunkExists(uploadID string, index int32) (bool, error) // CreateChunk 写入分片确认记录。 CreateChunk(c *ChunkInfo) error // ListChunkIndexes 已确认分片序号升序。 ListChunkIndexes(uploadID string) ([]int32, error) // DeleteChunks 删除任务的分片记录。 DeleteChunks(uploadID string) error // DeleteTaskByUploadID 删除任务。 DeleteTaskByUploadID(uploadID string) error }