refactor(db): thread context.Context through all Store methods
Enables request-scoped cancellation, timeouts, and graceful shutdown for all database operations across API handlers, CLI commands, and TUI.
This commit is contained in:
+21
-20
@@ -1,6 +1,7 @@
|
||||
package tui
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
@@ -82,7 +83,7 @@ type errMsg struct {
|
||||
|
||||
func loadEntities(store *db.Store, params db.ListParams) tea.Cmd {
|
||||
return func() tea.Msg {
|
||||
entities, err := store.List(params)
|
||||
entities, err := store.List(context.Background(), params)
|
||||
if err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
@@ -92,7 +93,7 @@ func loadEntities(store *db.Store, params db.ListParams) tea.Cmd {
|
||||
|
||||
func createEntity(store *db.Store, e *db.Entity) tea.Cmd {
|
||||
return func() tea.Msg {
|
||||
if err := store.Create(e); err != nil {
|
||||
if err := store.Create(context.Background(), e); err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
return entityCreatedMsg{e}
|
||||
@@ -101,7 +102,7 @@ func createEntity(store *db.Store, e *db.Entity) tea.Cmd {
|
||||
|
||||
func deleteEntity(store *db.Store, id string) tea.Cmd {
|
||||
return func() tea.Msg {
|
||||
if _, err := store.SoftDelete(id); err != nil {
|
||||
if _, err := store.SoftDelete(context.Background(), id); err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
return entityDeletedMsg{id}
|
||||
@@ -118,10 +119,10 @@ func toggleTodo(store *db.Store, e *db.Entity) tea.Cmd {
|
||||
update = db.EntityUpdate{ClearCompleted: true}
|
||||
}
|
||||
|
||||
if err := store.Update(e.ID, &update); err != nil {
|
||||
if err := store.Update(context.Background(), e.ID, &update); err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
updated, err := store.Get(e.ID)
|
||||
updated, err := store.Get(context.Background(), e.ID)
|
||||
if err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
@@ -137,10 +138,10 @@ func pinEntity(store *db.Store, e *db.Entity) tea.Cmd {
|
||||
return func() tea.Msg {
|
||||
newPinned := !e.Pinned
|
||||
update := db.EntityUpdate{Pinned: &newPinned}
|
||||
if err := store.Update(e.ID, &update); err != nil {
|
||||
if err := store.Update(context.Background(), e.ID, &update); err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
updated, err := store.Get(e.ID)
|
||||
updated, err := store.Get(context.Background(), e.ID)
|
||||
if err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
@@ -155,7 +156,7 @@ func pinEntity(store *db.Store, e *db.Entity) tea.Cmd {
|
||||
func promoteEntity(store *db.Store, id string, ct db.CardType, body string) tea.Cmd {
|
||||
return func() tea.Msg {
|
||||
cd := carddata.GenerateCardData(ct, body)
|
||||
if err := store.Promote(id, ct, cd); err != nil {
|
||||
if err := store.Promote(context.Background(), id, ct, cd); err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
return entityPromotedMsg{id, ct}
|
||||
@@ -164,7 +165,7 @@ func promoteEntity(store *db.Store, id string, ct db.CardType, body string) tea.
|
||||
|
||||
func demoteEntity(store *db.Store, id string) tea.Cmd {
|
||||
return func() tea.Msg {
|
||||
if err := store.Demote(id); err != nil {
|
||||
if err := store.Demote(context.Background(), id); err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
return entityDemotedMsg{id}
|
||||
@@ -176,7 +177,7 @@ func copyToClipboard(store *db.Store, e *db.Entity) tea.Cmd {
|
||||
if err := clipboard.WriteAll(e.Body); err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
if err := store.IncrementUse(e.ID); err != nil {
|
||||
if err := store.IncrementUse(context.Background(), e.ID); err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
return entityCopiedMsg{}
|
||||
@@ -185,7 +186,7 @@ func copyToClipboard(store *db.Store, e *db.Entity) tea.Cmd {
|
||||
|
||||
func loadTags(store *db.Store) tea.Cmd {
|
||||
return func() tea.Msg {
|
||||
tags, err := store.ListTags(false)
|
||||
tags, err := store.ListTags(context.Background(), false)
|
||||
if err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
@@ -195,7 +196,7 @@ func loadTags(store *db.Store) tea.Cmd {
|
||||
|
||||
func loadRailTags(store *db.Store) tea.Cmd {
|
||||
return func() tea.Msg {
|
||||
tags, err := store.ListTags(false)
|
||||
tags, err := store.ListTags(context.Background(), false)
|
||||
if err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
@@ -243,7 +244,7 @@ func editInEditor(store *db.Store, e *db.Entity) tea.Cmd {
|
||||
}
|
||||
|
||||
update := db.EntityUpdate{Body: &newBody}
|
||||
if updateErr := store.Update(e.ID, &update); updateErr != nil {
|
||||
if updateErr := store.Update(context.Background(), e.ID, &update); updateErr != nil {
|
||||
return editorFinishedMsg{updateErr}
|
||||
}
|
||||
|
||||
@@ -253,7 +254,7 @@ func editInEditor(store *db.Store, e *db.Entity) tea.Cmd {
|
||||
|
||||
func loadAbsorbSources(store *db.Store, targetID string) tea.Cmd {
|
||||
return func() tea.Msg {
|
||||
entities, err := store.List(db.DefaultListParams())
|
||||
entities, err := store.List(context.Background(), db.DefaultListParams())
|
||||
if err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
@@ -263,7 +264,7 @@ func loadAbsorbSources(store *db.Store, targetID string) tea.Cmd {
|
||||
|
||||
func absorbEntity(store *db.Store, targetID, sourceID string) tea.Cmd {
|
||||
return func() tea.Msg {
|
||||
if err := store.Absorb(targetID, sourceID); err != nil {
|
||||
if err := store.Absorb(context.Background(), targetID, sourceID); err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
return entityAbsorbedMsg{targetID}
|
||||
@@ -273,7 +274,7 @@ func absorbEntity(store *db.Store, targetID, sourceID string) tea.Cmd {
|
||||
func persistSteps(store *db.Store, entityID string, stepsJSON string) tea.Cmd {
|
||||
return func() tea.Msg {
|
||||
update := db.EntityUpdate{CardData: &stepsJSON}
|
||||
if err := store.Update(entityID, &update); err != nil {
|
||||
if err := store.Update(context.Background(), entityID, &update); err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
return stepsPersistedMsg{}
|
||||
@@ -285,7 +286,7 @@ func copyResolved(store *db.Store, entityID string, resolved string) tea.Cmd {
|
||||
if err := clipboard.WriteAll(resolved); err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
if err := store.IncrementUse(entityID); err != nil {
|
||||
if err := store.IncrementUse(context.Background(), entityID); err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
return templateCopiedMsg{}
|
||||
@@ -300,7 +301,7 @@ func clearStatusAfter(d time.Duration, seq int) tea.Cmd {
|
||||
|
||||
func loadStaleEntities(store *db.Store) tea.Cmd {
|
||||
return func() tea.Msg {
|
||||
entities, err := store.List(staleParams())
|
||||
entities, err := store.List(context.Background(), staleParams())
|
||||
if err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
@@ -310,7 +311,7 @@ func loadStaleEntities(store *db.Store) tea.Cmd {
|
||||
|
||||
func stumbleDismiss(store *db.Store, id string) tea.Cmd {
|
||||
return func() tea.Msg {
|
||||
if _, err := store.SoftDelete(id); err != nil {
|
||||
if _, err := store.SoftDelete(context.Background(), id); err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
return stumbleActionMsg{"dismissed"}
|
||||
@@ -321,7 +322,7 @@ func stumblePin(store *db.Store, id string) tea.Cmd {
|
||||
return func() tea.Msg {
|
||||
pinned := true
|
||||
update := db.EntityUpdate{Pinned: &pinned}
|
||||
if err := store.Update(id, &update); err != nil {
|
||||
if err := store.Update(context.Background(), id, &update); err != nil {
|
||||
return errMsg{err}
|
||||
}
|
||||
return stumbleActionMsg{"pinned"}
|
||||
|
||||
Reference in New Issue
Block a user