|
|
|
@ -9,6 +9,7 @@ import ( |
|
|
|
|
"fmt" |
|
|
|
|
"io" |
|
|
|
|
"net/http" |
|
|
|
|
"net/url" |
|
|
|
|
"regexp" |
|
|
|
|
"strconv" |
|
|
|
|
"strings" |
|
|
|
@ -111,13 +112,8 @@ func getSearchTerm(ctx *context.Context) string { |
|
|
|
|
|
|
|
|
|
// https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.Protocol/LegacyFeed/V2FeedQueryBuilder.cs
|
|
|
|
|
func SearchServiceV2(ctx *context.Context) { |
|
|
|
|
skip, take := ctx.FormInt("skip"), ctx.FormInt("take") |
|
|
|
|
if skip == 0 { |
|
|
|
|
skip = ctx.FormInt("$skip") |
|
|
|
|
} |
|
|
|
|
if take == 0 { |
|
|
|
|
take = ctx.FormInt("$top") |
|
|
|
|
} |
|
|
|
|
skip, take := ctx.FormInt("$skip"), ctx.FormInt("$top") |
|
|
|
|
paginator := db.NewAbsoluteListOptions(skip, take) |
|
|
|
|
|
|
|
|
|
pvs, total, err := packages_model.SearchVersions(ctx, &packages_model.PackageSearchOptions{ |
|
|
|
|
OwnerID: ctx.Package.Owner.ID, |
|
|
|
@ -126,10 +122,7 @@ func SearchServiceV2(ctx *context.Context) { |
|
|
|
|
Value: getSearchTerm(ctx), |
|
|
|
|
}, |
|
|
|
|
IsInternal: util.OptionalBoolFalse, |
|
|
|
|
Paginator: db.NewAbsoluteListOptions( |
|
|
|
|
skip, |
|
|
|
|
take, |
|
|
|
|
), |
|
|
|
|
Paginator: paginator, |
|
|
|
|
}) |
|
|
|
|
if err != nil { |
|
|
|
|
apiError(ctx, http.StatusInternalServerError, err) |
|
|
|
@ -142,8 +135,28 @@ func SearchServiceV2(ctx *context.Context) { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
skip, take = paginator.GetSkipTake() |
|
|
|
|
|
|
|
|
|
var next *nextOptions |
|
|
|
|
if len(pvs) == take { |
|
|
|
|
next = &nextOptions{ |
|
|
|
|
Path: "Search()", |
|
|
|
|
Query: url.Values{}, |
|
|
|
|
} |
|
|
|
|
searchTerm := ctx.FormTrim("searchTerm") |
|
|
|
|
if searchTerm != "" { |
|
|
|
|
next.Query.Set("searchTerm", searchTerm) |
|
|
|
|
} |
|
|
|
|
filter := ctx.FormTrim("$filter") |
|
|
|
|
if filter != "" { |
|
|
|
|
next.Query.Set("$filter", filter) |
|
|
|
|
} |
|
|
|
|
next.Query.Set("$skip", strconv.Itoa(skip+take)) |
|
|
|
|
next.Query.Set("$top", strconv.Itoa(take)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
resp := createFeedResponse( |
|
|
|
|
&linkBuilder{setting.AppURL + "api/packages/" + ctx.Package.Owner.Name + "/nuget"}, |
|
|
|
|
&linkBuilder{Base: setting.AppURL + "api/packages/" + ctx.Package.Owner.Name + "/nuget", Next: next}, |
|
|
|
|
total, |
|
|
|
|
pds, |
|
|
|
|
) |
|
|
|
@ -193,7 +206,7 @@ func SearchServiceV3(ctx *context.Context) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
resp := createSearchResultResponse( |
|
|
|
|
&linkBuilder{setting.AppURL + "api/packages/" + ctx.Package.Owner.Name + "/nuget"}, |
|
|
|
|
&linkBuilder{Base: setting.AppURL + "api/packages/" + ctx.Package.Owner.Name + "/nuget"}, |
|
|
|
|
count, |
|
|
|
|
pds, |
|
|
|
|
) |
|
|
|
@ -222,7 +235,7 @@ func RegistrationIndex(ctx *context.Context) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
resp := createRegistrationIndexResponse( |
|
|
|
|
&linkBuilder{setting.AppURL + "api/packages/" + ctx.Package.Owner.Name + "/nuget"}, |
|
|
|
|
&linkBuilder{Base: setting.AppURL + "api/packages/" + ctx.Package.Owner.Name + "/nuget"}, |
|
|
|
|
pds, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
@ -251,7 +264,7 @@ func RegistrationLeafV2(ctx *context.Context) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
resp := createEntryResponse( |
|
|
|
|
&linkBuilder{setting.AppURL + "api/packages/" + ctx.Package.Owner.Name + "/nuget"}, |
|
|
|
|
&linkBuilder{Base: setting.AppURL + "api/packages/" + ctx.Package.Owner.Name + "/nuget"}, |
|
|
|
|
pd, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
@ -280,7 +293,7 @@ func RegistrationLeafV3(ctx *context.Context) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
resp := createRegistrationLeafResponse( |
|
|
|
|
&linkBuilder{setting.AppURL + "api/packages/" + ctx.Package.Owner.Name + "/nuget"}, |
|
|
|
|
&linkBuilder{Base: setting.AppURL + "api/packages/" + ctx.Package.Owner.Name + "/nuget"}, |
|
|
|
|
pd, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
@ -291,7 +304,19 @@ func RegistrationLeafV3(ctx *context.Context) { |
|
|
|
|
func EnumeratePackageVersionsV2(ctx *context.Context) { |
|
|
|
|
packageName := strings.Trim(ctx.FormTrim("id"), "'") |
|
|
|
|
|
|
|
|
|
pvs, err := packages_model.GetVersionsByPackageName(ctx, ctx.Package.Owner.ID, packages_model.TypeNuGet, packageName) |
|
|
|
|
skip, take := ctx.FormInt("$skip"), ctx.FormInt("$top") |
|
|
|
|
paginator := db.NewAbsoluteListOptions(skip, take) |
|
|
|
|
|
|
|
|
|
pvs, total, err := packages_model.SearchVersions(ctx, &packages_model.PackageSearchOptions{ |
|
|
|
|
OwnerID: ctx.Package.Owner.ID, |
|
|
|
|
Type: packages_model.TypeNuGet, |
|
|
|
|
Name: packages_model.SearchValue{ |
|
|
|
|
ExactMatch: true, |
|
|
|
|
Value: packageName, |
|
|
|
|
}, |
|
|
|
|
IsInternal: util.OptionalBoolFalse, |
|
|
|
|
Paginator: paginator, |
|
|
|
|
}) |
|
|
|
|
if err != nil { |
|
|
|
|
apiError(ctx, http.StatusInternalServerError, err) |
|
|
|
|
return |
|
|
|
@ -303,9 +328,22 @@ func EnumeratePackageVersionsV2(ctx *context.Context) { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
skip, take = paginator.GetSkipTake() |
|
|
|
|
|
|
|
|
|
var next *nextOptions |
|
|
|
|
if len(pvs) == take { |
|
|
|
|
next = &nextOptions{ |
|
|
|
|
Path: "FindPackagesById()", |
|
|
|
|
Query: url.Values{}, |
|
|
|
|
} |
|
|
|
|
next.Query.Set("id", packageName) |
|
|
|
|
next.Query.Set("$skip", strconv.Itoa(skip+take)) |
|
|
|
|
next.Query.Set("$top", strconv.Itoa(take)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
resp := createFeedResponse( |
|
|
|
|
&linkBuilder{setting.AppURL + "api/packages/" + ctx.Package.Owner.Name + "/nuget"}, |
|
|
|
|
int64(len(pds)), |
|
|
|
|
&linkBuilder{Base: setting.AppURL + "api/packages/" + ctx.Package.Owner.Name + "/nuget", Next: next}, |
|
|
|
|
total, |
|
|
|
|
pds, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
@ -345,13 +383,7 @@ func EnumeratePackageVersionsV3(ctx *context.Context) { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pds, err := packages_model.GetPackageDescriptors(ctx, pvs) |
|
|
|
|
if err != nil { |
|
|
|
|
apiError(ctx, http.StatusInternalServerError, err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
resp := createPackageVersionsResponse(pds) |
|
|
|
|
resp := createPackageVersionsResponse(pvs) |
|
|
|
|
|
|
|
|
|
ctx.JSON(http.StatusOK, resp) |
|
|
|
|
} |
|
|
|
|