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}