forked from forgejo/forgejo
Allow package version sorting (#21453)
This commit is contained in:
parent
63ebb53fd5
commit
876ee8c3cd
6 changed files with 58 additions and 17 deletions
|
@ -165,6 +165,7 @@ type ImageTagsSearchOptions struct {
|
|||
PackageID int64
|
||||
Query string
|
||||
IsTagged bool
|
||||
Sort packages.VersionSort
|
||||
db.Paginator
|
||||
}
|
||||
|
||||
|
@ -195,12 +196,26 @@ func (opts *ImageTagsSearchOptions) toConds() builder.Cond {
|
|||
return cond
|
||||
}
|
||||
|
||||
func (opts *ImageTagsSearchOptions) configureOrderBy(e db.Engine) {
|
||||
switch opts.Sort {
|
||||
case packages.SortVersionDesc:
|
||||
e.Desc("package_version.version")
|
||||
case packages.SortVersionAsc:
|
||||
e.Asc("package_version.version")
|
||||
case packages.SortCreatedAsc:
|
||||
e.Asc("package_version.created_unix")
|
||||
default:
|
||||
e.Desc("package_version.created_unix")
|
||||
}
|
||||
}
|
||||
|
||||
// SearchImageTags gets a sorted list of the tags of an image
|
||||
func SearchImageTags(ctx context.Context, opts *ImageTagsSearchOptions) ([]*packages.PackageVersion, int64, error) {
|
||||
sess := db.GetEngine(ctx).
|
||||
Join("INNER", "package", "package.id = package_version.package_id").
|
||||
Where(opts.toConds()).
|
||||
Desc("package_version.created_unix")
|
||||
Where(opts.toConds())
|
||||
|
||||
opts.configureOrderBy(sess)
|
||||
|
||||
if opts.Paginator != nil {
|
||||
sess = db.SetSessionPagination(sess, opts)
|
||||
|
|
|
@ -163,6 +163,17 @@ type SearchValue struct {
|
|||
ExactMatch bool
|
||||
}
|
||||
|
||||
type VersionSort = string
|
||||
|
||||
const (
|
||||
SortNameAsc VersionSort = "name_asc"
|
||||
SortNameDesc VersionSort = "name_desc"
|
||||
SortVersionAsc VersionSort = "version_asc"
|
||||
SortVersionDesc VersionSort = "version_desc"
|
||||
SortCreatedAsc VersionSort = "created_asc"
|
||||
SortCreatedDesc VersionSort = "created_desc"
|
||||
)
|
||||
|
||||
// PackageSearchOptions are options for SearchXXX methods
|
||||
// Besides IsInternal are all fields optional and are not used if they have their default value (nil, "", 0)
|
||||
type PackageSearchOptions struct {
|
||||
|
@ -176,7 +187,7 @@ type PackageSearchOptions struct {
|
|||
IsInternal util.OptionalBool
|
||||
HasFileWithName string // only results are found which are associated with a file with the specific name
|
||||
HasFiles util.OptionalBool // only results are found which have associated files
|
||||
Sort string
|
||||
Sort VersionSort
|
||||
db.Paginator
|
||||
}
|
||||
|
||||
|
@ -254,15 +265,15 @@ func (opts *PackageSearchOptions) toConds() builder.Cond {
|
|||
|
||||
func (opts *PackageSearchOptions) configureOrderBy(e db.Engine) {
|
||||
switch opts.Sort {
|
||||
case "alphabetically":
|
||||
case SortNameAsc:
|
||||
e.Asc("package.name")
|
||||
case "reversealphabetically":
|
||||
case SortNameDesc:
|
||||
e.Desc("package.name")
|
||||
case "highestversion":
|
||||
case SortVersionDesc:
|
||||
e.Desc("package_version.version")
|
||||
case "lowestversion":
|
||||
case SortVersionAsc:
|
||||
e.Asc("package_version.version")
|
||||
case "oldest":
|
||||
case SortCreatedAsc:
|
||||
e.Asc("package_version.created_unix")
|
||||
default:
|
||||
e.Desc("package_version.created_unix")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue