From 2028b24e3c24d924017d290bbd2668c0f75aeef8 Mon Sep 17 00:00:00 2001 From: Gregory Eremin Date: Thu, 19 Mar 2015 19:55:29 +0700 Subject: [PATCH] Sync org members task --- task/sync.go | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/task/sync.go b/task/sync.go index 3397aa8..d331d97 100644 --- a/task/sync.go +++ b/task/sync.go @@ -135,6 +135,45 @@ func SyncOrgTeams(token string, org *db.Org) (err error) { return } + +func SyncOrgMembers(token string, org *db.Org) (err error) { + defer report("SyncOrgTeams", time.Now()) + client := newGithubClient(token) + opt := &github.ListMembersOptions{ListOptions: github.ListOptions{PerPage: 100}} + + var ids = []uint64{} + + for { + opt.Page++ + var users []github.User + var resp *github.Response + if users, resp, err = client.Organizations.ListMembers(org.Login, opt); err != nil { + return + } + saveResponseMeta(token, resp) + + for _, user := range users { + var name, avatarURL string + if user.Name != nil { + name = *user.Name + } + if user.AvatarURL != nil { + avatarURL = *user.AvatarURL + } + u := &db.User{ + ID: uint64(*user.ID), + Login: *user.Login, + Name: name, + AvatarURL: avatarURL, + } + u.Save() + ids = append(ids, u.ID) + } + if opt.Page == resp.LastPage { + break } } + db.SaveOrgMembers(org.ID, ids) + + return }