Add button to re-download team info from TBA and overwrite local edits.

This commit is contained in:
Patrick Fairbank
2018-09-23 15:51:09 -07:00
parent f4ea501c96
commit ca99653de7
4 changed files with 85 additions and 54 deletions

View File

@@ -48,13 +48,14 @@ func (web *Web) teamsPostHandler(w http.ResponseWriter, r *http.Request) {
}
for _, teamNumber := range teamNumbers {
team, err := web.getOfficialTeamInfo(teamNumber)
if err != nil {
handleWebErr(w, err)
return
team := model.Team{Id: teamNumber}
if web.arena.EventSettings.TBADownloadEnabled {
if err := web.populateOfficialTeamInfo(&team); err != nil {
handleWebErr(w, err)
return
}
}
err = web.arena.Database.CreateTeam(team)
if err != nil {
if err := web.arena.Database.CreateTeam(&team); err != nil {
handleWebErr(w, err)
return
}
@@ -62,6 +63,32 @@ func (web *Web) teamsPostHandler(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "/setup/teams", 303)
}
// Re-downloads the data for all teams from TBA and overwrites any local edits.
func (web *Web) teamsRefreshHandler(w http.ResponseWriter, r *http.Request) {
if !web.userIsAdmin(w, r) {
return
}
teams, err := web.arena.Database.GetAllTeams()
if err != nil {
handleWebErr(w, err)
return
}
for _, team := range teams {
if err = web.populateOfficialTeamInfo(&team); err != nil {
handleWebErr(w, err)
return
}
if err = web.arena.Database.SaveTeam(&team); err != nil {
handleWebErr(w, err)
return
}
}
http.Redirect(w, r, "/setup/teams", 303)
}
// Clears the team list.
func (web *Web) teamsClearHandler(w http.ResponseWriter, r *http.Request) {
if !web.userIsAdmin(w, r) {
@@ -261,54 +288,45 @@ func (web *Web) canModifyTeamList() bool {
}
// Returns the data for the given team number.
func (web *Web) getOfficialTeamInfo(teamId int) (*model.Team, error) {
// Create the team variable that stores the result
var team model.Team
if web.arena.EventSettings.TBADownloadEnabled {
tbaTeam, err := web.arena.TbaClient.GetTeam(teamId)
if err != nil {
return nil, err
}
// Check if the result is valid. If a team is not found, just return a basic team
if tbaTeam.TeamNumber == 0 {
team = model.Team{Id: teamId}
} else {
robotName, err := web.arena.TbaClient.GetRobotName(teamId, time.Now().Year())
if err != nil {
return nil, err
}
recentAwards, err := web.arena.TbaClient.GetTeamAwards(teamId)
if err != nil {
return nil, err
}
var accomplishmentsBuffer bytes.Buffer
// Generate string of recent awards in reverse chronological order.
for i := len(recentAwards) - 1; i >= 0; i-- {
award := recentAwards[i]
if time.Now().Year()-award.Year <= 2 {
accomplishmentsBuffer.WriteString(fmt.Sprintf("<p>%d %s - %s</p>", award.Year, award.EventName,
award.Name))
}
}
// Download and store the team's avatar; if there isn't one, ignore the error.
web.arena.TbaClient.DownloadTeamAvatar(teamId, time.Now().Year())
// Use those variables to make a team object
team = model.Team{Id: teamId, Name: tbaTeam.Name, Nickname: tbaTeam.Nickname, City: tbaTeam.City,
StateProv: tbaTeam.StateProv, Country: tbaTeam.Country, RookieYear: tbaTeam.RookieYear,
RobotName: robotName, Accomplishments: accomplishmentsBuffer.String()}
}
} else {
// If team grab is disabled, just use the team number
team = model.Team{Id: teamId}
func (web *Web) populateOfficialTeamInfo(team *model.Team) error {
tbaTeam, err := web.arena.TbaClient.GetTeam(team.Id)
if err != nil {
return err
}
// Return the team object
return &team, nil
// Check if the result is valid. If a team is not found, it will just not have its detail fields filled out.
if tbaTeam.TeamNumber == 0 {
return nil
}
team.Name = tbaTeam.Name
team.Nickname = tbaTeam.Nickname
team.City = tbaTeam.City
team.StateProv = tbaTeam.StateProv
team.Country = tbaTeam.Country
team.RookieYear = tbaTeam.RookieYear
team.RobotName, err = web.arena.TbaClient.GetRobotName(team.Id, time.Now().Year())
if err != nil {
return err
}
// Generate string of recent awards in reverse chronological order.
recentAwards, err := web.arena.TbaClient.GetTeamAwards(team.Id)
if err != nil {
return err
}
var accomplishmentsBuffer bytes.Buffer
for i := len(recentAwards) - 1; i >= 0; i-- {
award := recentAwards[i]
if time.Now().Year()-award.Year <= 2 {
accomplishmentsBuffer.WriteString(fmt.Sprintf("<p>%d %s - %s</p>", award.Year, award.EventName,
award.Name))
}
}
team.Accomplishments = accomplishmentsBuffer.String()
// Download and store the team's avatar; if there isn't one, ignore the error.
web.arena.TbaClient.DownloadTeamAvatar(team.Id, time.Now().Year())
return nil
}

View File

@@ -107,6 +107,13 @@ func TestSetupTeams(t *testing.T) {
recorder = web.getHttpResponse("/setup/teams")
assert.Contains(t, recorder.Body.String(), "Teh Chezy Pofs")
// Re-download team info from TBA.
recorder = web.getHttpResponse("/setup/teams/refresh")
assert.Equal(t, 303, recorder.Code)
recorder = web.getHttpResponse("/setup/teams")
assert.Contains(t, recorder.Body.String(), "The Cheesy Poofs")
assert.NotContains(t, recorder.Body.String(), "Teh Chezy Pofs")
// Delete a team.
recorder = web.postHttpResponse("/setup/teams/1114/delete", "")
assert.Equal(t, 303, recorder.Code)

View File

@@ -195,6 +195,7 @@ func (web *Web) newHandler() http.Handler {
router.HandleFunc("/setup/teams/clear", web.teamsClearHandler).Methods("POST")
router.HandleFunc("/setup/teams/generate_wpa_keys", web.teamsGenerateWpaKeysHandler).Methods("GET")
router.HandleFunc("/setup/teams/publish", web.teamsPublishHandler).Methods("POST")
router.HandleFunc("/setup/teams/refresh", web.teamsRefreshHandler).Methods("GET")
return router
}