all repos — tsl @ dd8f1b8c6abd14e2097834d0945b683931b13985

task.go (view raw)

 1package main
 2
 3import (
 4	"fmt"
 5	"time"
 6)
 7
 8type TaskPayload struct {
 9	Id      int    `json:"id"`
10	Name    string `json:"name"  binding:"required"`
11	DueDate string `json:"dueDate"`
12	Context string `json:"context"`
13	DoneRaw string `json:"done"`
14}
15
16type Task struct {
17	Id        int
18	CreatedAt string
19	Name      string
20	Done      bool
21	DueDate   string
22	Context   string
23}
24
25func (t Task) String() string {
26	return fmt.Sprintf("%d) %s (%s) [%s]", t.Id, t.Name, t.DueDate, t.Context)
27}
28
29type TasksList struct {
30	tasks map[string]Task
31}
32
33func (tl TasksList) getSortedTasks() map[string][]Task {
34
35	var todayTasks = make([]Task, 0)
36	var soonTasks = make([]Task, 0)
37	var laterTasks = make([]Task, 0)
38
39	now := time.Now()
40	today := time.Date(now.Year(), now.Month(), now.Day()+1, 0, 0, 0, 0, time.Local)
41	inOneWeek := today.AddDate(0, 0, 7)
42
43	for _, task := range tl.tasks {
44		if task.DueDate == "" {
45			todayTasks = append(todayTasks, task)
46			continue
47		}
48
49		dueDate, _ := time.Parse("2006-01-02", task.DueDate)
50
51		if today.After(dueDate) {
52			todayTasks = append(todayTasks, task)
53		} else if inOneWeek.After(dueDate) {
54			soonTasks = append(soonTasks, task)
55		} else {
56			laterTasks = append(laterTasks, task)
57		}
58	}
59
60	return map[string][]Task{
61		"soon":  soonTasks,
62		"today": todayTasks,
63		"later": laterTasks,
64	}
65}