Sync team repos task and db func
This commit is contained in:
		
							parent
							
								
									86e7b499b4
								
							
						
					
					
						commit
						6e498953bd
					
				@ -67,3 +67,34 @@ func SaveTeamMembers(orgID, teamID uint64, members []uint64) {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SaveTeamRepos(orgID, teamID uint64, repos []uint64) {
 | 
			
		||||
	defer measure("SaveTeamRepos", time.Now())
 | 
			
		||||
	tx := db.MustBegin()
 | 
			
		||||
 | 
			
		||||
	var ids = []string{}
 | 
			
		||||
	for _, id := range repos {
 | 
			
		||||
		ids = append(ids, strconv.FormatUint(id, 10))
 | 
			
		||||
	}
 | 
			
		||||
	tx.MustExec(fmt.Sprintf(`
 | 
			
		||||
        delete from team_repos
 | 
			
		||||
        where
 | 
			
		||||
            org_id = %d and
 | 
			
		||||
            team_id = %d and
 | 
			
		||||
            repo_id not in (%s)
 | 
			
		||||
    `, orgID, teamID, strings.Join(ids, ", ")))
 | 
			
		||||
 | 
			
		||||
	var values = []string{}
 | 
			
		||||
	for _, id := range repos {
 | 
			
		||||
		values = append(values, fmt.Sprintf("(%d, %d, %d)", orgID, teamID, id))
 | 
			
		||||
	}
 | 
			
		||||
	tx.MustExec(`
 | 
			
		||||
        insert into team_repos (org_id, team_id, repo_id)
 | 
			
		||||
        values ` + strings.Join(values, ", ") + `
 | 
			
		||||
        on duplicate key update org_id = org_id
 | 
			
		||||
    `)
 | 
			
		||||
 | 
			
		||||
	if err := tx.Commit(); err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										28
									
								
								task/sync.go
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								task/sync.go
									
									
									
									
									
								
							@ -128,6 +128,7 @@ func SyncOrgTeams(token string, org *db.Org) (err error) {
 | 
			
		||||
				OrgID:      org.ID,
 | 
			
		||||
			}
 | 
			
		||||
			go SyncTeamMembers(token, t)
 | 
			
		||||
			go SyncTeamRepos(token, t)
 | 
			
		||||
			t.Save()
 | 
			
		||||
		}
 | 
			
		||||
		if opt.Page >= resp.LastPage {
 | 
			
		||||
@ -192,3 +193,30 @@ func SyncTeamMembers(token string, team *db.Team) (err error) {
 | 
			
		||||
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SyncTeamRepos(token string, team *db.Team) (err error) {
 | 
			
		||||
	defer report("SyncTeamRepos", time.Now())
 | 
			
		||||
	client := newGithubClient(token)
 | 
			
		||||
	opt := &github.ListOptions{PerPage: 100}
 | 
			
		||||
 | 
			
		||||
	var ids = []uint64{}
 | 
			
		||||
	for {
 | 
			
		||||
		opt.Page++
 | 
			
		||||
		var repos []github.Repository
 | 
			
		||||
		var resp *github.Response
 | 
			
		||||
		if repos, resp, err = client.Organizations.ListTeamRepos(int(team.ID), opt); err != nil {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		saveResponseMeta(token, resp)
 | 
			
		||||
 | 
			
		||||
		for _, repo := range repos {
 | 
			
		||||
			ids = append(ids, uint64(*repo.ID))
 | 
			
		||||
		}
 | 
			
		||||
		if opt.Page >= resp.LastPage {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	db.SaveTeamRepos(team.OrgID, team.ID, ids)
 | 
			
		||||
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user