diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-14 11:19:50 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-14 11:19:50 +0300 |
| commit | 55593e14ee2a4225d1db1058da9d8d1f663225b6 (patch) | |
| tree | 5fdd9830dd6411f348be28dbed2085e1806148ce /internal/storage | |
| parent | 2bc4e64acf93f04c8871d964d75f041ada57f89d (diff) | |
refactor: use fs.FS for aggregate and DB import (ask v3)
Decouple Aggregator and ImportFromDir from direct os.Open by routing
through io/fs: NewAggregatorFS, ImportFromFS, recordsdir.ListNonEmptyFilesFS.
NewAggregator and ImportFromDir wrap os.DirFS for backward compatibility.
Add fstest.MapFS tests for recordsdir, aggregate, and ImportFromFS.
Made-with: Cursor
Diffstat (limited to 'internal/storage')
| -rw-r--r-- | internal/storage/db.go | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/internal/storage/db.go b/internal/storage/db.go index fe789d6..45eb71a 100644 --- a/internal/storage/db.go +++ b/internal/storage/db.go @@ -5,6 +5,7 @@ import ( "context" "database/sql" "fmt" + "io/fs" "os" "codeberg.org/snonux/goprecords/internal/recordline" @@ -63,10 +64,15 @@ func ResetRecords(ctx context.Context, db *sql.DB) error { } func ImportFromDir(ctx context.Context, db *sql.DB, statsDir string) error { + return ImportFromFS(ctx, db, os.DirFS(statsDir)) +} + +// ImportFromFS reads non-empty .records files from the root of fsys into the database. +func ImportFromFS(ctx context.Context, db *sql.DB, fsys fs.FS) error { if err := ResetRecords(ctx, db); err != nil { return fmt.Errorf("reset records: %w", err) } - files, err := recordsdir.ListNonEmptyFiles(statsDir) + files, err := recordsdir.ListNonEmptyFilesFS(fsys, ".") if err != nil { return fmt.Errorf("read dir: %w", err) } @@ -81,7 +87,7 @@ func ImportFromDir(ctx context.Context, db *sql.DB, statsDir string) error { } defer insert.Close() for _, f := range files { - if err := importFile(ctx, insert, f.Path, f.Host); err != nil { + if err := importFile(ctx, insert, fsys, f.Path, f.Host); err != nil { return err } } @@ -119,10 +125,10 @@ func LoadRecords(ctx context.Context, db *sql.DB) ([]Record, error) { return out, nil } -func importFile(ctx context.Context, insert *sql.Stmt, path, host string) error { - f, err := os.Open(path) +func importFile(ctx context.Context, insert *sql.Stmt, fsys fs.FS, relPath, host string) error { + f, err := fsys.Open(relPath) if err != nil { - return fmt.Errorf("open %s: %w", path, err) + return fmt.Errorf("open %s: %w", relPath, err) } defer f.Close() sc := bufio.NewScanner(f) @@ -141,7 +147,7 @@ func importFile(ctx context.Context, insert *sql.Stmt, path, host string) error } } if err := sc.Err(); err != nil { - return fmt.Errorf("scan %s: %w", path, err) + return fmt.Errorf("scan %s: %w", relPath, err) } return nil } |
