2023-08-14 05:50:55 +03:00
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package nuget
import (
"context"
"strings"
"code.gitea.io/gitea/models/db"
packages_model "code.gitea.io/gitea/models/packages"
"xorm.io/builder"
)
// SearchVersions gets all versions of packages matching the search options
func SearchVersions ( ctx context . Context , opts * packages_model . PackageSearchOptions ) ( [ ] * packages_model . PackageVersion , int64 , error ) {
cond := toConds ( opts )
e := db . GetEngine ( ctx )
total , err := e .
Where ( cond ) .
Count ( & packages_model . Package { } )
if err != nil {
return nil , 0 , err
}
inner := builder .
Dialect ( db . BuilderDialect ( ) ) . // builder needs the sql dialect to build the Limit() below
Select ( "*" ) .
From ( "package" ) .
Where ( cond ) .
OrderBy ( "package.name ASC" )
if opts . Paginator != nil {
skip , take := opts . GetSkipTake ( )
inner = inner . Limit ( take , skip )
}
sess := e .
Where ( opts . ToConds ( ) ) .
Table ( "package_version" ) .
Join ( "INNER" , inner , "package.id = package_version.package_id" )
pvs := make ( [ ] * packages_model . PackageVersion , 0 , 10 )
return pvs , total , sess . Find ( & pvs )
}
// CountPackages counts all packages matching the search options
func CountPackages ( ctx context . Context , opts * packages_model . PackageSearchOptions ) ( int64 , error ) {
return db . GetEngine ( ctx ) .
Where ( toConds ( opts ) ) .
Count ( & packages_model . Package { } )
}
func toConds ( opts * packages_model . PackageSearchOptions ) builder . Cond {
var cond builder . Cond = builder . Eq {
2024-03-02 18:42:31 +03:00
"package.is_internal" : opts . IsInternal . Value ( ) ,
2023-08-14 05:50:55 +03:00
"package.owner_id" : opts . OwnerID ,
"package.type" : packages_model . TypeNuGet ,
}
if opts . Name . Value != "" {
if opts . Name . ExactMatch {
cond = cond . And ( builder . Eq { "package.lower_name" : strings . ToLower ( opts . Name . Value ) } )
} else {
cond = cond . And ( builder . Like { "package.lower_name" , strings . ToLower ( opts . Name . Value ) } )
}
}
return cond
}