diff --git a/apiserver/graph/generated/generated.go b/apiserver/graph/generated/generated.go index 8df013ed8..656022a90 100644 --- a/apiserver/graph/generated/generated.go +++ b/apiserver/graph/generated/generated.go @@ -364,6 +364,7 @@ type ComplexityRoot struct { Count func(childComplexity int) int CreationTimestamp func(childComplexity int) int FileType func(childComplexity int) int + LatestVersion func(childComplexity int) int Path func(childComplexity int) int Size func(childComplexity int) int Time func(childComplexity int) int @@ -2565,6 +2566,13 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.F.FileType(childComplexity), true + case "F.latestVersion": + if e.complexity.F.LatestVersion == nil { + break + } + + return e.complexity.F.LatestVersion(childComplexity), true + case "F.path": if e.complexity.F.Path == nil { break @@ -7944,6 +7952,11 @@ type F { 文件版本列表 """ versions: [String!] + + """ + 文件最新版本 + """ + latestVersion: String } """ @@ -19340,6 +19353,47 @@ func (ec *executionContext) fieldContext_F_versions(ctx context.Context, field g return fc, nil } +func (ec *executionContext) _F_latestVersion(ctx context.Context, field graphql.CollectedField, obj *F) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_F_latestVersion(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.LatestVersion, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2ᚖstring(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_F_latestVersion(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "F", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + func (ec *executionContext) _FileDetails_file_name(ctx context.Context, field graphql.CollectedField, obj *FileDetails) (ret graphql.Marshaler) { fc, err := ec.fieldContext_FileDetails_file_name(ctx, field) if err != nil { @@ -29438,6 +29492,8 @@ func (ec *executionContext) fieldContext_RAGDataset_files(ctx context.Context, f return ec.fieldContext_F_creationTimestamp(ctx, field) case "versions": return ec.fieldContext_F_versions(ctx, field) + case "latestVersion": + return ec.fieldContext_F_latestVersion(ctx, field) } return nil, fmt.Errorf("no field named %q was found under type F", field.Name) }, @@ -43217,6 +43273,8 @@ func (ec *executionContext) _F(ctx context.Context, sel ast.SelectionSet, obj *F out.Values[i] = ec._F_creationTimestamp(ctx, field, obj) case "versions": out.Values[i] = ec._F_versions(ctx, field, obj) + case "latestVersion": + out.Values[i] = ec._F_latestVersion(ctx, field, obj) default: panic("unknown field " + strconv.Quote(field.Name)) } diff --git a/apiserver/graph/generated/models_gen.go b/apiserver/graph/generated/models_gen.go index 9aa286ef1..86765d4ff 100644 --- a/apiserver/graph/generated/models_gen.go +++ b/apiserver/graph/generated/models_gen.go @@ -820,6 +820,8 @@ type F struct { CreationTimestamp *time.Time `json:"creationTimestamp,omitempty"` // 文件版本列表 Versions []string `json:"versions,omitempty"` + // 文件最新版本 + LatestVersion *string `json:"latestVersion,omitempty"` } func (F) IsPageNode() {} diff --git a/apiserver/graph/schema/versioned_dataset.gql b/apiserver/graph/schema/versioned_dataset.gql index 2b8ccac66..a223af175 100644 --- a/apiserver/graph/schema/versioned_dataset.gql +++ b/apiserver/graph/schema/versioned_dataset.gql @@ -58,6 +58,7 @@ query getVersionedDataset($name: String!, $namespace: String!, $fileInput: FileF count size versions + latestVersion creationTimestamp } } @@ -98,6 +99,7 @@ query listVersionedDatasets($input: ListVersionedDatasetInput!, $fileInput: File count size versions + latestVersion creationTimestamp } } diff --git a/apiserver/graph/schema/versioned_dataset.graphqls b/apiserver/graph/schema/versioned_dataset.graphqls index 01db3bc58..2fa73befd 100644 --- a/apiserver/graph/schema/versioned_dataset.graphqls +++ b/apiserver/graph/schema/versioned_dataset.graphqls @@ -86,6 +86,11 @@ type F { 文件版本列表 """ versions: [String!] + + """ + 文件最新版本 + """ + latestVersion: String } """ diff --git a/apiserver/pkg/versioneddataset/versioned_dataset.go b/apiserver/pkg/versioneddataset/versioned_dataset.go index f8c54781b..6883905ad 100644 --- a/apiserver/pkg/versioneddataset/versioned_dataset.go +++ b/apiserver/pkg/versioneddataset/versioned_dataset.go @@ -121,27 +121,26 @@ func VersionFiles(ctx context.Context, _ client.Client, input *generated.Version return objectInfoList[i].LastModified.After(objectInfoList[j].LastModified) }) - existMap := make(map[string]struct{}) objMap := make(map[string][]string) for _, obj := range objectInfoList { + if obj.IsDeleteMarker { + continue + } objMap[obj.Key] = append(objMap[obj.Key], obj.VersionID) } - result := make([]generated.PageNode, 0) for _, obj := range objectInfoList { - if _, ok := existMap[obj.Key]; ok { - continue - } - if obj.IsDeleteMarker { + if !obj.IsLatest || obj.IsDeleteMarker { continue } if keyword == "" || strings.Contains(obj.Key, keyword) { - existMap[obj.Key] = struct{}{} lastModifiedTime := obj.LastModified + versionID := obj.VersionID tf := generated.F{ - Path: strings.TrimPrefix(obj.Key, prefix), - Time: &lastModifiedTime, - Versions: objMap[obj.Key], + Path: strings.TrimPrefix(obj.Key, prefix), + Time: &lastModifiedTime, + Versions: objMap[obj.Key], + LatestVersion: &versionID, } size := utils.BytesToSizedStr(obj.Size)