func (m *ScanManager) Update(obj *scan.Scan) error { now := time.Now().UTC() obj.Dates.Updated = &now switch st := obj.Status; true { case st == scan.StatusQueued: if obj.Queued == nil { obj.Queued = &now } case st == scan.StatusFinished || st == scan.StatusFailed: if obj.Finished == nil { obj.Finished = &now } case st == scan.StatusWorking: if obj.Started == nil { obj.Started = &now } } return m.col.UpdateId(obj.Id, obj) }