refactor(db): Removed the need to pass CloseMode to Db.Close.

This commit is contained in:
2025-11-07 14:40:57 -05:00
parent 1a3172dc6f
commit 5eaf691dcd
9 changed files with 21 additions and 22 deletions

View File

@@ -13,19 +13,12 @@ import (
_ "modernc.org/sqlite" _ "modernc.org/sqlite"
) )
// CloseMode determines whether or not the in-memory DB should be saved to disk
// before closing the connection.
type CloseMode int
const (
ReadOnly CloseMode = iota
Write
)
type Db struct { type Db struct {
db *sql.DB db *sql.DB
cfg Config cfg Config
features *AvailableFeatures features *AvailableFeatures
// If true, the database will be saved to disk before closing
changed bool
} }
func Open() (*Db, error) { func Open() (*Db, error) {
@@ -37,7 +30,7 @@ func Open() (*Db, error) {
if _, err := os.Stat("/home/spencer/.envr/data.age"); err != nil { if _, err := os.Stat("/home/spencer/.envr/data.age"); err != nil {
// Create a new DB // Create a new DB
db, err := newDb() db, err := newDb()
return &Db{db, *cfg, nil}, err return &Db{db, *cfg, nil, true}, err
} else { } else {
// Open the existing DB // Open the existing DB
tmpFile, err := os.CreateTemp("", "envr-*.db") tmpFile, err := os.CreateTemp("", "envr-*.db")
@@ -59,7 +52,7 @@ func Open() (*Db, error) {
restoreDB(tmpFile.Name(), memDb) restoreDB(tmpFile.Name(), memDb)
return &Db{memDb, *cfg, nil}, nil return &Db{memDb, *cfg, nil, false}, nil
} }
} }
@@ -181,10 +174,10 @@ func (db *Db) List() (results []EnvFile, err error) {
return results, nil return results, nil
} }
func (db *Db) Close(mode CloseMode) error { func (db *Db) Close() error {
defer db.db.Close() defer db.db.Close()
if mode == Write { if db.changed {
// Create tmp file // Create tmp file
tmpFile, err := os.CreateTemp("", "envr-*.db") tmpFile, err := os.CreateTemp("", "envr-*.db")
if err != nil { if err != nil {
@@ -200,6 +193,8 @@ func (db *Db) Close(mode CloseMode) error {
if err := encryptDb(tmpFile.Name(), db.cfg.Keys); err != nil { if err := encryptDb(tmpFile.Name(), db.cfg.Keys); err != nil {
return err return err
} }
db.changed = false
} }
return nil return nil
@@ -289,6 +284,8 @@ func (db *Db) Insert(file EnvFile) error {
return fmt.Errorf("failed to insert env file: %w", err) return fmt.Errorf("failed to insert env file: %w", err)
} }
db.changed = true
return nil return nil
} }
@@ -328,6 +325,8 @@ func (db *Db) Delete(path string) error {
return fmt.Errorf("no file found with path: %s", path) return fmt.Errorf("no file found with path: %s", path)
} }
db.changed = true
return nil return nil
} }

View File

@@ -27,7 +27,7 @@ var backupCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} else { } else {
defer db.Close(app.Write) defer db.Close()
record := app.NewEnvFile(path) record := app.NewEnvFile(path)
if err := db.Insert(record); err != nil { if err := db.Insert(record); err != nil {

View File

@@ -38,7 +38,7 @@ var checkCmd = &cobra.Command{
if err != nil { if err != nil {
return fmt.Errorf("failed to open database: %w", err) return fmt.Errorf("failed to open database: %w", err)
} }
defer db.Close(app.ReadOnly) defer db.Close()
// Check if the path is a file or directory // Check if the path is a file or directory
info, err := os.Stat(absPath) info, err := os.Stat(absPath)

View File

@@ -19,7 +19,7 @@ The check command reports on which binaries are available and which are not.`,
if err != nil { if err != nil {
return err return err
} else { } else {
defer db.Close(app.ReadOnly) defer db.Close()
features := db.Features() features := db.Features()
table := tablewriter.NewWriter(os.Stdout) table := tablewriter.NewWriter(os.Stdout)

View File

@@ -24,7 +24,7 @@ var listCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} }
defer db.Close(app.ReadOnly) defer db.Close()
rows, err := db.List() rows, err := db.List()
if err != nil { if err != nil {

View File

@@ -25,7 +25,7 @@ var removeCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} else { } else {
defer db.Close(app.Write) defer db.Close()
if err := db.Delete(path); err != nil { if err := db.Delete(path); err != nil {
return err return err
} else { } else {

View File

@@ -27,7 +27,7 @@ var restoreCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} else { } else {
defer db.Close(app.ReadOnly) defer db.Close()
record, err := db.Fetch(path) record, err := db.Fetch(path)
if err != nil { if err != nil {

View File

@@ -57,7 +57,7 @@ var scanCmd = &cobra.Command{
// Close database with write mode to persist changes // Close database with write mode to persist changes
if addedCount > 0 { if addedCount > 0 {
err = db.Close(app.Write) err = db.Close()
if err != nil { if err != nil {
return fmt.Errorf("Error saving changes: %v\n", err) return fmt.Errorf("Error saving changes: %v\n", err)
} else { } else {
@@ -65,7 +65,7 @@ var scanCmd = &cobra.Command{
return nil return nil
} }
} else { } else {
err = db.Close(app.ReadOnly) err = db.Close()
if err != nil { if err != nil {
return fmt.Errorf("Error closing database: %v\n", err) return fmt.Errorf("Error closing database: %v\n", err)
} }

View File

@@ -19,7 +19,7 @@ var syncCmd = &cobra.Command{
if err != nil { if err != nil {
return err return err
} else { } else {
defer db.Close(app.Write) defer db.Close()
files, err := db.List() files, err := db.List()
if err != nil { if err != nil {