This commit is contained in:
royalcat 2025-04-04 02:32:38 +04:00
parent 8df0984b86
commit 1ff168a931
7 changed files with 57 additions and 61 deletions

View file

@ -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 {

View file

@ -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)
}

View file

@ -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)
}

View file

@ -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
}

View file

@ -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

View file

@ -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)
}

View file

@ -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