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.

tech.go 2.8 kB

2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package tech
  2. import (
  3. "code.gitea.io/gitea/models"
  4. "code.gitea.io/gitea/services/repository"
  5. )
  6. func FindTech(opt models.FindTechOpt) ([]*models.TechConvergeBrief, error) {
  7. techList, err := models.FindTech(opt)
  8. if err != nil {
  9. return nil, err
  10. }
  11. r := make([]*models.TechConvergeBrief, len(techList))
  12. for i := 0; i < len(techList); i++ {
  13. r[i] = techList[i].Brief()
  14. }
  15. return r, nil
  16. }
  17. func SearchRepoInfoWithInstitution(opt *models.SearchRepoOpt) ([]*models.RepoWithInstitution, int64, error) {
  18. infos, err := models.GetAvailableRepoConvergeInfo(opt)
  19. if err != nil {
  20. return nil, 0, err
  21. }
  22. repoIds, institutionMap := getRepoIdAndInstitutionMap(infos)
  23. result, err := repository.FindRepos(repository.FindReposOptions{
  24. ListOptions: models.ListOptions{Page: opt.Page, PageSize: opt.PageSize},
  25. Sort: opt.OrderBy,
  26. Keyword: opt.Q,
  27. Topic: opt.Topic,
  28. RepoIds: repoIds,
  29. })
  30. if err != nil {
  31. return nil, 0, err
  32. }
  33. repoResult := make([]*models.RepoWithInstitution, 0, len(result.Repos))
  34. for _, repo := range result.Repos {
  35. repoResult = append(repoResult, &models.RepoWithInstitution{
  36. ID: repo.ID,
  37. OwnerID: repo.OwnerID,
  38. OwnerName: repo.OwnerName,
  39. Name: repo.Name,
  40. Topics: repo.Topics,
  41. Description: repo.Description,
  42. Institution: institutionMap[repo.ID],
  43. RelAvatarLink: repo.RelAvatarLink,
  44. UpdatedUnix: repo.UpdatedUnix,
  45. })
  46. }
  47. return repoResult, result.Total, nil
  48. }
  49. func getRepoIdAndInstitutionMap(infos []*models.RepoConvergeInfo) ([]int64, map[int64]string) {
  50. repoIds := make([]int64, 0, len(infos))
  51. institutionMap := make(map[int64]string, 0)
  52. // We only need the keys
  53. for _, info := range infos {
  54. repoIds = append(repoIds, info.RepoID)
  55. institutionMap[info.RepoID] = info.Institution
  56. }
  57. return repoIds, institutionMap
  58. }
  59. func IsValidRepoConvergeExists(repoId, baseInfoId int64) (bool, error) {
  60. list, err := models.GetRepoConverge(models.GetRepoConvergeOpts{
  61. Status: []int{models.TechHide, models.TechShow, models.TechMigrating},
  62. RepoId: repoId,
  63. BaseInfoId: baseInfoId,
  64. })
  65. if err != nil {
  66. return false, err
  67. }
  68. return len(list) > 0, nil
  69. }
  70. func UpdateTechMigrateStatus() error {
  71. migratingRepos, err := models.GetRepoConverge(models.GetRepoConvergeOpts{
  72. Status: []int{models.TechMigrating},
  73. })
  74. if err != nil {
  75. return err
  76. }
  77. for _, r := range migratingRepos {
  78. repo, err := models.GetRepositoryByID(r.RepoID)
  79. if err != nil {
  80. if models.IsErrRepoNotExist(err) {
  81. models.UpdateRepoConvergeStatus(r.ID, models.TechMigrateFailed)
  82. continue
  83. }
  84. continue
  85. }
  86. if repo.Status == models.RepositoryReady {
  87. models.UpdateRepoConvergeStatus(r.ID, models.DefaultTechApprovedStatus)
  88. continue
  89. }
  90. }
  91. return nil
  92. }