- 六接口路由:init / chunk / merge / check / task / abort - Repository 接口注入存储,宿主实现 12 方法即可接入 - OnMerged / OnInstantHit 回调衔接宿主业务(如写云端文件表) - Envelope 注入响应封装,与宿主 httpx 解耦 - 与 zogo v0.3.2 的 fileupload 子包同源,后续在此仓库独立演进
33 lines
1.6 KiB
Go
33 lines
1.6 KiB
Go
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
|
|
}
|