diff --git a/models/repo.go b/models/repo.go index e1085a429..a293dab18 100755 --- a/models/repo.go +++ b/models/repo.go @@ -242,12 +242,57 @@ type Repository struct { LastFourMonthCommits int64 `xorm:"NOT NULL DEFAULT 0"` } +// Repository4Card format for front display +type Repository4Card struct { + ID int64 + OwnerID int64 + OwnerName string + LowerName string + Name string + NumWatches int + NumStars int + NumForks int + Description string + Topics []string + AiTaskCnt int64 + ModelCnt int64 + DatasetCnt int64 + CreatedUnix timeutil.TimeStamp + UpdatedUnix timeutil.TimeStamp + PrimaryLanguage *LanguageStat + RelAvatarLink string +} + type RepositoryShow struct { Name string RepoType RepoType Alias string } +func (repo *Repository) ToCardFormat() *Repository4Card { + r := repo.RelAvatarLink() + result := &Repository4Card{ + ID: repo.ID, + OwnerID: repo.OwnerID, + OwnerName: repo.OwnerName, + LowerName: repo.LowerName, + Name: repo.Name, + NumWatches: repo.NumWatches, + NumStars: repo.NumStars, + NumForks: repo.NumForks, + Description: repo.Description, + Topics: repo.Topics, + AiTaskCnt: repo.AiTaskCnt, + ModelCnt: repo.ModelCnt, + DatasetCnt: repo.DatasetCnt, + CreatedUnix: repo.CreatedUnix, + UpdatedUnix: repo.UpdatedUnix, + PrimaryLanguage: repo.PrimaryLanguage, + RelAvatarLink: r, + } + return result +} + // SanitizedOriginalURL returns a sanitized OriginalURL func (repo *Repository) SanitizedOriginalURL() string { if repo.OriginalURL == "" { diff --git a/models/repo_list.go b/models/repo_list.go index 6ec9bbe8f..3c655fbd9 100755 --- a/models/repo_list.go +++ b/models/repo_list.go @@ -202,7 +202,7 @@ func (s SearchOrderBy) String() string { } type FindReposResponse struct { - Repos RepositoryList + Repos []*Repository4Card Page int PageSize int Total int64 diff --git a/models/repo_tag.go b/models/repo_tag.go index e4e37fbd2..4585a95b6 100644 --- a/models/repo_tag.go +++ b/models/repo_tag.go @@ -174,7 +174,7 @@ type FindSelectedReposOpts struct { OnlyPublic bool } -func GetSelectedRepos(opts FindSelectedReposOpts) ([]Repository, error) { +func GetSelectedRepos(opts FindSelectedReposOpts) ([]*Repository, error) { if opts.Page < 1 { opts.Page = 1 } @@ -186,7 +186,7 @@ func GetSelectedRepos(opts FindSelectedReposOpts) ([]Repository, error) { if opts.OnlyPublic { cond = cond.And(builder.Eq{"repository.is_private": false}) } - t := make([]Repository, 0) + t := make([]*Repository, 0) err := x.Join("inner", "official_tag_repos", "repository.id = official_tag_repos.repo_id"). Join("inner", "official_tag", "official_tag.id = official_tag_repos.tag_id"). Where(cond).OrderBy("repository.updated_unix desc").Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).Find(&t) diff --git a/routers/home.go b/routers/home.go index 7c13cb05e..7b680bca0 100755 --- a/routers/home.go +++ b/routers/home.go @@ -297,7 +297,7 @@ func ExploreRepos(ctx *context.Context) { } func RepoSquare(ctx *context.Context) { - var result []models.Repository + var result []*models.Repository4Card var err error switch ctx.Query("type") { case "preferred": diff --git a/services/repository/square.go b/services/repository/square.go index 45416667c..cb7b9e4db 100644 --- a/services/repository/square.go +++ b/services/repository/square.go @@ -6,18 +6,26 @@ import ( "code.gitea.io/gitea/modules/setting" ) -func GetPreferredRepos() ([]models.Repository, error) { - return models.GetSelectedRepos(models.FindSelectedReposOpts{ +func GetPreferredRepos() ([]*models.Repository4Card, error) { + repos, err := models.GetSelectedRepos(models.FindSelectedReposOpts{ ListOptions: models.ListOptions{ PageSize: 10, Page: 1, }, OnlyPublic: true, }) + if err != nil { + return nil, err + } + result := make([]*models.Repository4Card, len(repos)) + for i, r := range repos { + result[i] = r.ToCardFormat() + } + return result, nil } -func GetIncubationRepos() ([]models.Repository, error) { - return models.GetSelectedRepos(models.FindSelectedReposOpts{ +func GetIncubationRepos() ([]*models.Repository4Card, error) { + repos, err := models.GetSelectedRepos(models.FindSelectedReposOpts{ ListOptions: models.ListOptions{ PageSize: 10, Page: 1, @@ -25,9 +33,17 @@ func GetIncubationRepos() ([]models.Repository, error) { OrgId: setting.IncubationSourceOrgId, OnlyPublic: true, }) + if err != nil { + return nil, err + } + result := make([]*models.Repository4Card, len(repos)) + for i, r := range repos { + result[i] = r.ToCardFormat() + } + return result, nil } -func GetHotPaperRepos() ([]models.Repository, error) { +func GetHotPaperRepos() ([]*models.Repository4Card, error) { rlist, _, err := models.SearchRepository(&models.SearchRepoOptions{ ListOptions: models.ListOptions{ Page: 1, @@ -41,9 +57,9 @@ func GetHotPaperRepos() ([]models.Repository, error) { if err != nil { return nil, err } - result := make([]models.Repository, len(rlist)) + result := make([]*models.Repository4Card, len(rlist)) for i, r := range rlist { - result[i] = *r + result[i] = r.ToCardFormat() } return result, nil } @@ -69,40 +85,30 @@ func FindRepos(opts FindReposOptions) (*models.FindReposResponse, error) { switch opts.Sort { //1.近期热门:按最近1个月浏览量倒序排序,最近1个月浏览量>最近更新>项目名称升序 - //2.近期活跃:按提交增长量(最近4个月commit数)倒序排序,提交增长量>最近更新>项目名称升序。 - //3.最近更新:按最近更新>项目名称升序排序。 - //4.最近创建:按项目创建时间排序,最近的排前面。最近创建>项目名称升序。 - //5.点赞最多:按点赞数倒序排序。点赞数>最近更新>项目名称升序。 - //6.派生最多:按派生数倒序排序。派生数>最近更新>项目名称升序。 - //7.数据集最多:按项目包含的数据集文件数量倒序排序,数据集文件数>最近更新>项目名称升序。 - //8.AI任务最多:按项目包含的AI任务数量倒序排序,AI任务数>最近更新>项目名称升序。 - //9.模型最多:按项目包含的模型数量倒序排序,模型大小为0则不统计。模型数>最近更新>项目名称升序。\ - - //1.近期热门 case "most_popular": orderBy = models.SearchOrderByLastMonthVisitsReverse + "," + models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically - //2.近期活跃 + //2.近期活跃:按提交增长量(最近4个月commit数)倒序排序,提交增长量>最近更新>项目名称升序。 case "most_active": orderBy = models.SearchOrderByLastFourMonthCommitsReverse + "," + models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically - //3.最近更新 + //3.最近更新:按最近更新>项目名称升序排序。 case "recent_update": orderBy = models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically - //4.最近创建 + //4.最近创建:按项目创建时间排序,最近的排前面。最近创建>项目名称升序。 case "newest": orderBy = models.SearchOrderByNewest + "," + models.SearchOrderByAlphabetically - //5.点赞最多 + //5.点赞最多:按点赞数倒序排序。点赞数>最近更新>项目名称升序。 case "most_stars": orderBy = models.SearchOrderByStarsReverse + "," + models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically - //6.派生最多 + //6.派生最多:按派生数倒序排序。派生数>最近更新>项目名称升序。 case "most_forks": orderBy = models.SearchOrderByForksReverse + "," + models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically - //7.数据集最多 + //7.数据集最多:按项目包含的数据集文件数量倒序排序,数据集文件数>最近更新>项目名称升序。 case "most_datasets": orderBy = models.SearchOrderByDatasetCntReverse + "," + models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically - //8.AI任务最多 + //8.AI任务最多:按项目包含的AI任务数量倒序排序,AI任务数>最近更新>项目名称升序。 case "most_ai_tasks": orderBy = models.SearchOrderByAiTaskCntReverse + "," + models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically - //9.模型最多 + //9.模型最多:按项目包含的模型数量倒序排序,模型大小为0则不统计。模型数>最近更新>项目名称升序。 case "most_models": orderBy = models.SearchOrderByModelCntReverse + "," + models.SearchOrderByRecentUpdated + "," + models.SearchOrderByAlphabetically @@ -126,8 +132,13 @@ func FindRepos(opts FindReposOptions) (*models.FindReposResponse, error) { log.Error("FindRepos error when SearchRepository.%v", err) return nil, err } + result := make([]*models.Repository4Card, len(repos)) + for i, r := range repos { + result[i] = r.ToCardFormat() + } + return &models.FindReposResponse{ - Repos: repos, + Repos: result, Total: count, Page: opts.Page, PageSize: opts.PageSize,