package repo import ( "fmt" "strings" "code.gitea.io/gitea/modules/convert" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" ) func PublicDatasetMultiple(ctx *context.APIContext) { opts := &models.SearchDatasetOptions{ PublicOnly: true, NeedAttachment: true, CloudBrainType: ctx.QueryInt("type"), } datasetMultiple(ctx, opts) } func MyFavoriteDatasetMultiple(ctx *context.APIContext) { opts := &models.SearchDatasetOptions{ StarByMe: true, DatasetIDs: models.GetDatasetIdsStarByUser(ctx.User.ID), NeedAttachment: true, CloudBrainType: ctx.QueryInt("type"), } datasetMultiple(ctx, opts) } func CurrentRepoDatasetMultiple(ctx *context.APIContext) { datasetIds := models.GetDatasetIdsByRepoID(ctx.Repo.Repository.ID) searchOrderBy := getSearchOrderByInValues(datasetIds) opts := &models.SearchDatasetOptions{ RepoID: ctx.Repo.Repository.ID, NeedAttachment: true, CloudBrainType: ctx.QueryInt("type"), DatasetIDs: datasetIds, SearchOrderBy: searchOrderBy, } datasetMultiple(ctx, opts) } func CurrentRepoDatasetInfoWithoutAttachment(ctx *context.APIContext) { dataset, err := models.GetDatasetByRepo(ctx.Repo.Repository) if err != nil { log.Warn("can not get dataset.", err) ctx.JSON(200, map[string]interface{}{ "code": 0, "message": "", "data": []*api.Dataset{}, }) return } dataset.Repo = ctx.Repo.Repository ctx.JSON(200, map[string]interface{}{ "code": 0, "message": "", "data": []*api.Dataset{convert.ToDataset(dataset)}, }) } func MyDatasetsMultiple(ctx *context.APIContext) { opts := &models.SearchDatasetOptions{ UploadAttachmentByMe: true, NeedAttachment: true, CloudBrainType: ctx.QueryInt("type"), } datasetMultiple(ctx, opts) } func datasetMultiple(ctx *context.APIContext, opts *models.SearchDatasetOptions) { page := ctx.QueryInt("page") if page < 1 { page = 1 } pageSize := ctx.QueryInt("pageSize") if pageSize < 1 { pageSize = setting.UI.DatasetPagingNum } keyword := strings.Trim(ctx.Query("q"), " ") opts.Keyword = keyword if opts.SearchOrderBy.String() == "" { opts.SearchOrderBy = models.SearchOrderByRecentUpdated } opts.RecommendOnly = ctx.QueryBool("recommend") opts.ListOptions = models.ListOptions{ Page: page, PageSize: pageSize, } opts.JustNeedZipFile = true opts.User = ctx.User datasets, count, err := models.SearchDataset(opts) if err != nil { log.Error("json.Marshal failed:", err.Error()) ctx.JSON(200, map[string]interface{}{ "code": 1, "message": err.Error(), "data": []*api.Dataset{}, "count": 0, }) return } var convertDatasets []*api.Dataset for _, dataset := range datasets { convertDatasets = append(convertDatasets, convert.ToDataset(dataset)) } ctx.JSON(200, map[string]interface{}{ "code": 0, "message": "", "data": convertDatasets, "count": count, }) } func getSearchOrderByInValues(datasetIds []int64) models.SearchOrderBy { if len(datasetIds) == 0 { return "" } searchOrderBy := "CASE id " for i, id := range datasetIds { searchOrderBy += fmt.Sprintf(" WHEN %d THEN %d", id, i+1) } searchOrderBy += " ELSE 0 END" return models.SearchOrderBy(searchOrderBy) }