refactor: storage interface

This commit is contained in:
Ilia Denisov
2026-03-13 17:05:37 +02:00
parent 5328f149ed
commit d7e12cbee0
2 changed files with 16 additions and 37 deletions
+16 -13
View File
@@ -1,27 +1,30 @@
// fs implements Storage on filesystem // fs implements galaxy/storage.Storage with filesystem
package fs package fs
import ( import (
"errors" "fmt"
"galaxy/util" "galaxy/util"
) )
type fs struct { type fsStorage struct {
rootPath string path string
} }
// NewStorage returns on-filesystem implementation of the "galaxy/storage.Storage" with root located at rootPath. // NewFS returns on-filesystem implementation of the "galaxy/storage.Storage" with root located at rootPath.
// rootPath must me a directory and has write access to the current user. If initial checks failed, return nil and non-nil error. // rootPath must me a directory and has write access to the current user. If initial checks failed, return nil and non-nil error.
func NewFS(rootPath string) (*fs, error) { func NewStorage(path string) (*fsStorage, error) {
ok, err := util.Writable(rootPath) if ok, err := util.PathExists(path, true); err != nil {
if err != nil { return nil, fmt.Errorf("new storage: check path %q exists: %w", path, err)
return nil, err } else if !ok {
return nil, fmt.Errorf("new storage: path %q does not exists", path)
} }
if !ok { if ok, err := util.Writable(path); err != nil {
return nil, errors.New("user does not have write permissions to the storage root") return nil, fmt.Errorf("new storage: check path %q writable: %w", path, err)
} else if !ok {
return nil, fmt.Errorf("new storage: path %q is not writable", path)
} }
s := &fs{ s := &fsStorage{
rootPath: rootPath, path: path,
} }
return s, nil return s, nil
} }
-24
View File
@@ -1,12 +1,9 @@
package storage package storage
import ( import (
"fmt"
"galaxy/model/client" "galaxy/model/client"
"galaxy/model/order" "galaxy/model/order"
"galaxy/model/report" "galaxy/model/report"
"galaxy/util"
) )
type Storage interface { type Storage interface {
@@ -53,24 +50,3 @@ type UIStorage interface {
// I/O or encoding error may occur, it that case callback func will be called with non-nil error. // I/O or encoding error may occur, it that case callback func will be called with non-nil error.
PutOrder(client.GameID, uint, order.Order, func(error)) PutOrder(client.GameID, uint, order.Order, func(error))
} }
type storage struct {
path string
}
func NewStorage(path string) (*storage, error) {
if ok, err := util.PathExists(path, true); err != nil {
return nil, fmt.Errorf("new storage: check path %q exists: %w", path, err)
} else if !ok {
return nil, fmt.Errorf("new storage: path %q does not exists", path)
}
if ok, err := util.Writable(path); err != nil {
return nil, fmt.Errorf("new storage: check path %q writable: %w", path, err)
} else if !ok {
return nil, fmt.Errorf("new storage: path %q is not writable", path)
}
s := &storage{
path: path,
}
return s, nil
}