moved stuff to helper

This commit is contained in:
Niklas 2021-08-14 14:13:49 +02:00
parent 447a0647b2
commit 33237b6564
4 changed files with 41 additions and 32 deletions

View File

@ -140,11 +140,7 @@ func graphqlTypes() {
return nil, fmt.Errorf("Failed to parse Source for parent resolve") return nil, fmt.Errorf("Failed to parse Source for parent resolve")
} }
basename := filepath.Dir(source.ID) basename := getPathFromId(source.ID)
if basename == "." {
basename = "/"
}
return Directory{ return Directory{
ID: basename, ID: basename,
@ -213,6 +209,10 @@ func loadFile(p graphql.ResolveParams) (*File, error) {
thunk := loader["getFile"].Load(p.Context, dataloader.StringKey(source.ID)) thunk := loader["getFile"].Load(p.Context, dataloader.StringKey(source.ID))
result, err := thunk() result, err := thunk()
if err != nil {
return nil, err
}
file, ok := result.(*File) file, ok := result.(*File)
if !ok { if !ok {

32
internal/helper.go Normal file
View File

@ -0,0 +1,32 @@
package s3browser
import (
"context"
"fmt"
"path/filepath"
"github.com/graph-gophers/dataloader"
)
func invalidateCache(ctx context.Context, id string) error {
loader, ok := ctx.Value("loader").(map[string]*dataloader.Loader)
if !ok {
return fmt.Errorf("Failed to get loader from context")
}
loader["getFile"].Clear(ctx, dataloader.StringKey(id))
loader["listObjects"].Clear(ctx, dataloader.StringKey(id))
loader["getFiles"].Clear(ctx, dataloader.StringKey(getPathFromId(id)))
return nil
}
func getPathFromId(id string) string {
dir := filepath.Dir(id)
if dir == "." {
return "/"
}
return dir + "/"
}

View File

@ -8,7 +8,6 @@ import (
"net/http" "net/http"
"path/filepath" "path/filepath"
"github.com/graph-gophers/dataloader"
"github.com/graphql-go/graphql" "github.com/graphql-go/graphql"
"github.com/graphql-go/graphql/gqlerrors" "github.com/graphql-go/graphql/gqlerrors"
"github.com/graphql-go/handler" "github.com/graphql-go/handler"
@ -95,7 +94,6 @@ func httpGetFile(ctx context.Context, rw http.ResponseWriter, r *http.Request) {
func httpPostFile(ctx context.Context, rw http.ResponseWriter, r *http.Request) { func httpPostFile(ctx context.Context, rw http.ResponseWriter, r *http.Request) {
s3Client := ctx.Value("s3Client").(*minio.Client) s3Client := ctx.Value("s3Client").(*minio.Client)
loader := ctx.Value("loader").(map[string]*dataloader.Loader)
id := r.URL.Query().Get("id") id := r.URL.Query().Get("id")
@ -115,9 +113,7 @@ func httpPostFile(ctx context.Context, rw http.ResponseWriter, r *http.Request)
} }
// Invalidate cache // Invalidate cache
loader["getFile"].Clear(ctx, dataloader.StringKey(info.Key)) invalidateCache(ctx, info.Key)
loader["listObjects"].Clear(ctx, dataloader.StringKey(info.Key))
loader["getFiles"].Clear(ctx, dataloader.StringKey(filepath.Dir(info.Key)))
rw.WriteHeader(http.StatusCreated) rw.WriteHeader(http.StatusCreated)
} }

View File

@ -3,9 +3,7 @@ package s3browser
import ( import (
"context" "context"
"fmt" "fmt"
"path/filepath"
"github.com/graph-gophers/dataloader"
"github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7"
) )
@ -25,16 +23,7 @@ func deleteMutation(ctx context.Context, id string) error {
} }
// Invalidate cache // Invalidate cache
loader, ok := ctx.Value("loader").(map[string]*dataloader.Loader) return invalidateCache(ctx, id)
if !ok {
return fmt.Errorf("Failed to get loader from context")
}
loader["getFile"].Clear(ctx, dataloader.StringKey(id))
loader["listObjects"].Clear(ctx, dataloader.StringKey(id))
loader["getFiles"].Clear(ctx, dataloader.StringKey(filepath.Dir(id)))
return nil
} }
func copyMutation(ctx context.Context, src, dest string) (*File, error) { func copyMutation(ctx context.Context, src, dest string) (*File, error) {
@ -57,16 +46,8 @@ func copyMutation(ctx context.Context, src, dest string) (*File, error) {
} }
// Invalidate cache // Invalidate cache
// TODO: check error
loader, ok := ctx.Value("loader").(map[string]*dataloader.Loader) invalidateCache(ctx, info.Key)
// TODO: Do we want to error when the operation
// has succeeded but the cache invalidation has failed ?
if ok {
loader["getFile"].Clear(ctx, dataloader.StringKey(info.Key))
loader["listObjects"].Clear(ctx, dataloader.StringKey(info.Key))
loader["getFiles"].Clear(ctx, dataloader.StringKey(filepath.Dir(info.Key)))
}
return &File{ return &File{
ID: info.Key, ID: info.Key,