graphq fs interface
This commit is contained in:
parent
52999672f8
commit
8df0984b86
8 changed files with 111 additions and 92 deletions
server
.gqlgen.yml
src/delivery/graphql
|
@ -45,3 +45,4 @@ models:
|
|||
|
||||
autobind:
|
||||
- "git.kmsign.ru/royalcat/tstor/server/src/delivery/filter"
|
||||
- "git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql/fs"
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
package model
|
||||
package fs
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql/model"
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/vfs"
|
||||
)
|
||||
|
||||
|
@ -11,7 +12,7 @@ type FsElem interface {
|
|||
IsDir() bool
|
||||
}
|
||||
|
||||
func FillFsEntry(ctx context.Context, e FsElem, fs vfs.Filesystem, path string) (FsEntry, error) {
|
||||
func FillFsEntry(ctx context.Context, e FsElem, fs vfs.Filesystem, path string) (model.FsEntry, error) {
|
||||
switch e.(type) {
|
||||
case *vfs.ResolverFS:
|
||||
e := e.(*vfs.ResolverFS)
|
||||
|
@ -53,12 +54,12 @@ func FillFsEntry(ctx context.Context, e FsElem, fs vfs.Filesystem, path string)
|
|||
}
|
||||
}
|
||||
|
||||
func ReadEntries(ctx context.Context, fs vfs.Filesystem, path string) ([]FsEntry, error) {
|
||||
func ReadEntries(ctx context.Context, fs vfs.Filesystem, path string) ([]model.FsEntry, error) {
|
||||
entries, err := fs.ReadDir(ctx, path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
out := []FsEntry{}
|
||||
out := []model.FsEntry{}
|
||||
for _, e := range entries {
|
||||
entry, err := FillFsEntry(ctx, e, fs, ".")
|
||||
if err != nil {
|
||||
|
@ -69,12 +70,12 @@ func ReadEntries(ctx context.Context, fs vfs.Filesystem, path string) ([]FsEntry
|
|||
return out, nil
|
||||
}
|
||||
|
||||
func (obj *ResolverFs) ResolverEntries(ctx context.Context) ([]FsEntry, error) {
|
||||
func (obj *ResolverFs) ResolverEntries(ctx context.Context) ([]model.FsEntry, error) {
|
||||
entries, err := obj.FS.ReadDir(ctx, ".")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
out := []FsEntry{}
|
||||
out := []model.FsEntry{}
|
||||
for _, e := range entries {
|
||||
entry, err := FillFsEntry(ctx, e, obj.FS, ".")
|
||||
if err != nil {
|
||||
|
@ -85,12 +86,12 @@ func (obj *ResolverFs) ResolverEntries(ctx context.Context) ([]FsEntry, error) {
|
|||
return out, nil
|
||||
}
|
||||
|
||||
func (obj *SimpleDir) SimpleDirEntries(ctx context.Context) ([]FsEntry, error) {
|
||||
func (obj *SimpleDir) SimpleDirEntries(ctx context.Context) ([]model.FsEntry, error) {
|
||||
entries, err := obj.FS.ReadDir(ctx, obj.Path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
out := []FsEntry{}
|
||||
out := []model.FsEntry{}
|
||||
for _, e := range entries {
|
||||
entry, err := FillFsEntry(ctx, e, obj.FS, obj.Path)
|
||||
if err != nil {
|
42
server/src/delivery/graphql/fs/plain.go
Normal file
42
server/src/delivery/graphql/fs/plain.go
Normal file
|
@ -0,0 +1,42 @@
|
|||
package fs
|
||||
|
||||
import (
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql/model"
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/vfs"
|
||||
)
|
||||
|
||||
var _ model.FsEntry = (*SimpleDir)(nil)
|
||||
var _ model.Dir = (*SimpleDir)(nil)
|
||||
|
||||
type SimpleDir struct {
|
||||
Name string `json:"name"`
|
||||
Entries []model.FsEntry `json:"entries"`
|
||||
FS vfs.Filesystem `json:"-"`
|
||||
Path string `json:"-"`
|
||||
}
|
||||
|
||||
func (SimpleDir) IsDir() {}
|
||||
func (this SimpleDir) GetName() string { return this.Name }
|
||||
func (this SimpleDir) GetEntries() []model.FsEntry {
|
||||
if this.Entries == nil {
|
||||
return nil
|
||||
}
|
||||
interfaceSlice := make([]model.FsEntry, 0, len(this.Entries))
|
||||
for _, concrete := range this.Entries {
|
||||
interfaceSlice = append(interfaceSlice, concrete)
|
||||
}
|
||||
return interfaceSlice
|
||||
}
|
||||
|
||||
func (SimpleDir) IsFsEntry() {}
|
||||
|
||||
type SimpleFile struct {
|
||||
Name string `json:"name"`
|
||||
Size int64 `json:"size"`
|
||||
}
|
||||
|
||||
func (SimpleFile) IsFile() {}
|
||||
func (this SimpleFile) GetName() string { return this.Name }
|
||||
func (this SimpleFile) GetSize() int64 { return this.Size }
|
||||
|
||||
func (SimpleFile) IsFsEntry() {}
|
30
server/src/delivery/graphql/fs/resolver.go
Normal file
30
server/src/delivery/graphql/fs/resolver.go
Normal file
|
@ -0,0 +1,30 @@
|
|||
package fs
|
||||
|
||||
import (
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql/model"
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/vfs"
|
||||
)
|
||||
|
||||
var _ model.FsEntry = (*ResolverFs)(nil)
|
||||
var _ model.Dir = (*ResolverFs)(nil)
|
||||
|
||||
type ResolverFs struct {
|
||||
Name string `json:"name"`
|
||||
Entries []model.FsEntry `json:"entries"`
|
||||
FS *vfs.ResolverFS `json:"-"`
|
||||
}
|
||||
|
||||
func (ResolverFs) IsDir() {}
|
||||
func (this ResolverFs) GetName() string { return this.Name }
|
||||
func (this ResolverFs) GetEntries() []model.FsEntry {
|
||||
if this.Entries == nil {
|
||||
return nil
|
||||
}
|
||||
interfaceSlice := make([]model.FsEntry, 0, len(this.Entries))
|
||||
for _, concrete := range this.Entries {
|
||||
interfaceSlice = append(interfaceSlice, concrete)
|
||||
}
|
||||
return interfaceSlice
|
||||
}
|
||||
|
||||
func (ResolverFs) IsFsEntry() {}
|
|
@ -14,6 +14,7 @@ import (
|
|||
"time"
|
||||
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/delivery/filter"
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql/fs"
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql/model"
|
||||
"github.com/99designs/gqlgen/graphql"
|
||||
"github.com/99designs/gqlgen/graphql/introspection"
|
||||
|
@ -107,10 +108,10 @@ type QueryResolver interface {
|
|||
FsEntry(ctx context.Context, path string) (model.FsEntry, error)
|
||||
}
|
||||
type ResolverFSResolver interface {
|
||||
Entries(ctx context.Context, obj *model.ResolverFs) ([]model.FsEntry, error)
|
||||
Entries(ctx context.Context, obj *fs.ResolverFs) ([]model.FsEntry, error)
|
||||
}
|
||||
type SimpleDirResolver interface {
|
||||
Entries(ctx context.Context, obj *model.SimpleDir) ([]model.FsEntry, error)
|
||||
Entries(ctx context.Context, obj *fs.SimpleDir) ([]model.FsEntry, error)
|
||||
}
|
||||
type SubscriptionResolver interface {
|
||||
TaskProgress(ctx context.Context, taskID string) (<-chan model.Progress, error)
|
||||
|
@ -1178,7 +1179,7 @@ func (ec *executionContext) fieldContext_Query___schema(_ context.Context, field
|
|||
return fc, nil
|
||||
}
|
||||
|
||||
func (ec *executionContext) _ResolverFS_name(ctx context.Context, field graphql.CollectedField, obj *model.ResolverFs) (ret graphql.Marshaler) {
|
||||
func (ec *executionContext) _ResolverFS_name(ctx context.Context, field graphql.CollectedField, obj *fs.ResolverFs) (ret graphql.Marshaler) {
|
||||
fc, err := ec.fieldContext_ResolverFS_name(ctx, field)
|
||||
if err != nil {
|
||||
return graphql.Null
|
||||
|
@ -1222,7 +1223,7 @@ func (ec *executionContext) fieldContext_ResolverFS_name(_ context.Context, fiel
|
|||
return fc, nil
|
||||
}
|
||||
|
||||
func (ec *executionContext) _ResolverFS_entries(ctx context.Context, field graphql.CollectedField, obj *model.ResolverFs) (ret graphql.Marshaler) {
|
||||
func (ec *executionContext) _ResolverFS_entries(ctx context.Context, field graphql.CollectedField, obj *fs.ResolverFs) (ret graphql.Marshaler) {
|
||||
fc, err := ec.fieldContext_ResolverFS_entries(ctx, field)
|
||||
if err != nil {
|
||||
return graphql.Null
|
||||
|
@ -1364,7 +1365,7 @@ func (ec *executionContext) fieldContext_Schema_mutation(_ context.Context, fiel
|
|||
return fc, nil
|
||||
}
|
||||
|
||||
func (ec *executionContext) _SimpleDir_name(ctx context.Context, field graphql.CollectedField, obj *model.SimpleDir) (ret graphql.Marshaler) {
|
||||
func (ec *executionContext) _SimpleDir_name(ctx context.Context, field graphql.CollectedField, obj *fs.SimpleDir) (ret graphql.Marshaler) {
|
||||
fc, err := ec.fieldContext_SimpleDir_name(ctx, field)
|
||||
if err != nil {
|
||||
return graphql.Null
|
||||
|
@ -1408,7 +1409,7 @@ func (ec *executionContext) fieldContext_SimpleDir_name(_ context.Context, field
|
|||
return fc, nil
|
||||
}
|
||||
|
||||
func (ec *executionContext) _SimpleDir_entries(ctx context.Context, field graphql.CollectedField, obj *model.SimpleDir) (ret graphql.Marshaler) {
|
||||
func (ec *executionContext) _SimpleDir_entries(ctx context.Context, field graphql.CollectedField, obj *fs.SimpleDir) (ret graphql.Marshaler) {
|
||||
fc, err := ec.fieldContext_SimpleDir_entries(ctx, field)
|
||||
if err != nil {
|
||||
return graphql.Null
|
||||
|
@ -1474,7 +1475,7 @@ func (ec *executionContext) fieldContext_SimpleDir_entries(_ context.Context, fi
|
|||
return fc, nil
|
||||
}
|
||||
|
||||
func (ec *executionContext) _SimpleFile_name(ctx context.Context, field graphql.CollectedField, obj *model.SimpleFile) (ret graphql.Marshaler) {
|
||||
func (ec *executionContext) _SimpleFile_name(ctx context.Context, field graphql.CollectedField, obj *fs.SimpleFile) (ret graphql.Marshaler) {
|
||||
fc, err := ec.fieldContext_SimpleFile_name(ctx, field)
|
||||
if err != nil {
|
||||
return graphql.Null
|
||||
|
@ -1518,7 +1519,7 @@ func (ec *executionContext) fieldContext_SimpleFile_name(_ context.Context, fiel
|
|||
return fc, nil
|
||||
}
|
||||
|
||||
func (ec *executionContext) _SimpleFile_size(ctx context.Context, field graphql.CollectedField, obj *model.SimpleFile) (ret graphql.Marshaler) {
|
||||
func (ec *executionContext) _SimpleFile_size(ctx context.Context, field graphql.CollectedField, obj *fs.SimpleFile) (ret graphql.Marshaler) {
|
||||
fc, err := ec.fieldContext_SimpleFile_size(ctx, field)
|
||||
if err != nil {
|
||||
return graphql.Null
|
||||
|
@ -3850,16 +3851,16 @@ func (ec *executionContext) _Dir(ctx context.Context, sel ast.SelectionSet, obj
|
|||
switch obj := (obj).(type) {
|
||||
case nil:
|
||||
return graphql.Null
|
||||
case model.SimpleDir:
|
||||
case fs.SimpleDir:
|
||||
return ec._SimpleDir(ctx, sel, &obj)
|
||||
case *model.SimpleDir:
|
||||
case *fs.SimpleDir:
|
||||
if obj == nil {
|
||||
return graphql.Null
|
||||
}
|
||||
return ec._SimpleDir(ctx, sel, obj)
|
||||
case model.ResolverFs:
|
||||
case fs.ResolverFs:
|
||||
return ec._ResolverFS(ctx, sel, &obj)
|
||||
case *model.ResolverFs:
|
||||
case *fs.ResolverFs:
|
||||
if obj == nil {
|
||||
return graphql.Null
|
||||
}
|
||||
|
@ -3873,9 +3874,9 @@ func (ec *executionContext) _File(ctx context.Context, sel ast.SelectionSet, obj
|
|||
switch obj := (obj).(type) {
|
||||
case nil:
|
||||
return graphql.Null
|
||||
case model.SimpleFile:
|
||||
case fs.SimpleFile:
|
||||
return ec._SimpleFile(ctx, sel, &obj)
|
||||
case *model.SimpleFile:
|
||||
case *fs.SimpleFile:
|
||||
if obj == nil {
|
||||
return graphql.Null
|
||||
}
|
||||
|
@ -3889,23 +3890,23 @@ func (ec *executionContext) _FsEntry(ctx context.Context, sel ast.SelectionSet,
|
|||
switch obj := (obj).(type) {
|
||||
case nil:
|
||||
return graphql.Null
|
||||
case model.SimpleFile:
|
||||
case fs.SimpleFile:
|
||||
return ec._SimpleFile(ctx, sel, &obj)
|
||||
case *model.SimpleFile:
|
||||
case *fs.SimpleFile:
|
||||
if obj == nil {
|
||||
return graphql.Null
|
||||
}
|
||||
return ec._SimpleFile(ctx, sel, obj)
|
||||
case model.SimpleDir:
|
||||
case fs.SimpleDir:
|
||||
return ec._SimpleDir(ctx, sel, &obj)
|
||||
case *model.SimpleDir:
|
||||
case *fs.SimpleDir:
|
||||
if obj == nil {
|
||||
return graphql.Null
|
||||
}
|
||||
return ec._SimpleDir(ctx, sel, obj)
|
||||
case model.ResolverFs:
|
||||
case fs.ResolverFs:
|
||||
return ec._ResolverFS(ctx, sel, &obj)
|
||||
case *model.ResolverFs:
|
||||
case *fs.ResolverFs:
|
||||
if obj == nil {
|
||||
return graphql.Null
|
||||
}
|
||||
|
@ -4128,7 +4129,7 @@ func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) gr
|
|||
|
||||
var resolverFSImplementors = []string{"ResolverFS", "Dir", "FsEntry"}
|
||||
|
||||
func (ec *executionContext) _ResolverFS(ctx context.Context, sel ast.SelectionSet, obj *model.ResolverFs) graphql.Marshaler {
|
||||
func (ec *executionContext) _ResolverFS(ctx context.Context, sel ast.SelectionSet, obj *fs.ResolverFs) graphql.Marshaler {
|
||||
fields := graphql.CollectFields(ec.OperationContext, sel, resolverFSImplementors)
|
||||
|
||||
out := graphql.NewFieldSet(fields)
|
||||
|
@ -4241,7 +4242,7 @@ func (ec *executionContext) _Schema(ctx context.Context, sel ast.SelectionSet, o
|
|||
|
||||
var simpleDirImplementors = []string{"SimpleDir", "Dir", "FsEntry"}
|
||||
|
||||
func (ec *executionContext) _SimpleDir(ctx context.Context, sel ast.SelectionSet, obj *model.SimpleDir) graphql.Marshaler {
|
||||
func (ec *executionContext) _SimpleDir(ctx context.Context, sel ast.SelectionSet, obj *fs.SimpleDir) graphql.Marshaler {
|
||||
fields := graphql.CollectFields(ec.OperationContext, sel, simpleDirImplementors)
|
||||
|
||||
out := graphql.NewFieldSet(fields)
|
||||
|
@ -4316,7 +4317,7 @@ func (ec *executionContext) _SimpleDir(ctx context.Context, sel ast.SelectionSet
|
|||
|
||||
var simpleFileImplementors = []string{"SimpleFile", "File", "FsEntry"}
|
||||
|
||||
func (ec *executionContext) _SimpleFile(ctx context.Context, sel ast.SelectionSet, obj *model.SimpleFile) graphql.Marshaler {
|
||||
func (ec *executionContext) _SimpleFile(ctx context.Context, sel ast.SelectionSet, obj *fs.SimpleFile) graphql.Marshaler {
|
||||
fields := graphql.CollectFields(ec.OperationContext, sel, simpleFileImplementors)
|
||||
|
||||
out := graphql.NewFieldSet(fields)
|
||||
|
|
|
@ -2,10 +2,6 @@
|
|||
|
||||
package model
|
||||
|
||||
import (
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/vfs"
|
||||
)
|
||||
|
||||
type Dir interface {
|
||||
IsFsEntry()
|
||||
IsDir()
|
||||
|
@ -47,65 +43,11 @@ type Plugin struct {
|
|||
type Query struct {
|
||||
}
|
||||
|
||||
type ResolverFs struct {
|
||||
Name string `json:"name"`
|
||||
Entries []FsEntry `json:"entries"`
|
||||
FS *vfs.ResolverFS `json:"-"`
|
||||
}
|
||||
|
||||
func (ResolverFs) IsDir() {}
|
||||
func (this ResolverFs) GetName() string { return this.Name }
|
||||
func (this ResolverFs) GetEntries() []FsEntry {
|
||||
if this.Entries == nil {
|
||||
return nil
|
||||
}
|
||||
interfaceSlice := make([]FsEntry, 0, len(this.Entries))
|
||||
for _, concrete := range this.Entries {
|
||||
interfaceSlice = append(interfaceSlice, concrete)
|
||||
}
|
||||
return interfaceSlice
|
||||
}
|
||||
|
||||
func (ResolverFs) IsFsEntry() {}
|
||||
|
||||
type Schema struct {
|
||||
Query *Query `json:"query,omitempty"`
|
||||
Mutation *Mutation `json:"mutation,omitempty"`
|
||||
}
|
||||
|
||||
type SimpleDir struct {
|
||||
Name string `json:"name"`
|
||||
Entries []FsEntry `json:"entries"`
|
||||
FS vfs.Filesystem `json:"-"`
|
||||
Path string `json:"-"`
|
||||
}
|
||||
|
||||
func (SimpleDir) IsDir() {}
|
||||
func (this SimpleDir) GetName() string { return this.Name }
|
||||
func (this SimpleDir) GetEntries() []FsEntry {
|
||||
if this.Entries == nil {
|
||||
return nil
|
||||
}
|
||||
interfaceSlice := make([]FsEntry, 0, len(this.Entries))
|
||||
for _, concrete := range this.Entries {
|
||||
interfaceSlice = append(interfaceSlice, concrete)
|
||||
}
|
||||
return interfaceSlice
|
||||
}
|
||||
|
||||
func (SimpleDir) IsFsEntry() {}
|
||||
|
||||
type SimpleFile struct {
|
||||
Name string `json:"name"`
|
||||
Size int64 `json:"size"`
|
||||
}
|
||||
|
||||
func (SimpleFile) IsFile() {}
|
||||
func (this SimpleFile) GetName() string { return this.Name }
|
||||
func (this SimpleFile) GetSize() int64 { return this.Size }
|
||||
|
||||
func (SimpleFile) IsFsEntry() {}
|
||||
|
||||
type Subscription struct {
|
||||
}
|
||||
|
||||
|
|
|
@ -8,16 +8,17 @@ import (
|
|||
"context"
|
||||
|
||||
graph "git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql"
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql/fs"
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql/model"
|
||||
)
|
||||
|
||||
// Entries is the resolver for the entries field.
|
||||
func (r *resolverFSResolver) Entries(ctx context.Context, obj *model.ResolverFs) ([]model.FsEntry, error) {
|
||||
func (r *resolverFSResolver) Entries(ctx context.Context, obj *fs.ResolverFs) ([]model.FsEntry, error) {
|
||||
return obj.ResolverEntries(ctx)
|
||||
}
|
||||
|
||||
// Entries is the resolver for the entries field.
|
||||
func (r *simpleDirResolver) Entries(ctx context.Context, obj *model.SimpleDir) ([]model.FsEntry, error) {
|
||||
func (r *simpleDirResolver) Entries(ctx context.Context, obj *fs.SimpleDir) ([]model.FsEntry, error) {
|
||||
return obj.SimpleDirEntries(ctx)
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ import (
|
|||
"fmt"
|
||||
|
||||
graph "git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql"
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql/fs"
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql/model"
|
||||
)
|
||||
|
||||
|
@ -24,7 +25,7 @@ func (r *queryResolver) FsEntry(ctx context.Context, path string) (model.FsEntry
|
|||
return nil, err
|
||||
}
|
||||
|
||||
return model.FillFsEntry(ctx, entry, r.VFS, path)
|
||||
return fs.FillFsEntry(ctx, entry, r.VFS, path)
|
||||
}
|
||||
|
||||
// Query returns graph.QueryResolver implementation.
|
||||
|
|
Loading…
Reference in a new issue