package database import ( "context" "fmt" "os" "path/filepath" "git.eeqj.de/sneak/vaultik/internal/config" "git.eeqj.de/sneak/vaultik/internal/log" "go.uber.org/fx" ) // Module provides database dependencies var Module = fx.Module("database", fx.Provide( provideDatabase, NewRepositories, ), ) func provideDatabase(lc fx.Lifecycle, cfg *config.Config) (*DB, error) { // Ensure the index directory exists indexDir := filepath.Dir(cfg.IndexPath) if err := os.MkdirAll(indexDir, 0700); err != nil { return nil, fmt.Errorf("creating index directory: %w", err) } db, err := New(context.Background(), cfg.IndexPath) if err != nil { return nil, fmt.Errorf("opening database: %w", err) } lc.Append(fx.Hook{ OnStop: func(ctx context.Context) error { log.Debug("Database module OnStop hook called") if err := db.Close(); err != nil { log.Error("Failed to close database in OnStop hook", "error", err) return err } log.Debug("Database closed successfully in OnStop hook") return nil }, }) return db, nil }