You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

datasets.go 2.7 kB

3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package repo
  2. import (
  3. "fmt"
  4. "strings"
  5. "code.gitea.io/gitea/models"
  6. "code.gitea.io/gitea/modules/context"
  7. "code.gitea.io/gitea/modules/log"
  8. "code.gitea.io/gitea/modules/setting"
  9. )
  10. func PublicDatasetMultiple(ctx *context.APIContext) {
  11. opts := &models.SearchDatasetOptions{
  12. PublicOnly: true,
  13. NeedAttachment: true,
  14. CloudBrainType: ctx.QueryInt("type"),
  15. }
  16. datasetMultiple(ctx, opts)
  17. }
  18. func MyFavoriteDatasetMultiple(ctx *context.APIContext) {
  19. opts := &models.SearchDatasetOptions{
  20. StarByMe: true,
  21. DatasetIDs: models.GetDatasetIdsStarByUser(ctx.User.ID),
  22. NeedAttachment: true,
  23. CloudBrainType: ctx.QueryInt("type"),
  24. }
  25. datasetMultiple(ctx, opts)
  26. }
  27. func CurrentRepoDatasetMultiple(ctx *context.APIContext) {
  28. datasetIds := models.GetDatasetIdsByRepoID(ctx.Repo.Repository.ID)
  29. searchOrderBy := getSearchOrderByInValues(datasetIds)
  30. opts := &models.SearchDatasetOptions{
  31. RepoID: ctx.Repo.Repository.ID,
  32. NeedAttachment: true,
  33. CloudBrainType: ctx.QueryInt("type"),
  34. DatasetIDs: datasetIds,
  35. SearchOrderBy: searchOrderBy,
  36. }
  37. datasetMultiple(ctx, opts)
  38. }
  39. func MyDatasetsMultiple(ctx *context.APIContext) {
  40. opts := &models.SearchDatasetOptions{
  41. UploadAttachmentByMe: true,
  42. NeedAttachment: true,
  43. CloudBrainType: ctx.QueryInt("type"),
  44. }
  45. datasetMultiple(ctx, opts)
  46. }
  47. func datasetMultiple(ctx *context.APIContext, opts *models.SearchDatasetOptions) {
  48. page := ctx.QueryInt("page")
  49. if page < 1 {
  50. page = 1
  51. }
  52. pageSize := ctx.QueryInt("pageSize")
  53. if pageSize < 1 {
  54. pageSize = setting.UI.DatasetPagingNum
  55. }
  56. keyword := strings.Trim(ctx.Query("q"), " ")
  57. opts.Keyword = keyword
  58. if opts.SearchOrderBy.String() == "" {
  59. opts.SearchOrderBy = models.SearchOrderByRecentUpdated
  60. }
  61. opts.RecommendOnly = ctx.QueryBool("recommend")
  62. opts.ListOptions = models.ListOptions{
  63. Page: page,
  64. PageSize: pageSize,
  65. }
  66. opts.JustNeedZipFile = true
  67. opts.User = ctx.User
  68. datasets, count, err := models.SearchDataset(opts)
  69. if err != nil {
  70. log.Error("json.Marshal failed:", err.Error())
  71. ctx.JSON(200, map[string]interface{}{
  72. "code": 1,
  73. "message": err.Error(),
  74. "data": []*models.Dataset{},
  75. "count": 0,
  76. })
  77. return
  78. }
  79. ctx.JSON(200, map[string]interface{}{
  80. "code": 0,
  81. "message": "",
  82. "data": datasets,
  83. "count": count,
  84. })
  85. }
  86. func getSearchOrderByInValues(datasetIds []int64) models.SearchOrderBy {
  87. if len(datasetIds) == 0 {
  88. return ""
  89. }
  90. searchOrderBy := "CASE id "
  91. for i, id := range datasetIds {
  92. searchOrderBy += fmt.Sprintf(" WHEN %d THEN %d", id, i+1)
  93. }
  94. searchOrderBy += " ELSE 0 END"
  95. return models.SearchOrderBy(searchOrderBy)
  96. }