package tasksch import ( "sort" "sync" "time" ) var ( defTaskMan TaskMan defLastHours = 24 ) type TaskMan struct { taskList map[string]ITask locker sync.RWMutex } func init() { defTaskMan.taskList = make(map[string]ITask) } func (m *TaskMan) GetTasks(taskID string, fromStatus, toStatus int, lastHours int, createdBy string) (taskList TaskList) { m.locker.RLock() defer m.locker.RUnlock() if lastHours == 0 { lastHours = defLastHours } lastTime := time.Now().Add(time.Duration(-lastHours) * time.Hour).Unix() for k, v := range m.taskList { status := v.GetStatus() if !((createdBy != "" && createdBy != v.GetCreatedBy()) || (taskID != "" && taskID != k) || status < fromStatus || status > toStatus || v.GetCreatedAt().Unix() < lastTime) { taskList = append(taskList, v) } } sort.Sort(TaskList(taskList)) return taskList } func (m *TaskMan) ManageTask(task ITask) ITask { m.locker.Lock() defer m.locker.Unlock() m.taskList[task.GetID()] = task return task } func GetTasks(taskID string, fromStatus, toStatus int, lastHours int, createdBy string) (taskList TaskList) { return defTaskMan.GetTasks(taskID, fromStatus, toStatus, lastHours, createdBy) } func ManageTask(task ITask) ITask { return defTaskMan.ManageTask(task) }