slask
Some checks failed
Build and Publish / BuildAndDeploy (push) Failing after 8s

This commit is contained in:
matst80
2025-05-15 19:28:34 +02:00
commit 19b7299966
8 changed files with 513 additions and 0 deletions

View File

@@ -0,0 +1,78 @@
package storage
import (
"io"
"os"
"path"
)
var (
DiskStorageBasePath = []string{"data"}
)
type DiskStorage struct {
dir string
}
func NewDiskStorage(ids []string) (Storage, error) {
pth := path.Join(DiskStorageBasePath...)
idPth := path.Join(ids...)
dir := path.Join(pth, idPth)
s := &DiskStorage{dir: dir}
err := s.ensureDir()
if err != nil {
return nil, err
}
return s, nil
}
func (ds *DiskStorage) ensureDir() error {
pth := path.Dir(ds.dir + "/")
return os.MkdirAll(pth, 0777)
}
func (ds *DiskStorage) Get(key string) (io.Reader, error) {
if err := ds.ensureDir(); err != nil {
return nil, err
}
f, err := os.Open(path.Join(ds.dir, key))
if err != nil {
return nil, err
}
return f, nil
}
func (ds *DiskStorage) Put(key string, data []byte) error {
if err := ds.ensureDir(); err != nil {
return err
}
f, err := os.Open(path.Join(ds.dir, key))
if err != nil {
return err
}
_, err = f.Write(data)
if err != nil {
return err
}
return f.Close()
}
func (ds *DiskStorage) Delete(key string) error {
// Implement disk storage delete logic here
return os.Remove(path.Join(ds.dir, key))
}
func (ds *DiskStorage) List(prefix string) ([]string, error) {
if err := ds.ensureDir(); err != nil {
return nil, err
}
data, err := os.ReadDir(path.Join(ds.dir, prefix))
if err != nil {
return nil, err
}
res := make([]string, 0, len(data))
for _, file := range data {
res = append(res, file.Name())
}
return res, nil
}

View File

@@ -0,0 +1,44 @@
package storage
import (
"bytes"
"io"
"os"
)
type MemoryStorage struct {
cache map[string][]byte
}
func NewMemoryStorage(ids []string) (Storage, error) {
s := &MemoryStorage{
cache: make(map[string][]byte),
}
return s, nil
}
func (ms *MemoryStorage) Get(key string) (io.Reader, error) {
content, ok := ms.cache[key]
if !ok {
return nil, os.ErrNotExist
}
return bytes.NewReader(content), nil
}
func (ms *MemoryStorage) Put(key string, data []byte) error {
ms.cache[key] = data
return nil
}
func (ms *MemoryStorage) Delete(key string) error {
delete(ms.cache, key)
return nil
}
func (ms *MemoryStorage) List(prefix string) ([]string, error) {
res := make([]string, 0, len(ms.cache))
for file, _ := range ms.cache {
res = append(res, file)
}
return res, nil
}

12
pkg/storage/storage.go Normal file
View File

@@ -0,0 +1,12 @@
package storage
import (
"io"
)
type Storage interface {
Get(key string) (io.Reader, error)
Put(key string, data []byte) error
Delete(key string) error
List(prefix string) ([]string, error)
}