| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package tasks
- import (
- "fmt"
- "sync"
- "sync/atomic"
- "time"
- "quickip/internal/model"
- )
- type Service struct {
- counter uint64
- mu sync.RWMutex
- items map[string]model.TaskResult
- }
- func New() *Service {
- return &Service{items: make(map[string]model.TaskResult)}
- }
- func (s *Service) Create() model.TaskResult {
- id := fmt.Sprintf("task-%d-%04d", time.Now().Unix(), atomic.AddUint64(&s.counter, 1))
- item := model.TaskResult{TaskID: id, Status: "pending", Step: "validating", Detail: "任务已创建", Rollback: false}
- s.mu.Lock()
- s.items[id] = item
- s.mu.Unlock()
- return item
- }
- func (s *Service) Update(taskID string, status string, step string, detail string, rollback bool) {
- s.mu.Lock()
- defer s.mu.Unlock()
- item, ok := s.items[taskID]
- if !ok {
- return
- }
- item.Status = status
- item.Step = step
- item.Detail = detail
- item.Rollback = rollback
- s.items[taskID] = item
- }
- func (s *Service) Get(taskID string) (model.TaskResult, bool) {
- s.mu.RLock()
- defer s.mu.RUnlock()
- item, ok := s.items[taskID]
- return item, ok
- }
|