package main import ( "fmt" "time" ) type TaskPayload struct { Id int `json:"id"` Name string `json:"name" binding:"required"` DueDate string `json:"dueDate"` Context string `json:"context"` DoneRaw string `json:"done"` } type Task struct { Id int CreatedAt string Name string Done bool DueDate string Context string } func (t Task) String() string { return fmt.Sprintf("%d) %s (%s) [%s]", t.Id, t.Name, t.DueDate, t.Context) } type TasksList struct { tasks map[string]Task } func (tl TasksList) getSortedTasks() map[string][]Task { var todayTasks = make([]Task, 0) var soonTasks = make([]Task, 0) var laterTasks = make([]Task, 0) now := time.Now() today := time.Date(now.Year(), now.Month(), now.Day()+1, 0, 0, 0, 0, time.Local) inOneWeek := today.AddDate(0, 0, 7) for _, task := range tl.tasks { if task.DueDate == "" { todayTasks = append(todayTasks, task) continue } dueDate, _ := time.Parse("2006-01-02", task.DueDate) if today.After(dueDate) { todayTasks = append(todayTasks, task) } else if inOneWeek.After(dueDate) { soonTasks = append(soonTasks, task) } else { laterTasks = append(laterTasks, task) } } return map[string][]Task{ "soon": soonTasks, "today": todayTasks, "later": laterTasks, } }