package handlers import ( "net/http" "time" "github.com/gin-gonic/gin" "qr-scanner/services" ) type CancelHandler struct { store *services.TaskStore } func NewCancelHandler(store *services.TaskStore) *CancelHandler { return &CancelHandler{store: store} } func (h *CancelHandler) Cancel(c *gin.Context) { taskID := c.Param("taskID") task, ok := h.store.Get(taskID) if !ok { fail(c, http.StatusNotFound, "任务不存在") return } if task.Status == services.TaskExpired { fail(c, http.StatusGone, "任务已过期") return } if task.Status == services.TaskProcessing { task.Cancel() respondOK(c, gin.H{"taskID": task.ID, "status": task.Status}) return } if task.Status == services.TaskUploaded { task.Status = services.TaskCanceled task.EndedAt = time.Now() task.UpdatedAt = time.Now() if task.Progress != nil { task.Progress.Complete(string(task.Status)) } h.store.Put(task) } respondOK(c, gin.H{"taskID": task.ID, "status": task.Status}) }