Initial commit: DreamDict HTTP dictionary service
Go-based dictionary backend providing word validation, definitions, synonyms, and cross-language translation for English, French, and Portuguese. Designed as a self-hosted replacement for Wordnik, backing GogoBee. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
29
internal/loader/loader.go
Normal file
29
internal/loader/loader.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package loader
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Loader interface {
|
||||
Name() string
|
||||
Load(db *sql.DB, dataDir string) error
|
||||
}
|
||||
|
||||
func Run(db *sql.DB, dataDir string, loaders []Loader, skip map[string]bool) error {
|
||||
for _, l := range loaders {
|
||||
if skip[l.Name()] {
|
||||
slog.Info("skipping loader", "name", l.Name())
|
||||
continue
|
||||
}
|
||||
slog.Info("running loader", "name", l.Name())
|
||||
start := time.Now()
|
||||
if err := l.Load(db, dataDir); err != nil {
|
||||
return fmt.Errorf("loader %s: %w", l.Name(), err)
|
||||
}
|
||||
slog.Info("loader complete", "name", l.Name(), "elapsed", time.Since(start).Round(time.Millisecond))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user