Quasi finito
This commit is contained in:
+67
-20
@@ -29,33 +29,40 @@ type Database interface {
|
||||
|
||||
// API Keys
|
||||
|
||||
AllAPIKeys() ([]string, error)
|
||||
|
||||
CreateAPIKey() (string, error)
|
||||
CheckAPIKey(key string) error
|
||||
RemoveAPIKey(key string) error
|
||||
AllAPIKeys() ([]string, error)
|
||||
|
||||
// Bucket Operations
|
||||
|
||||
CreateBucket(bucket string, options ...any) error
|
||||
DeleteBucket(bucket string) error
|
||||
|
||||
AllBuckets() ([]string, error)
|
||||
|
||||
CreateBucket(bucket string, settings any) error
|
||||
GetBucketSettings(bucket string) (any, error)
|
||||
SetBucketSettings(bucket string, settings any) error
|
||||
DeleteBucket(bucket string) error
|
||||
|
||||
// Bucket Object Operations
|
||||
|
||||
CreateBucketObject(bucket string, r io.Reader) (string, error)
|
||||
DeleteBucketObject(bucket, id string) error
|
||||
AllBucketObjects(bucket string) ([]string, error)
|
||||
|
||||
CreateBucketObject(bucket string, r io.Reader) (string, error)
|
||||
GetBucketObject(bucket, id string, w io.Writer) error
|
||||
SetBucketObject(bucket, id string, r io.Reader) error
|
||||
DeleteBucketObject(bucket, id string) error
|
||||
}
|
||||
|
||||
AllBucketObjects(bucket string) ([]string, error)
|
||||
type JsonBucketSettings struct {
|
||||
Path string `json:"path"`
|
||||
}
|
||||
|
||||
type jsonBucket struct {
|
||||
Name string `json:"name"`
|
||||
Path string `json:"path"`
|
||||
Objects []string `json:"objects"`
|
||||
|
||||
Settings *JsonBucketSettings `json:"settings"`
|
||||
}
|
||||
|
||||
type jsonDB struct {
|
||||
@@ -207,7 +214,7 @@ func (db *jsonDB) CheckAPIKey(key string) error {
|
||||
}
|
||||
|
||||
if !slices.Contains(db.APIKeys, key) {
|
||||
return fmt.Errorf("the given API key %q is invalid", key)
|
||||
return fmt.Errorf("the given api key %q is invalid", key)
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -220,7 +227,7 @@ func (db *jsonDB) RemoveAPIKey(key string) error {
|
||||
|
||||
i := slices.Index(db.APIKeys, key)
|
||||
if i == -1 {
|
||||
return fmt.Errorf("the given API key %q is invalid", key)
|
||||
return fmt.Errorf("the given api key %q is invalid", key)
|
||||
}
|
||||
|
||||
db.APIKeys = append(db.APIKeys[:i], db.APIKeys[i+1:]...)
|
||||
@@ -232,7 +239,11 @@ func (db *jsonDB) RemoveAPIKey(key string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *jsonDB) CreateBucket(bucket string, options ...any) error {
|
||||
//
|
||||
// Bucket Methods
|
||||
//
|
||||
|
||||
func (db *jsonDB) CreateBucket(bucket string, settings any) error {
|
||||
if err := db.load(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -242,12 +253,15 @@ func (db *jsonDB) CreateBucket(bucket string, options ...any) error {
|
||||
}
|
||||
|
||||
bi := &jsonBucket{
|
||||
Name: bucket,
|
||||
Path: bucket + "/",
|
||||
Name: bucket,
|
||||
Settings: &JsonBucketSettings{
|
||||
Path: bucket + "/",
|
||||
},
|
||||
Objects: []string{},
|
||||
}
|
||||
if len(options) > 0 {
|
||||
bi.Path = options[0].(string)
|
||||
|
||||
if settings != nil {
|
||||
bi.Settings = settings.(*JsonBucketSettings)
|
||||
}
|
||||
|
||||
db.Buckets[bucket] = bi
|
||||
@@ -259,6 +273,39 @@ func (db *jsonDB) CreateBucket(bucket string, options ...any) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *jsonDB) GetBucketSettings(bucket string) (any, error) {
|
||||
if err := db.load(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if _, found := db.Buckets[bucket]; !found {
|
||||
return nil, fmt.Errorf("bucket named %q not found", bucket)
|
||||
}
|
||||
|
||||
return db.Buckets[bucket].Settings, nil
|
||||
}
|
||||
|
||||
func (db *jsonDB) SetBucketSettings(bucket string, settings any) error {
|
||||
if err := db.load(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
b, found := db.Buckets[bucket]
|
||||
if !found {
|
||||
return fmt.Errorf("bucket named %q not found", bucket)
|
||||
}
|
||||
|
||||
b.Settings = settings.(*JsonBucketSettings)
|
||||
|
||||
log.Printf("[Warning] Bucket %q settings changed but bucket migration is not yet implemented (move the folder yourself)", bucket)
|
||||
|
||||
if err := db.store(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *jsonDB) DeleteBucket(bucket string) error {
|
||||
if err := db.load(); err != nil {
|
||||
return err
|
||||
@@ -303,7 +350,7 @@ func (db *jsonDB) CreateBucketObject(bucket string, r io.Reader) (string, error)
|
||||
return "", fmt.Errorf("bucket named %q not found", bucket)
|
||||
}
|
||||
|
||||
id, err := store.Create(b.Path, db.PrefixSize, r)
|
||||
id, err := store.Create(b.Settings.Path, db.PrefixSize, r)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -331,7 +378,7 @@ func (db *jsonDB) SetBucketObject(bucket, id string, r io.Reader) error {
|
||||
return err
|
||||
}
|
||||
|
||||
return store.Update(b.Path, db.PrefixSize, id, r)
|
||||
return store.Update(b.Settings.Path, db.PrefixSize, id, r)
|
||||
}
|
||||
|
||||
func (db *jsonDB) GetBucketObject(bucket, id string, w io.Writer) error {
|
||||
@@ -344,7 +391,7 @@ func (db *jsonDB) GetBucketObject(bucket, id string, w io.Writer) error {
|
||||
return fmt.Errorf("bucket named %q not found", bucket)
|
||||
}
|
||||
|
||||
return store.Read(b.Path, db.PrefixSize, id, w)
|
||||
return store.Read(b.Settings.Path, db.PrefixSize, id, w)
|
||||
}
|
||||
|
||||
func (db *jsonDB) DeleteBucketObject(bucket, id string) error {
|
||||
@@ -357,7 +404,7 @@ func (db *jsonDB) DeleteBucketObject(bucket, id string) error {
|
||||
return fmt.Errorf("bucket named %q not found", bucket)
|
||||
}
|
||||
|
||||
if err := store.Delete(b.Path, db.PrefixSize, id); err != nil {
|
||||
if err := store.Delete(b.Settings.Path, db.PrefixSize, id); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -381,7 +428,7 @@ func (db *jsonDB) AllBucketObjects(bucket string) ([]string, error) {
|
||||
return nil, fmt.Errorf("bucket named %q not found", bucket)
|
||||
}
|
||||
|
||||
objects, err := store.All(b.Path)
|
||||
objects, err := store.All(b.Settings.Path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user