refactor(store): clarify journal configuration and workspace errors

Add a declarative journal configuration check and wrap workspace database errors with package context.

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-04 08:41:28 +00:00
parent 3742da144e
commit cc8bebb8e0
3 changed files with 28 additions and 5 deletions

View file

@ -127,6 +127,14 @@ func (storeInstance *Store) JournalConfiguration() JournalConfiguration {
}
}
// Usage example: `if storeInstance.JournalConfigured() { fmt.Println("journal is enabled") }`
func (storeInstance *Store) JournalConfigured() bool {
if storeInstance == nil {
return false
}
return storeInstance.journalConfiguration != (journalConfiguration{})
}
// Usage example: `config := storeInstance.Config(); fmt.Println(config.DatabasePath, config.PurgeInterval)`
func (storeInstance *Store) Config() StoreConfig {
if storeInstance == nil {

View file

@ -121,6 +121,21 @@ func TestStore_JournalConfiguration_Good(t *testing.T) {
}, config)
}
func TestStore_JournalConfigured_Good(t *testing.T) {
storeInstance, err := New(":memory:", WithJournal("http://127.0.0.1:8086", "core", "events"))
require.NoError(t, err)
defer storeInstance.Close()
assert.True(t, storeInstance.JournalConfigured())
assert.False(t, (*Store)(nil).JournalConfigured())
unconfiguredStore, err := New(":memory:")
require.NoError(t, err)
defer unconfiguredStore.Close()
assert.False(t, unconfiguredStore.JournalConfigured())
}
func TestStore_Config_Good(t *testing.T) {
storeInstance, err := NewConfigured(StoreConfig{
DatabasePath: ":memory:",

View file

@ -475,24 +475,24 @@ func (storeInstance *Store) commitWorkspaceAggregate(workspaceName string, field
func openWorkspaceDatabase(databasePath string) (*sql.DB, error) {
workspaceDatabase, err := sql.Open("sqlite", databasePath)
if err != nil {
return nil, err
return nil, core.E("store.openWorkspaceDatabase", "open workspace database", err)
}
workspaceDatabase.SetMaxOpenConns(1)
if _, err := workspaceDatabase.Exec("PRAGMA journal_mode=WAL"); err != nil {
workspaceDatabase.Close()
return nil, err
return nil, core.E("store.openWorkspaceDatabase", "set WAL journal mode", err)
}
if _, err := workspaceDatabase.Exec("PRAGMA busy_timeout=5000"); err != nil {
workspaceDatabase.Close()
return nil, err
return nil, core.E("store.openWorkspaceDatabase", "set busy timeout", err)
}
if _, err := workspaceDatabase.Exec(createWorkspaceEntriesTableSQL); err != nil {
workspaceDatabase.Close()
return nil, err
return nil, core.E("store.openWorkspaceDatabase", "create workspace entries table", err)
}
if _, err := workspaceDatabase.Exec(createWorkspaceEntriesViewSQL); err != nil {
workspaceDatabase.Close()
return nil, err
return nil, core.E("store.openWorkspaceDatabase", "create workspace entries view", err)
}
return workspaceDatabase, nil
}