diff --git a/backend/internal/storage/store.go b/backend/internal/storage/store.go index 4a1fc9b..588071e 100644 --- a/backend/internal/storage/store.go +++ b/backend/internal/storage/store.go @@ -130,7 +130,14 @@ func (s *Store) upsertChapterIdx(ctx context.Context, slug string, ref domain.Ch return err } if len(items) == 0 { - postErr := s.pb.post(ctx, "/api/collections/chapters_idx/records", payload, nil) + // Set created timestamp on first insert so recentlyUpdatedBooks can sort by it. + insertPayload := map[string]any{ + "slug": slug, + "number": ref.Number, + "title": ref.Title, + "created": time.Now().UTC().Format(time.RFC3339), + } + postErr := s.pb.post(ctx, "/api/collections/chapters_idx/records", insertPayload, nil) if postErr == nil { return nil } diff --git a/scripts/pb-init-v3.sh b/scripts/pb-init-v3.sh index ca932f4..888d233 100755 --- a/scripts/pb-init-v3.sh +++ b/scripts/pb-init-v3.sh @@ -149,9 +149,10 @@ create "books" '{ create "chapters_idx" '{ "name":"chapters_idx","type":"base","fields":[ - {"name":"slug", "type":"text", "required":true}, - {"name":"number","type":"number", "required":true}, - {"name":"title", "type":"text"} + {"name":"slug", "type":"text", "required":true}, + {"name":"number", "type":"number", "required":true}, + {"name":"title", "type":"text"}, + {"name":"created", "type":"date"} ]}' create "ranking" '{ @@ -326,9 +327,12 @@ add_field "app_users" "polar_customer_id" "text" add_field "app_users" "polar_subscription_id" "text" add_field "user_library" "shelf" "text" add_field "user_sessions" "device_fingerprint" "text" +add_field "chapters_idx" "created" "date" # ── 6. Indexes ──────────────────────────────────────────────────────────────── add_index "chapters_idx" "idx_chapters_idx_slug_number" \ "CREATE UNIQUE INDEX idx_chapters_idx_slug_number ON chapters_idx (slug, number)" +add_index "chapters_idx" "idx_chapters_idx_created" \ + "CREATE INDEX idx_chapters_idx_created ON chapters_idx (created)" log "done"