up
This commit is contained in:
parent
8df0984b86
commit
1ff168a931
7 changed files with 57 additions and 61 deletions
server/src/delivery/graphql
|
@ -3,16 +3,27 @@ package fs
|
|||
import (
|
||||
"context"
|
||||
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql/model"
|
||||
"git.kmsign.ru/royalcat/tstor/server/src/vfs"
|
||||
)
|
||||
|
||||
type Dir interface {
|
||||
IsFsEntry()
|
||||
IsDir()
|
||||
GetName() string
|
||||
GetEntries() []FsEntry
|
||||
}
|
||||
|
||||
type FsEntry interface {
|
||||
IsFsEntry()
|
||||
GetName() string
|
||||
}
|
||||
|
||||
type FsElem interface {
|
||||
Name() string
|
||||
IsDir() bool
|
||||
}
|
||||
|
||||
func FillFsEntry(ctx context.Context, e FsElem, fs vfs.Filesystem, path string) (model.FsEntry, error) {
|
||||
func FillFsEntry(ctx context.Context, e FsElem, fs vfs.Filesystem, path string) (FsEntry, error) {
|
||||
switch e.(type) {
|
||||
case *vfs.ResolverFS:
|
||||
e := e.(*vfs.ResolverFS)
|
||||
|
@ -54,12 +65,12 @@ func FillFsEntry(ctx context.Context, e FsElem, fs vfs.Filesystem, path string)
|
|||
}
|
||||
}
|
||||
|
||||
func ReadEntries(ctx context.Context, fs vfs.Filesystem, path string) ([]model.FsEntry, error) {
|
||||
func ReadEntries(ctx context.Context, fs vfs.Filesystem, path string) ([]FsEntry, error) {
|
||||
entries, err := fs.ReadDir(ctx, path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
out := []model.FsEntry{}
|
||||
out := []FsEntry{}
|
||||
for _, e := range entries {
|
||||
entry, err := FillFsEntry(ctx, e, fs, ".")
|
||||
if err != nil {
|
||||
|
@ -70,12 +81,12 @@ func ReadEntries(ctx context.Context, fs vfs.Filesystem, path string) ([]model.F
|
|||
return out, nil
|
||||
}
|
||||
|
||||
func (obj *ResolverFs) ResolverEntries(ctx context.Context) ([]model.FsEntry, error) {
|
||||
func (obj *ResolverFs) ResolverEntries(ctx context.Context) ([]FsEntry, error) {
|
||||
entries, err := obj.FS.ReadDir(ctx, ".")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
out := []model.FsEntry{}
|
||||
out := []FsEntry{}
|
||||
for _, e := range entries {
|
||||
entry, err := FillFsEntry(ctx, e, obj.FS, ".")
|
||||
if err != nil {
|
||||
|
@ -86,12 +97,12 @@ func (obj *ResolverFs) ResolverEntries(ctx context.Context) ([]model.FsEntry, er
|
|||
return out, nil
|
||||
}
|
||||
|
||||
func (obj *SimpleDir) SimpleDirEntries(ctx context.Context) ([]model.FsEntry, error) {
|
||||
func (obj *SimpleDir) SimpleDirEntries(ctx context.Context) ([]FsEntry, error) {
|
||||
entries, err := obj.FS.ReadDir(ctx, obj.Path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
out := []model.FsEntry{}
|
||||
out := []FsEntry{}
|
||||
for _, e := range entries {
|
||||
entry, err := FillFsEntry(ctx, e, obj.FS, obj.Path)
|
||||
if err != nil {
|
||||
|
|
|
@ -1,27 +1,26 @@
|
|||
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)
|
||||
var _ FsEntry = (*SimpleDir)(nil)
|
||||
var _ Dir = (*SimpleDir)(nil)
|
||||
|
||||
type SimpleDir struct {
|
||||
Name string `json:"name"`
|
||||
Entries []model.FsEntry `json:"entries"`
|
||||
FS vfs.Filesystem `json:"-"`
|
||||
Path string `json:"-"`
|
||||
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() []model.FsEntry {
|
||||
func (this SimpleDir) GetEntries() []FsEntry {
|
||||
if this.Entries == nil {
|
||||
return nil
|
||||
}
|
||||
interfaceSlice := make([]model.FsEntry, 0, len(this.Entries))
|
||||
interfaceSlice := make([]FsEntry, 0, len(this.Entries))
|
||||
for _, concrete := range this.Entries {
|
||||
interfaceSlice = append(interfaceSlice, concrete)
|
||||
}
|
||||
|
|
|
@ -1,26 +1,25 @@
|
|||
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)
|
||||
var _ FsEntry = (*ResolverFs)(nil)
|
||||
var _ Dir = (*ResolverFs)(nil)
|
||||
|
||||
type ResolverFs struct {
|
||||
Name string `json:"name"`
|
||||
Entries []model.FsEntry `json:"entries"`
|
||||
Entries []FsEntry `json:"entries"`
|
||||
FS *vfs.ResolverFS `json:"-"`
|
||||
}
|
||||
|
||||
func (ResolverFs) IsDir() {}
|
||||
func (this ResolverFs) GetName() string { return this.Name }
|
||||
func (this ResolverFs) GetEntries() []model.FsEntry {
|
||||
func (this ResolverFs) GetEntries() []FsEntry {
|
||||
if this.Entries == nil {
|
||||
return nil
|
||||
}
|
||||
interfaceSlice := make([]model.FsEntry, 0, len(this.Entries))
|
||||
interfaceSlice := make([]FsEntry, 0, len(this.Entries))
|
||||
for _, concrete := range this.Entries {
|
||||
interfaceSlice = append(interfaceSlice, concrete)
|
||||
}
|
||||
|
|
|
@ -105,13 +105,13 @@ type MutationResolver interface {
|
|||
}
|
||||
type QueryResolver interface {
|
||||
Plugins(ctx context.Context) ([]*model.Plugin, error)
|
||||
FsEntry(ctx context.Context, path string) (model.FsEntry, error)
|
||||
FsEntry(ctx context.Context, path string) (fs.FsEntry, error)
|
||||
}
|
||||
type ResolverFSResolver interface {
|
||||
Entries(ctx context.Context, obj *fs.ResolverFs) ([]model.FsEntry, error)
|
||||
Entries(ctx context.Context, obj *fs.ResolverFs) ([]fs.FsEntry, error)
|
||||
}
|
||||
type SimpleDirResolver interface {
|
||||
Entries(ctx context.Context, obj *fs.SimpleDir) ([]model.FsEntry, error)
|
||||
Entries(ctx context.Context, obj *fs.SimpleDir) ([]fs.FsEntry, error)
|
||||
}
|
||||
type SubscriptionResolver interface {
|
||||
TaskProgress(ctx context.Context, taskID string) (<-chan model.Progress, error)
|
||||
|
@ -1019,9 +1019,9 @@ func (ec *executionContext) _Query_fsEntry(ctx context.Context, field graphql.Co
|
|||
if resTmp == nil {
|
||||
return graphql.Null
|
||||
}
|
||||
res := resTmp.(model.FsEntry)
|
||||
res := resTmp.(fs.FsEntry)
|
||||
fc.Result = res
|
||||
return ec.marshalOFsEntry2gitᚗkmsignᚗruᚋroyalcatᚋtstorᚋserverᚋsrcᚋdeliveryᚋgraphqlᚋmodelᚐFsEntry(ctx, field.Selections, res)
|
||||
return ec.marshalOFsEntry2gitᚗkmsignᚗruᚋroyalcatᚋtstorᚋserverᚋsrcᚋdeliveryᚋgraphqlᚋfsᚐFsEntry(ctx, field.Selections, res)
|
||||
}
|
||||
|
||||
func (ec *executionContext) fieldContext_Query_fsEntry(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
|
||||
|
@ -1243,7 +1243,7 @@ func (ec *executionContext) _ResolverFS_entries(ctx context.Context, field graph
|
|||
|
||||
directive1 := func(ctx context.Context) (any, error) {
|
||||
if ec.directives.Resolver == nil {
|
||||
var zeroVal []model.FsEntry
|
||||
var zeroVal []fs.FsEntry
|
||||
return zeroVal, errors.New("directive resolver is not implemented")
|
||||
}
|
||||
return ec.directives.Resolver(ctx, obj, directive0)
|
||||
|
@ -1256,10 +1256,10 @@ func (ec *executionContext) _ResolverFS_entries(ctx context.Context, field graph
|
|||
if tmp == nil {
|
||||
return nil, nil
|
||||
}
|
||||
if data, ok := tmp.([]model.FsEntry); ok {
|
||||
if data, ok := tmp.([]fs.FsEntry); ok {
|
||||
return data, nil
|
||||
}
|
||||
return nil, fmt.Errorf(`unexpected type %T from directive, should be []git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql/model.FsEntry`, tmp)
|
||||
return nil, fmt.Errorf(`unexpected type %T from directive, should be []git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql/fs.FsEntry`, tmp)
|
||||
})
|
||||
if err != nil {
|
||||
ec.Error(ctx, err)
|
||||
|
@ -1271,9 +1271,9 @@ func (ec *executionContext) _ResolverFS_entries(ctx context.Context, field graph
|
|||
}
|
||||
return graphql.Null
|
||||
}
|
||||
res := resTmp.([]model.FsEntry)
|
||||
res := resTmp.([]fs.FsEntry)
|
||||
fc.Result = res
|
||||
return ec.marshalNFsEntry2ᚕgitᚗkmsignᚗruᚋroyalcatᚋtstorᚋserverᚋsrcᚋdeliveryᚋgraphqlᚋmodelᚐFsEntryᚄ(ctx, field.Selections, res)
|
||||
return ec.marshalNFsEntry2ᚕgitᚗkmsignᚗruᚋroyalcatᚋtstorᚋserverᚋsrcᚋdeliveryᚋgraphqlᚋfsᚐFsEntryᚄ(ctx, field.Selections, res)
|
||||
}
|
||||
|
||||
func (ec *executionContext) fieldContext_ResolverFS_entries(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
|
||||
|
@ -1429,7 +1429,7 @@ func (ec *executionContext) _SimpleDir_entries(ctx context.Context, field graphq
|
|||
|
||||
directive1 := func(ctx context.Context) (any, error) {
|
||||
if ec.directives.Resolver == nil {
|
||||
var zeroVal []model.FsEntry
|
||||
var zeroVal []fs.FsEntry
|
||||
return zeroVal, errors.New("directive resolver is not implemented")
|
||||
}
|
||||
return ec.directives.Resolver(ctx, obj, directive0)
|
||||
|
@ -1442,10 +1442,10 @@ func (ec *executionContext) _SimpleDir_entries(ctx context.Context, field graphq
|
|||
if tmp == nil {
|
||||
return nil, nil
|
||||
}
|
||||
if data, ok := tmp.([]model.FsEntry); ok {
|
||||
if data, ok := tmp.([]fs.FsEntry); ok {
|
||||
return data, nil
|
||||
}
|
||||
return nil, fmt.Errorf(`unexpected type %T from directive, should be []git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql/model.FsEntry`, tmp)
|
||||
return nil, fmt.Errorf(`unexpected type %T from directive, should be []git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql/fs.FsEntry`, tmp)
|
||||
})
|
||||
if err != nil {
|
||||
ec.Error(ctx, err)
|
||||
|
@ -1457,9 +1457,9 @@ func (ec *executionContext) _SimpleDir_entries(ctx context.Context, field graphq
|
|||
}
|
||||
return graphql.Null
|
||||
}
|
||||
res := resTmp.([]model.FsEntry)
|
||||
res := resTmp.([]fs.FsEntry)
|
||||
fc.Result = res
|
||||
return ec.marshalNFsEntry2ᚕgitᚗkmsignᚗruᚋroyalcatᚋtstorᚋserverᚋsrcᚋdeliveryᚋgraphqlᚋmodelᚐFsEntryᚄ(ctx, field.Selections, res)
|
||||
return ec.marshalNFsEntry2ᚕgitᚗkmsignᚗruᚋroyalcatᚋtstorᚋserverᚋsrcᚋdeliveryᚋgraphqlᚋfsᚐFsEntryᚄ(ctx, field.Selections, res)
|
||||
}
|
||||
|
||||
func (ec *executionContext) fieldContext_SimpleDir_entries(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
|
||||
|
@ -3847,7 +3847,7 @@ func (ec *executionContext) unmarshalInputStringFilter(ctx context.Context, obj
|
|||
|
||||
// region ************************** interface.gotpl ***************************
|
||||
|
||||
func (ec *executionContext) _Dir(ctx context.Context, sel ast.SelectionSet, obj model.Dir) graphql.Marshaler {
|
||||
func (ec *executionContext) _Dir(ctx context.Context, sel ast.SelectionSet, obj fs.Dir) graphql.Marshaler {
|
||||
switch obj := (obj).(type) {
|
||||
case nil:
|
||||
return graphql.Null
|
||||
|
@ -3886,7 +3886,7 @@ func (ec *executionContext) _File(ctx context.Context, sel ast.SelectionSet, obj
|
|||
}
|
||||
}
|
||||
|
||||
func (ec *executionContext) _FsEntry(ctx context.Context, sel ast.SelectionSet, obj model.FsEntry) graphql.Marshaler {
|
||||
func (ec *executionContext) _FsEntry(ctx context.Context, sel ast.SelectionSet, obj fs.FsEntry) graphql.Marshaler {
|
||||
switch obj := (obj).(type) {
|
||||
case nil:
|
||||
return graphql.Null
|
||||
|
@ -3916,7 +3916,7 @@ func (ec *executionContext) _FsEntry(ctx context.Context, sel ast.SelectionSet,
|
|||
return graphql.Null
|
||||
}
|
||||
return ec._File(ctx, sel, obj)
|
||||
case model.Dir:
|
||||
case fs.Dir:
|
||||
if obj == nil {
|
||||
return graphql.Null
|
||||
}
|
||||
|
@ -4768,7 +4768,7 @@ func (ec *executionContext) marshalNBoolean2bool(ctx context.Context, sel ast.Se
|
|||
return res
|
||||
}
|
||||
|
||||
func (ec *executionContext) marshalNFsEntry2gitᚗkmsignᚗruᚋroyalcatᚋtstorᚋserverᚋsrcᚋdeliveryᚋgraphqlᚋmodelᚐFsEntry(ctx context.Context, sel ast.SelectionSet, v model.FsEntry) graphql.Marshaler {
|
||||
func (ec *executionContext) marshalNFsEntry2gitᚗkmsignᚗruᚋroyalcatᚋtstorᚋserverᚋsrcᚋdeliveryᚋgraphqlᚋfsᚐFsEntry(ctx context.Context, sel ast.SelectionSet, v fs.FsEntry) graphql.Marshaler {
|
||||
if v == nil {
|
||||
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
|
||||
ec.Errorf(ctx, "the requested element is null which the schema does not allow")
|
||||
|
@ -4778,7 +4778,7 @@ func (ec *executionContext) marshalNFsEntry2gitᚗkmsignᚗruᚋroyalcatᚋtstor
|
|||
return ec._FsEntry(ctx, sel, v)
|
||||
}
|
||||
|
||||
func (ec *executionContext) marshalNFsEntry2ᚕgitᚗkmsignᚗruᚋroyalcatᚋtstorᚋserverᚋsrcᚋdeliveryᚋgraphqlᚋmodelᚐFsEntryᚄ(ctx context.Context, sel ast.SelectionSet, v []model.FsEntry) graphql.Marshaler {
|
||||
func (ec *executionContext) marshalNFsEntry2ᚕgitᚗkmsignᚗruᚋroyalcatᚋtstorᚋserverᚋsrcᚋdeliveryᚋgraphqlᚋfsᚐFsEntryᚄ(ctx context.Context, sel ast.SelectionSet, v []fs.FsEntry) graphql.Marshaler {
|
||||
ret := make(graphql.Array, len(v))
|
||||
var wg sync.WaitGroup
|
||||
isLen1 := len(v) == 1
|
||||
|
@ -4802,7 +4802,7 @@ func (ec *executionContext) marshalNFsEntry2ᚕgitᚗkmsignᚗruᚋroyalcatᚋts
|
|||
if !isLen1 {
|
||||
defer wg.Done()
|
||||
}
|
||||
ret[i] = ec.marshalNFsEntry2gitᚗkmsignᚗruᚋroyalcatᚋtstorᚋserverᚋsrcᚋdeliveryᚋgraphqlᚋmodelᚐFsEntry(ctx, sel, v[i])
|
||||
ret[i] = ec.marshalNFsEntry2gitᚗkmsignᚗruᚋroyalcatᚋtstorᚋserverᚋsrcᚋdeliveryᚋgraphqlᚋfsᚐFsEntry(ctx, sel, v[i])
|
||||
}
|
||||
if isLen1 {
|
||||
f(i)
|
||||
|
@ -5229,7 +5229,7 @@ func (ec *executionContext) marshalODateTime2ᚖtimeᚐTime(ctx context.Context,
|
|||
return res
|
||||
}
|
||||
|
||||
func (ec *executionContext) marshalOFsEntry2gitᚗkmsignᚗruᚋroyalcatᚋtstorᚋserverᚋsrcᚋdeliveryᚋgraphqlᚋmodelᚐFsEntry(ctx context.Context, sel ast.SelectionSet, v model.FsEntry) graphql.Marshaler {
|
||||
func (ec *executionContext) marshalOFsEntry2gitᚗkmsignᚗruᚋroyalcatᚋtstorᚋserverᚋsrcᚋdeliveryᚋgraphqlᚋfsᚐFsEntry(ctx context.Context, sel ast.SelectionSet, v fs.FsEntry) graphql.Marshaler {
|
||||
if v == nil {
|
||||
return graphql.Null
|
||||
}
|
||||
|
|
|
@ -2,13 +2,6 @@
|
|||
|
||||
package model
|
||||
|
||||
type Dir interface {
|
||||
IsFsEntry()
|
||||
IsDir()
|
||||
GetName() string
|
||||
GetEntries() []FsEntry
|
||||
}
|
||||
|
||||
type File interface {
|
||||
IsFsEntry()
|
||||
IsFile()
|
||||
|
@ -16,11 +9,6 @@ type File interface {
|
|||
GetSize() int64
|
||||
}
|
||||
|
||||
type FsEntry interface {
|
||||
IsFsEntry()
|
||||
GetName() string
|
||||
}
|
||||
|
||||
type Progress interface {
|
||||
IsProgress()
|
||||
GetCurrent() int64
|
||||
|
|
|
@ -9,16 +9,15 @@ import (
|
|||
|
||||
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 *fs.ResolverFs) ([]model.FsEntry, error) {
|
||||
func (r *resolverFSResolver) Entries(ctx context.Context, obj *fs.ResolverFs) ([]fs.FsEntry, error) {
|
||||
return obj.ResolverEntries(ctx)
|
||||
}
|
||||
|
||||
// Entries is the resolver for the entries field.
|
||||
func (r *simpleDirResolver) Entries(ctx context.Context, obj *fs.SimpleDir) ([]model.FsEntry, error) {
|
||||
func (r *simpleDirResolver) Entries(ctx context.Context, obj *fs.SimpleDir) ([]fs.FsEntry, error) {
|
||||
return obj.SimpleDirEntries(ctx)
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ func (r *queryResolver) Plugins(ctx context.Context) ([]*model.Plugin, error) {
|
|||
}
|
||||
|
||||
// FsEntry is the resolver for the fsEntry field.
|
||||
func (r *queryResolver) FsEntry(ctx context.Context, path string) (model.FsEntry, error) {
|
||||
func (r *queryResolver) FsEntry(ctx context.Context, path string) (fs.FsEntry, error) {
|
||||
entry, err := r.VFS.Stat(ctx, path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
Loading…
Reference in a new issue