summaryrefslogtreecommitdiff
path: root/Omni/Task/Core.hs
diff options
context:
space:
mode:
authorBen Sima <ben@bensima.com>2025-11-27 09:59:42 -0500
committerBen Sima <ben@bensima.com>2025-11-27 09:59:42 -0500
commitdbe2b82d2f53761d9504fb4e5cf37f64a2000b7a (patch)
tree505a236b1de090a411b0ce5b6ced034d42530ec7 /Omni/Task/Core.hs
parentf151fbf764670369c54d2b9c03a5d1c8c1bb82fb (diff)
Show activity timeline on task detail page in web UI
All builds pass. Here's a summary of the changes I made: **Omni/Task/Core.hs:** - Added `getActivitiesForTask` function to query task_activity table for **Omni/Jr/Web.hs:** - Added `Data.Time` import for timestamp formatting - Updated `TaskDetailPage` type to include `[TaskCore.TaskActivity]` - Updated `taskDetailHandler` to fetch activities for the task - Added activity timeline rendering in `toHtml` instance for InProgress - Added helper functions: `renderActivity`, `stageClass`, `stageIcon`, ` **Omni/Jr/Web/Style.hs:** - Added `activityTimelineStyles` function with vertical timeline CSS - Added stage-specific colors (claiming=blue, running=yellow, reviewing= - Added dark mode styles for the activity timeline Task-Id: t-148.3
Diffstat (limited to 'Omni/Task/Core.hs')
-rw-r--r--Omni/Task/Core.hs16
1 files changed, 16 insertions, 0 deletions
diff --git a/Omni/Task/Core.hs b/Omni/Task/Core.hs
index d9ea98c..bd70fde 100644
--- a/Omni/Task/Core.hs
+++ b/Omni/Task/Core.hs
@@ -1014,3 +1014,19 @@ logActivity tid stage metadata =
conn
"INSERT INTO task_activity (task_id, stage, message, metadata) VALUES (?, ?, ?, ?)"
(tid, show stage, Nothing :: Maybe Text, metadata)
+
+-- | Get all activities for a task, ordered by timestamp descending
+getActivitiesForTask :: Text -> IO [TaskActivity]
+getActivitiesForTask tid =
+ withDb <| \conn -> do
+ rows <-
+ SQL.query
+ conn
+ "SELECT id, task_id, timestamp, stage, message, metadata \
+ \FROM task_activity WHERE task_id = ? ORDER BY timestamp DESC"
+ (SQL.Only tid) ::
+ IO [(Int, Text, UTCTime, Text, Maybe Text, Maybe Text)]
+ pure [TaskActivity (Just i) taskId ts (readStage stg) msg meta | (i, taskId, ts, stg, msg, meta) <- rows]
+ where
+ readStage :: Text -> ActivityStage
+ readStage s = fromMaybe Claiming (readMaybe (T.unpack s))