qr-scanner/handlers/cancel.go

50 lines
996 B
Go

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})
}