Move completed_tasks query to Series model
Assisted-by: Claude Opus 4.6 via Claude Code
change vumtvqpxluwoxozttrupywtukqopspvk
commit d3579dcfe3f1b8f9452ccfd586d3de64a72dd8f0
author Alpha Chen <alpha@kejadlen.dev>
date
parent tqxzsrvt
diff --git a/lib/ketchup/models.rb b/lib/ketchup/models.rb
index 8b75bda..31be73c 100644
--- a/lib/ketchup/models.rb
+++ b/lib/ketchup/models.rb
@@ -19,6 +19,14 @@ class Series < Sequel::Model
     tasks_dataset.where(completed_at: nil).first
   end
 
+  def completed_tasks
+    tasks_dataset
+      .exclude(completed_at: nil)
+      .order(Sequel.desc(:completed_at))
+      .select(:id, :due_date, :completed_at, :note)
+      .all
+  end
+
   def self.create_with_first_task(user:, note:, interval_unit:, interval_count:, first_due_date:)
     DB.transaction do
       series = create(
diff --git a/lib/ketchup/views/dashboard.rb b/lib/ketchup/views/dashboard.rb
index f7bdbc3..04c3c6d 100644
--- a/lib/ketchup/views/dashboard.rb
+++ b/lib/ketchup/views/dashboard.rb
@@ -7,12 +7,11 @@ require_relative "layout"
 module Views
   class Dashboard < Phlex::HTML
     def initialize(current_user:, overdue:, upcoming:,
-                   selected_series: nil, completed_tasks: [])
+                   selected_series: nil)
       @current_user = current_user
       @overdue = overdue
       @upcoming = upcoming
       @selected_series = selected_series
-      @completed_tasks = completed_tasks
     end
 
     def view_template
@@ -144,11 +143,11 @@ module Views
             end
           end
 
-          unless @completed_tasks.empty?
+          unless @selected_series.completed_tasks.empty?
             div(class: "task-history") do
               h3 { "History" }
               ul do
-                @completed_tasks.each do |ct|
+                @selected_series.completed_tasks.each do |ct|
                   li(class: "task-history-item") do
                     div(class: "task-history-row") do
                       span(class: "task-history-check") { "✓" }
diff --git a/lib/ketchup/web.rb b/lib/ketchup/web.rb
index 17ecf72..0b326fe 100644
--- a/lib/ketchup/web.rb
+++ b/lib/ketchup/web.rb
@@ -27,14 +27,6 @@ class Web < Roda
     [overdue, upcoming]
   end
 
-  def completed_tasks_for(series)
-    series.tasks_dataset
-      .exclude(completed_at: nil)
-      .order(Sequel.desc(:completed_at))
-      .select(:id, :due_date, :completed_at, :note)
-      .all
-  end
-
   route do |r|
     r.halt 403 unless current_user
 
@@ -78,8 +70,7 @@ class Web < Roda
 
         Views::Dashboard.new(
           current_user:, overdue:, upcoming:,
-          selected_series: series,
-          completed_tasks: completed_tasks_for(series)
+          selected_series: series
         ).call
       end