refactor(store): add error returns to all Store interface methods
Every Store method now returns an error. Callers handle errors gracefully — TUI logs to event log, server returns HTTP 500, monitor engine logs and retries. All rows.Scan() errors are now checked in sqlstore.go instead of silently appending corrupt data. - GetSites, GetAllAlerts, GetAllUsers return ([]T, error) - GetAlert returns (AlertConfig, error) instead of (AlertConfig, bool) - AddSite, UpdateSite, DeleteSite, etc. all return error - SaveCheck, LoadAllHistory, ExportData return error - ~25 caller sites updated across tui, server, monitor, main
This commit is contained in:
@@ -2,6 +2,7 @@ package tui
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"go-upkeep/internal/monitor"
|
||||
"go-upkeep/internal/store"
|
||||
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
@@ -277,9 +278,13 @@ func (m *Model) submitAlertForm() {
|
||||
}
|
||||
|
||||
if m.editID > 0 {
|
||||
store.Get().UpdateAlert(m.editID, d.Name, d.AlertType, settings)
|
||||
if err := store.Get().UpdateAlert(m.editID, d.Name, d.AlertType, settings); err != nil {
|
||||
monitor.AddLog("Update alert failed: " + err.Error())
|
||||
}
|
||||
} else {
|
||||
store.Get().AddAlert(d.Name, d.AlertType, settings)
|
||||
if err := store.Get().AddAlert(d.Name, d.AlertType, settings); err != nil {
|
||||
monitor.AddLog("Add alert failed: " + err.Error())
|
||||
}
|
||||
}
|
||||
m.state = stateDashboard
|
||||
}
|
||||
|
||||
@@ -361,12 +361,14 @@ func (m *Model) initSiteHuhForm() tea.Cmd {
|
||||
}
|
||||
|
||||
alertOpts := []huh.Option[string]{huh.NewOption("None", "0")}
|
||||
if store.Get() != nil {
|
||||
for _, a := range store.Get().GetAllAlerts() {
|
||||
alertOpts = append(alertOpts, huh.NewOption(
|
||||
fmt.Sprintf("%s (%s)", a.Name, a.Type),
|
||||
strconv.Itoa(a.ID),
|
||||
))
|
||||
if s := store.Get(); s != nil {
|
||||
if alerts, err := s.GetAllAlerts(); err == nil {
|
||||
for _, a := range alerts {
|
||||
alertOpts = append(alertOpts, huh.NewOption(
|
||||
fmt.Sprintf("%s (%s)", a.Name, a.Type),
|
||||
strconv.Itoa(a.ID),
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -558,10 +560,14 @@ func (m *Model) submitSiteForm() {
|
||||
}
|
||||
|
||||
if m.editID > 0 {
|
||||
store.Get().UpdateSite(site)
|
||||
if err := store.Get().UpdateSite(site); err != nil {
|
||||
monitor.AddLog("Update site failed: " + err.Error())
|
||||
}
|
||||
monitor.UpdateSiteConfig(site)
|
||||
} else {
|
||||
store.Get().AddSite(site)
|
||||
if err := store.Get().AddSite(site); err != nil {
|
||||
monitor.AddLog("Add site failed: " + err.Error())
|
||||
}
|
||||
}
|
||||
m.state = stateDashboard
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package tui
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"go-upkeep/internal/monitor"
|
||||
"go-upkeep/internal/store"
|
||||
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
@@ -145,9 +146,13 @@ func (m *Model) initUserHuhForm() tea.Cmd {
|
||||
func (m *Model) submitUserForm() {
|
||||
d := m.userFormData
|
||||
if m.editID > 0 {
|
||||
store.Get().UpdateUser(m.editID, d.Username, d.PublicKey, d.Role)
|
||||
if err := store.Get().UpdateUser(m.editID, d.Username, d.PublicKey, d.Role); err != nil {
|
||||
monitor.AddLog("Update user failed: " + err.Error())
|
||||
}
|
||||
} else {
|
||||
store.Get().AddUser(d.Username, d.PublicKey, d.Role)
|
||||
if err := store.Get().AddUser(d.Username, d.PublicKey, d.Role); err != nil {
|
||||
monitor.AddLog("Add user failed: " + err.Error())
|
||||
}
|
||||
}
|
||||
m.state = stateUsers
|
||||
}
|
||||
|
||||
+19
-9
@@ -107,17 +107,23 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
if keyMsg, ok := msg.(tea.KeyMsg); ok {
|
||||
switch keyMsg.String() {
|
||||
case "y", "Y":
|
||||
if store.Get() != nil {
|
||||
if s := store.Get(); s != nil {
|
||||
switch m.deleteTab {
|
||||
case 0:
|
||||
store.Get().DeleteSite(m.deleteID)
|
||||
if err := s.DeleteSite(m.deleteID); err != nil {
|
||||
monitor.AddLog("Delete site failed: " + err.Error())
|
||||
}
|
||||
monitor.RemoveSite(m.deleteID)
|
||||
m.adjustCursor(len(m.sites) - 1)
|
||||
case 1:
|
||||
store.Get().DeleteAlert(m.deleteID)
|
||||
if err := s.DeleteAlert(m.deleteID); err != nil {
|
||||
monitor.AddLog("Delete alert failed: " + err.Error())
|
||||
}
|
||||
m.adjustCursor(len(m.alerts) - 1)
|
||||
case 3:
|
||||
store.Get().DeleteUser(m.deleteID)
|
||||
if err := s.DeleteUser(m.deleteID); err != nil {
|
||||
monitor.AddLog("Delete user failed: " + err.Error())
|
||||
}
|
||||
m.adjustCursor(len(m.users) - 1)
|
||||
}
|
||||
}
|
||||
@@ -313,8 +319,8 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
site := m.sites[m.cursor]
|
||||
monitor.ToggleSitePause(site.ID)
|
||||
site.Paused = !site.Paused
|
||||
if store.Get() != nil {
|
||||
store.Get().UpdateSitePaused(site.ID, site.Paused)
|
||||
if s := store.Get(); s != nil {
|
||||
_ = s.UpdateSitePaused(site.ID, site.Paused)
|
||||
}
|
||||
m.refreshData()
|
||||
}
|
||||
@@ -464,10 +470,14 @@ func (m *Model) refreshData() {
|
||||
}
|
||||
ordered = append(ordered, ungrouped...)
|
||||
m.sites = ordered
|
||||
if store.Get() != nil {
|
||||
m.alerts = store.Get().GetAllAlerts()
|
||||
if s := store.Get(); s != nil {
|
||||
if alerts, err := s.GetAllAlerts(); err == nil {
|
||||
m.alerts = alerts
|
||||
}
|
||||
if m.isAdmin {
|
||||
m.users = store.Get().GetAllUsers()
|
||||
if users, err := s.GetAllUsers(); err == nil {
|
||||
m.users = users
|
||||
}
|
||||
}
|
||||
}
|
||||
m.logViewport.SetContent(strings.Join(monitor.GetLogs(), "\n"))
|
||||
|
||||
Reference in New Issue
Block a user