member.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package service
  2. import (
  3. "context"
  4. "go-common/app/admin/ep/saga/model"
  5. "go-common/library/log"
  6. "github.com/xanzy/go-gitlab"
  7. )
  8. // QueryProjectMembers ...
  9. func (s *Service) QueryProjectMembers(c context.Context, req *model.ProjectDataReq) (resp []*gitlab.ProjectMember, err error) {
  10. var (
  11. members []*gitlab.ProjectMember
  12. response *gitlab.Response
  13. memberItem []*gitlab.ProjectMember
  14. )
  15. if members, response, err = s.gitlab.ListProjectMembers(req.ProjectID, 1); err != nil {
  16. return
  17. }
  18. page := 2
  19. for page <= response.TotalPages {
  20. memberItem, _, err = s.gitlab.ListProjectMembers(req.ProjectID, page)
  21. members = append(members, memberItem...)
  22. page++
  23. }
  24. resp = members
  25. return
  26. }
  27. /*-------------------------------------- sync member ----------------------------------------*/
  28. // SyncProjectMember ...
  29. func (s *Service) SyncProjectMember(c context.Context, projectID int) (totalPage, totalNum int, err error) {
  30. var (
  31. resp *gitlab.Response
  32. members []*gitlab.ProjectMember
  33. projectInfo *model.ProjectInfo
  34. )
  35. if projectInfo, err = s.dao.ProjectInfoByID(projectID); err != nil {
  36. return
  37. }
  38. for page := 1; ; page++ {
  39. totalPage++
  40. if members, resp, err = s.gitlab.ListProjectMembers(projectID, page); err != nil {
  41. return
  42. }
  43. for _, member := range members {
  44. memberDB := &model.StatisticsMembers{
  45. ProjectID: projectID,
  46. ProjectName: projectInfo.Name,
  47. MemberID: member.ID,
  48. Username: member.Username,
  49. Email: member.Email,
  50. Name: member.Name,
  51. State: member.State,
  52. CreatedAt: member.CreatedAt,
  53. AccessLevel: int(member.AccessLevel),
  54. }
  55. if err = s.SaveDatabaseMember(c, memberDB); err != nil {
  56. log.Error("member Save Database err: projectID(%d), MemberID(%d)", projectID, member.ID)
  57. err = nil
  58. continue
  59. }
  60. totalNum++
  61. }
  62. if resp.NextPage == 0 {
  63. break
  64. }
  65. }
  66. return
  67. }
  68. // SaveDatabaseMember ...
  69. func (s *Service) SaveDatabaseMember(c context.Context, memberDB *model.StatisticsMembers) (err error) {
  70. var total int
  71. if total, err = s.dao.HasMember(c, memberDB.ProjectID, memberDB.MemberID); err != nil {
  72. log.Error("SaveDatabaseMember HasMember(%+v)", err)
  73. return
  74. }
  75. // update found row
  76. if total == 1 {
  77. if err = s.dao.UpdateMember(c, memberDB.ProjectID, memberDB.MemberID, memberDB); err != nil {
  78. log.Error("SaveDatabaseMember UpdateMember(%+v)", err)
  79. }
  80. return
  81. } else if total > 1 {
  82. // found repeated row, this situation will not exist under normal
  83. log.Warn("SaveDatabaseMember Note has more rows(%d)", total)
  84. return
  85. }
  86. // insert row now
  87. if err = s.dao.CreateMember(c, memberDB); err != nil {
  88. log.Error("SaveDatabaseMember CreateMember(%+v)", err)
  89. return
  90. }
  91. return
  92. }