refactor: 全面重构代码并加白话注释,移动全局并行,去掉去向/重复记录
- 重构后端与前端,全程大白话注释(不懂程序也能看懂) - 移动阶段改为全局并行(MoveAll,工人数=CPU核心数) - 去掉记录每个文件搬去哪了(删除去向回填,解决写库卡顿) - 去掉重复文件标记与统计:重复判定改为 MD5+路径都相同才算,重复则原地忽略不移动;MD5 相同但路径不同仍照常搬 - 媒体库去掉归类目录列,看板去掉重复/归类分布统计
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
// 扫描整理的三个接口:开始扫描、查进度、实时进度(WebSocket)。
|
||||
// 它们不干活,只负责"接话、转达",真正的活由 service 里的 ScanService 干。
|
||||
package api
|
||||
|
||||
import (
|
||||
@@ -8,23 +10,26 @@ import (
|
||||
"kenaito-media-picker/internal/service"
|
||||
)
|
||||
|
||||
// ScanController 扫描整理接口
|
||||
// ScanController 扫描相关接口的"窗口"。
|
||||
type ScanController struct {
|
||||
service *service.ScanService
|
||||
service *service.ScanService // 背后干活的管家
|
||||
}
|
||||
|
||||
// NewScanController 创建扫描控制器
|
||||
// NewScanController 创建扫描控制器,并注入干活的服务。
|
||||
func NewScanController(svc *service.ScanService) *ScanController {
|
||||
return &ScanController{service: svc}
|
||||
}
|
||||
|
||||
// scanStartReq 扫描启动请求;dir 为空时使用服务当前运行目录,destDir 为空时默认输出到扫描目录下的「KMP已整理」
|
||||
// scanStartReq 点击"开始扫描"时前端传过来的参数:
|
||||
// - dir:要扫描哪个目录(留空就扫程序当前所在目录)
|
||||
// - destDir:整理好的文件放哪(留空默认放扫描目录下的「KMP已整理」)
|
||||
type scanStartReq struct {
|
||||
Dir string `json:"dir"`
|
||||
DestDir string `json:"destDir"`
|
||||
}
|
||||
|
||||
// Start POST /api/scan/start 触发一次扫描整理
|
||||
// Start 处理 POST /api/scan/start:触发一次扫描整理。
|
||||
// 成功后立刻返回当前进度快照,好让页面马上进入"扫描中"状态。
|
||||
func (c *ScanController) Start(ctx *gin.Context) {
|
||||
var req scanStartReq
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
@@ -38,7 +43,7 @@ func (c *ScanController) Start(ctx *gin.Context) {
|
||||
Success(ctx, c.service.Status())
|
||||
}
|
||||
|
||||
// Status GET /api/scan/status 查询扫描状态与日志
|
||||
// Status 处理 GET /api/scan/status:查询当前扫描状态与日志(轮询兜底用的)。
|
||||
func (c *ScanController) Status(ctx *gin.Context) {
|
||||
Success(ctx, c.service.Status())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user