Move completed_tasks query to Series model
Assisted-by: Claude Opus 4.6 via Claude Code
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