Files
drive/apps/backend/internal/virtualfs/key_resolver.go

53 lines
1.0 KiB
Go
Raw Normal View History

2025-11-27 20:49:58 +00:00
package virtualfs
import (
"context"
"github.com/get-drexa/drexa/internal/blob"
"github.com/google/uuid"
"github.com/uptrace/bun"
)
type BlobKeyResolver interface {
2025-11-28 22:31:00 +00:00
KeyMode() blob.KeyMode
2025-11-27 20:49:58 +00:00
Resolve(ctx context.Context, node *Node) (blob.Key, error)
}
type FlatKeyResolver struct{}
2025-11-29 17:25:11 +00:00
func NewFlatKeyResolver() *FlatKeyResolver {
return &FlatKeyResolver{}
}
2025-11-28 22:31:00 +00:00
func (r *FlatKeyResolver) KeyMode() blob.KeyMode {
return blob.KeyModeStable
}
2025-11-27 20:49:58 +00:00
func (r *FlatKeyResolver) Resolve(ctx context.Context, node *Node) (blob.Key, error) {
if node.BlobKey == "" {
id, err := uuid.NewV7()
if err != nil {
return "", err
}
return blob.Key(id.String()), nil
}
return node.BlobKey, nil
}
type HierarchicalKeyResolver struct {
db *bun.DB
}
2025-11-28 22:31:00 +00:00
func (r *HierarchicalKeyResolver) KeyMode() blob.KeyMode {
return blob.KeyModeDerived
}
2025-11-27 20:49:58 +00:00
func (r *HierarchicalKeyResolver) Resolve(ctx context.Context, node *Node) (blob.Key, error) {
path, err := buildNodeAbsolutePath(ctx, r.db, node.ID)
if err != nil {
return "", err
}
2025-11-28 22:31:00 +00:00
2025-11-27 20:49:58 +00:00
return blob.Key(path), nil
}