From 5bd51b280e47668d56be1be756fd50e767dbc24d Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Thu, 19 Sep 2024 15:57:11 +0300 Subject: [PATCH] add storage service for menu --- internal/storage/storageservice.go | 76 ++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 internal/storage/storageservice.go diff --git a/internal/storage/storageservice.go b/internal/storage/storageservice.go new file mode 100644 index 0000000..4306153 --- /dev/null +++ b/internal/storage/storageservice.go @@ -0,0 +1,76 @@ +package storage + +import ( + "context" + "fmt" + "os" + "path" + + "git.defalsify.org/vise.git/db" + fsdb "git.defalsify.org/vise.git/db/fs" + gdbmdb "git.defalsify.org/vise.git/db/gdbm" + "git.defalsify.org/vise.git/persist" + "git.defalsify.org/vise.git/resource" +) + +func ensureDbDir(dbDir string) error { + err := os.MkdirAll(dbDir, 0700) + if err != nil { + return fmt.Errorf("state dir create exited with error: %v\n", err) + } + return nil +} + +type StorageService interface { + GetPersister(dbDir string, ctx context.Context) (*persist.Persister, error) + GetUserdataDb(dbDir string, ctx context.Context) db.Db + GetResource(resourceDir string, ctx context.Context) (resource.Resource, error) + EnsureDbDir(dbDir string) error +} + +type MenuStorageService struct{} + +func (menuStorageService *MenuStorageService) GetPersister(dbDir string, ctx context.Context) (*persist.Persister, error) { + err := ensureDbDir(dbDir) + if err != nil { + return nil, err + } + store := gdbmdb.NewGdbmDb() + storeFile := path.Join(dbDir, "state.gdbm") + store.Connect(ctx, storeFile) + pr := persist.NewPersister(store) + return pr, nil +} + +func (menuStorageService *MenuStorageService) GetUserdataDb(dbDir string, ctx context.Context) db.Db { + store := gdbmdb.NewGdbmDb() + storeFile := path.Join(dbDir, "userdata.gdbm") + store.Connect(ctx, storeFile) + + return store +} + +func (menuStorageService *MenuStorageService) GetResource(resourceDir string, ctx context.Context) (resource.Resource, error) { + store := fsdb.NewFsDb() + err := store.Connect(ctx, resourceDir) + if err != nil { + return nil, err + } + rfs := resource.NewDbResource(store) + return rfs, nil +} + +func (menuStorageService *MenuStorageService) GetStateStore(dbDir string, ctx context.Context) (db.Db, error) { + store := gdbmdb.NewGdbmDb() + storeFile := path.Join(dbDir, "state.gdbm") + store.Connect(ctx, storeFile) + return store, nil +} + +func (menuStorageService *MenuStorageService) EnsureDbDir(dbDir string) error { + err := os.MkdirAll(dbDir, 0700) + if err != nil { + return fmt.Errorf("state dir create exited with error: %v\n", err) + } + return nil +}