code.gitea.io/gitea@v1.21.7/models/packages/conda/search.go (about)

     1  // Copyright 2022 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package conda
     5  
     6  import (
     7  	"context"
     8  	"strings"
     9  
    10  	"code.gitea.io/gitea/models/db"
    11  	"code.gitea.io/gitea/models/packages"
    12  	conda_module "code.gitea.io/gitea/modules/packages/conda"
    13  
    14  	"xorm.io/builder"
    15  )
    16  
    17  type FileSearchOptions struct {
    18  	OwnerID  int64
    19  	Channel  string
    20  	Subdir   string
    21  	Filename string
    22  }
    23  
    24  // SearchFiles gets all files matching the search options
    25  func SearchFiles(ctx context.Context, opts *FileSearchOptions) ([]*packages.PackageFile, error) {
    26  	var cond builder.Cond = builder.Eq{
    27  		"package.type":                packages.TypeConda,
    28  		"package.owner_id":            opts.OwnerID,
    29  		"package_version.is_internal": false,
    30  	}
    31  
    32  	if opts.Filename != "" {
    33  		cond = cond.And(builder.Eq{
    34  			"package_file.lower_name": strings.ToLower(opts.Filename),
    35  		})
    36  	}
    37  
    38  	var versionPropsCond builder.Cond = builder.Eq{
    39  		"package_property.ref_type": packages.PropertyTypePackage,
    40  		"package_property.name":     conda_module.PropertyChannel,
    41  		"package_property.value":    opts.Channel,
    42  	}
    43  
    44  	cond = cond.And(builder.In("package.id", builder.Select("package_property.ref_id").Where(versionPropsCond).From("package_property")))
    45  
    46  	var filePropsCond builder.Cond = builder.Eq{
    47  		"package_property.ref_type": packages.PropertyTypeFile,
    48  		"package_property.name":     conda_module.PropertySubdir,
    49  		"package_property.value":    opts.Subdir,
    50  	}
    51  
    52  	cond = cond.And(builder.In("package_file.id", builder.Select("package_property.ref_id").Where(filePropsCond).From("package_property")))
    53  
    54  	sess := db.GetEngine(ctx).
    55  		Select("package_file.*").
    56  		Table("package_file").
    57  		Join("INNER", "package_version", "package_version.id = package_file.version_id").
    58  		Join("INNER", "package", "package.id = package_version.package_id").
    59  		Where(cond)
    60  
    61  	pfs := make([]*packages.PackageFile, 0, 10)
    62  	return pfs, sess.Find(&pfs)
    63  }