Agate/stores/stores.go

43 lines
1.3 KiB
Go

package stores
import (
"fmt"
"path/filepath"
"gitea.unprism.ru/KRBL/Agate/store"
"gitea.unprism.ru/KRBL/Agate/store/filesystem"
"gitea.unprism.ru/KRBL/Agate/store/sqlite"
)
// NewDefaultMetadataStore creates a new SQLite-based metadata store.
func NewDefaultMetadataStore(metadataDir string) (store.MetadataStore, error) {
dbPath := filepath.Join(metadataDir, "snapshots.db")
return sqlite.NewSQLiteStore(dbPath)
}
// NewDefaultBlobStore creates a new filesystem-based blob store.
func NewDefaultBlobStore(blobsDir string) (store.BlobStore, error) {
return filesystem.NewFileSystemStore(blobsDir)
}
// InitDefaultStores initializes both metadata and blob stores with default implementations.
// Returns the initialized stores or an error if initialization fails.
func InitDefaultStores(baseDir string) (store.MetadataStore, store.BlobStore, error) {
metadataDir := filepath.Join(baseDir, "metadata")
blobsDir := filepath.Join(baseDir, "blobs")
metadataStore, err := NewDefaultMetadataStore(metadataDir)
if err != nil {
return nil, nil, fmt.Errorf("failed to initialize metadata store: %w", err)
}
blobStore, err := NewDefaultBlobStore(blobsDir)
if err != nil {
// Clean up if blob store initialization fails
metadataStore.Close()
return nil, nil, fmt.Errorf("failed to initialize blob store: %w", err)
}
return metadataStore, blobStore, nil
}