summaryrefslogtreecommitdiff
path: root/internal/handlers/timeline_logic.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/handlers/timeline_logic.go')
-rw-r--r--internal/handlers/timeline_logic.go22
1 files changed, 22 insertions, 0 deletions
diff --git a/internal/handlers/timeline_logic.go b/internal/handlers/timeline_logic.go
index b90b61e..e3da760 100644
--- a/internal/handlers/timeline_logic.go
+++ b/internal/handlers/timeline_logic.go
@@ -12,6 +12,22 @@ import (
"task-dashboard/internal/store"
)
+// setChainBadge populates item.ChainPosition/ChainTotal (1-indexed) when
+// task belongs to a chain. Only the currently-unlocked task in a chain ever
+// reaches BuildTimeline (locked tasks are excluded at the store layer), so
+// this runs at most once per chain per call -- no memoization needed.
+func setChainBadge(s *store.Store, item *models.TimelineItem, task models.Task) {
+ if task.ChainID == "" {
+ return
+ }
+ tasks, err := s.GetChainTasks(task.ChainID)
+ if err != nil {
+ return
+ }
+ item.ChainPosition = task.ChainPosition + 1
+ item.ChainTotal = len(tasks)
+}
+
// BuildTimeline aggregates and normalizes data into a timeline structure
func BuildTimeline(ctx context.Context, s *store.Store, start, end time.Time) ([]models.TimelineItem, error) {
var items []models.TimelineItem
@@ -159,6 +175,8 @@ func BuildTimeline(ctx context.Context, s *store.Store, start, end time.Time) ([
Source: "doot",
ProjectColor: projectColors[task.ProjectID],
}
+ setChainBadge(s, &item, task)
+ item.BucketState = task.BucketState
item.ComputeDaySection(now)
items = append(items, item)
}
@@ -183,6 +201,8 @@ func BuildTimeline(ctx context.Context, s *store.Store, start, end time.Time) ([
Source: "doot",
ProjectColor: projectColors[task.ProjectID],
}
+ setChainBadge(s, &item, task)
+ item.BucketState = task.BucketState
item.ComputeDaySection(now)
items = append(items, item)
}
@@ -205,6 +225,8 @@ func BuildTimeline(ctx context.Context, s *store.Store, start, end time.Time) ([
IsAllDay: true,
ProjectColor: projectColors[task.ProjectID],
}
+ setChainBadge(s, &item, task)
+ item.BucketState = task.BucketState
item.ComputeDaySection(now)
items = append(items, item)
}