From 3dc260fac2746a643a081c2dff2d42b0cccad405 Mon Sep 17 00:00:00 2001 From: Kyle Waremburg Date: Thu, 13 Jun 2024 22:24:06 -0500 Subject: [PATCH 1/3] Adds the option to show unpicked teams during alliance selection --- field/arena.go | 7 +++++++ field/arena_notifiers.go | 2 ++ model/event_settings.go | 2 ++ static/css/audience_display.css | 20 ++++++++++++++++++++ static/js/audience_display.js | 13 +++++++++++++ templates/audience_display.html | 3 +++ templates/setup_settings.html | 7 +++++++ web/alliance_selection.go | 28 ++++++++++------------------ web/setup_settings.go | 4 +++- 9 files changed, 67 insertions(+), 19 deletions(-) diff --git a/field/arena.go b/field/arena.go index a4226dd4..0b09b738 100644 --- a/field/arena.go +++ b/field/arena.go @@ -47,6 +47,12 @@ const ( PostTimeout ) +type RankedTeam struct { + Rank int + TeamId int + Picked bool +} + type Arena struct { Database *model.Database EventSettings *model.EventSettings @@ -77,6 +83,7 @@ type Arena struct { SavedRankings game.Rankings AllianceStationDisplayMode string AllianceSelectionAlliances []model.Alliance + AllianceSelectionRankedTeams []*RankedTeam AllianceSelectionShowTimer bool AllianceSelectionTimeRemainingSec int PlayoffTournament *playoff.PlayoffTournament diff --git a/field/arena_notifiers.go b/field/arena_notifiers.go index 0c32979c..224d369c 100644 --- a/field/arena_notifiers.go +++ b/field/arena_notifiers.go @@ -69,10 +69,12 @@ func (arena *Arena) generateAllianceSelectionMessage() any { Alliances []model.Alliance ShowTimer bool TimeRemainingSec int + RankedTeams []*RankedTeam }{ arena.AllianceSelectionAlliances, arena.AllianceSelectionShowTimer, arena.AllianceSelectionTimeRemainingSec, + arena.AllianceSelectionRankedTeams, } } diff --git a/model/event_settings.go b/model/event_settings.go index a34aa042..fd87c1ca 100644 --- a/model/event_settings.go +++ b/model/event_settings.go @@ -21,6 +21,7 @@ type EventSettings struct { NumPlayoffAlliances int SelectionRound2Order string SelectionRound3Order string + SelectionShowUnpickedTeams bool TbaDownloadEnabled bool TbaPublishingEnabled bool TbaEventCode string @@ -70,6 +71,7 @@ func (database *Database) GetEventSettings() (*EventSettings, error) { NumPlayoffAlliances: 8, SelectionRound2Order: "L", SelectionRound3Order: "", + SelectionShowUnpickedTeams: false, TbaDownloadEnabled: true, ApChannel: 36, WarmupDurationSec: game.MatchTiming.WarmupDurationSec, diff --git a/static/css/audience_display.css b/static/css/audience_display.css index f463f0d5..4f1389d4 100644 --- a/static/css/audience_display.css +++ b/static/css/audience_display.css @@ -553,6 +553,26 @@ html { max-width: 800px; max-height: 400px; } +#allianceRankingsCentering { + position: absolute; + height: 100%; + left: 3em; + top: 3em; +} +#allianceRankings { + background-color: #fff; + padding: .5em 1em; + border: 2px solid #222; + font-size: 2em; + color: #222; + font-family: "FuturaLT"; + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + -webkit-column-gap: 1em; + -moz-column-gap: 1em; + column-gap: 1em; +} #allianceSelectionCentering { position: absolute; height: 100%; diff --git a/static/js/audience_display.js b/static/js/audience_display.js index cf4bbb4c..64bc57c7 100644 --- a/static/js/audience_display.js +++ b/static/js/audience_display.js @@ -328,6 +328,7 @@ const handlePlaySound = function(sound) { // Handles a websocket message to update the alliance selection screen. const handleAllianceSelection = function(data) { const alliances = data.Alliances; + const rankedTeams = data.RankedTeams; if (alliances && alliances.length > 0) { const numColumns = alliances[0].TeamIds.length + 1; $.each(alliances, function(k, v) { @@ -335,6 +336,15 @@ const handleAllianceSelection = function(data) { }); $("#allianceSelection").html(allianceSelectionTemplate({alliances: alliances, numColumns: numColumns})); } + if (rankedTeams) { + var text = ''; + $.each(rankedTeams, function(i, v) { + if (!v.Picked) { + text += v.Rank + '. ' + v.TeamId + '
'; + } + }); + $("#allianceRankings").html(text); + } if (data.ShowTimer) { $("#allianceSelectionTimer").text(getCountdownString(data.TimeRemainingSec)); @@ -373,11 +383,14 @@ const handleLowerThird = function(data) { const transitionAllianceSelectionToBlank = function(callback) { $('#allianceSelectionCentering').transition({queue: false, right: "-60em"}, 500, "ease", callback); + $('#allianceRankingsCentering.enabled').transition({queue:false, left: "-60em"}, 500, "ease"); }; const transitionBlankToAllianceSelection = function(callback) { $('#allianceSelectionCentering').css("right","-60em").show(); $('#allianceSelectionCentering').transition({queue: false, right: "3em"}, 500, "ease", callback); + $('#allianceRankingsCentering.enabled').css('left', '-60em').show(); + $('#allianceRankingsCentering.enabled').transition({queue: false, left: "3em"}, 500, "ease"); }; const transitionBlankToBracket = function(callback) { diff --git a/templates/audience_display.html b/templates/audience_display.html index c7aa2cf7..f8688649 100644 --- a/templates/audience_display.html +++ b/templates/audience_display.html @@ -242,6 +242,9 @@ +
diff --git a/templates/setup_settings.html b/templates/setup_settings.html index cf6df401..7c797df1 100644 --- a/templates/setup_settings.html +++ b/templates/setup_settings.html @@ -97,6 +97,13 @@
+
+ +
+ +
+
Automatic Team Info Download diff --git a/web/alliance_selection.go b/web/alliance_selection.go index 49513760..81d376a6 100644 --- a/web/alliance_selection.go +++ b/web/alliance_selection.go @@ -7,6 +7,7 @@ package web import ( "fmt" + "github.com/Team254/cheesy-arena/field" "github.com/Team254/cheesy-arena/model" "github.com/Team254/cheesy-arena/tournament" "github.com/Team254/cheesy-arena/websocket" @@ -17,15 +18,6 @@ import ( "time" ) -type RankedTeam struct { - Rank int - TeamId int - Picked bool -} - -// Global var to hold the team rankings during the alliance selection. -var cachedRankedTeams []*RankedTeam - // Global var to hold configurable time limit for selections. A value of zero disables the timer. var allianceSelectionTimeLimitSec = 0 @@ -56,9 +48,9 @@ func (web *Web) allianceSelectionPostHandler(w http.ResponseWriter, r *http.Requ allianceSelectionTimeLimitSec, _ = strconv.Atoi(r.PostFormValue("timeLimitSec")) // Reset picked state for each team in preparation for reconstructing it. - newRankedTeams := make([]*RankedTeam, len(cachedRankedTeams)) - for i, team := range cachedRankedTeams { - newRankedTeams[i] = &RankedTeam{team.Rank, team.TeamId, false} + newRankedTeams := make([]*field.RankedTeam, len(web.arena.AllianceSelectionRankedTeams)) + for i, team := range web.arena.AllianceSelectionRankedTeams { + newRankedTeams[i] = &field.RankedTeam{team.Rank, team.TeamId, false} } // Iterate through all selections and update the alliances. @@ -100,7 +92,7 @@ func (web *Web) allianceSelectionPostHandler(w http.ResponseWriter, r *http.Requ } } } - cachedRankedTeams = newRankedTeams + web.arena.AllianceSelectionRankedTeams = newRankedTeams if allianceSelectionTicker != nil { allianceSelectionTicker.Stop() @@ -157,9 +149,9 @@ func (web *Web) allianceSelectionStartHandler(w http.ResponseWriter, r *http.Req handleWebErr(w, err) return } - cachedRankedTeams = make([]*RankedTeam, len(rankings)) + web.arena.AllianceSelectionRankedTeams = make([]*field.RankedTeam, len(rankings)) for i, ranking := range rankings { - cachedRankedTeams[i] = &RankedTeam{i + 1, ranking.TeamId, false} + web.arena.AllianceSelectionRankedTeams[i] = &field.RankedTeam{i + 1, ranking.TeamId, false} } web.arena.AllianceSelectionNotifier.Notify() @@ -191,7 +183,7 @@ func (web *Web) allianceSelectionResetHandler(w http.ResponseWriter, r *http.Req } web.arena.AllianceSelectionAlliances = []model.Alliance{} - cachedRankedTeams = []*RankedTeam{} + web.arena.AllianceSelectionRankedTeams = []*field.RankedTeam{} web.arena.AllianceSelectionNotifier.Notify() http.Redirect(w, r, "/alliance_selection", 303) } @@ -347,7 +339,7 @@ func (web *Web) renderAllianceSelection(w http.ResponseWriter, r *http.Request, data := struct { *model.EventSettings Alliances []model.Alliance - RankedTeams []*RankedTeam + RankedTeams []*field.RankedTeam NextRow int NextCol int ErrorMessage string @@ -355,7 +347,7 @@ func (web *Web) renderAllianceSelection(w http.ResponseWriter, r *http.Request, }{ web.arena.EventSettings, web.arena.AllianceSelectionAlliances, - cachedRankedTeams, + web.arena.AllianceSelectionRankedTeams, nextRow, nextCol, errorMessage, diff --git a/web/setup_settings.go b/web/setup_settings.go index 07fc3487..dbc5d279 100644 --- a/web/setup_settings.go +++ b/web/setup_settings.go @@ -7,6 +7,7 @@ package web import ( "fmt" + "github.com/Team254/cheesy-arena/field" "io" "io/ioutil" "net/http" @@ -71,6 +72,7 @@ func (web *Web) settingsPostHandler(w http.ResponseWriter, r *http.Request) { eventSettings.NumPlayoffAlliances = numAlliances eventSettings.SelectionRound2Order = r.PostFormValue("selectionRound2Order") eventSettings.SelectionRound3Order = r.PostFormValue("selectionRound3Order") + eventSettings.SelectionShowUnpickedTeams = r.PostFormValue("selectionShowUnpickedTeams") == "on" eventSettings.TbaDownloadEnabled = r.PostFormValue("tbaDownloadEnabled") == "on" eventSettings.TbaPublishingEnabled = r.PostFormValue("tbaPublishingEnabled") == "on" eventSettings.TbaEventCode = r.PostFormValue("tbaEventCode") @@ -256,7 +258,7 @@ func (web *Web) clearDbHandler(w http.ResponseWriter, r *http.Request) { return } web.arena.AllianceSelectionAlliances = []model.Alliance{} - cachedRankedTeams = []*RankedTeam{} + web.arena.AllianceSelectionRankedTeams = []*field.RankedTeam{} } http.Redirect(w, r, "/setup/settings", 303) From 8b9ccaf7b7df90a153d7fea6524ecdf50d96e909 Mon Sep 17 00:00:00 2001 From: Patrick Fairbank Date: Sun, 16 Jun 2024 14:46:47 -0700 Subject: [PATCH 2/3] Update AP integration for API changes. --- network/access_point.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/network/access_point.go b/network/access_point.go index 2407ebb1..8f34d509 100644 --- a/network/access_point.go +++ b/network/access_point.go @@ -60,14 +60,14 @@ type accessPointStatus struct { } type stationStatus struct { - Ssid string `json:"ssid"` - HashedWpaKey string `json:"hashedWpaKey"` - WpaKeySalt string `json:"wpaKeySalt"` - IsRobotRadioLinked bool `json:"isRobotRadioLinked"` - RxRateMbps float64 `json:"rxRateMbps"` - TxRateMbps float64 `json:"txRateMbps"` - SignalNoiseRatio int `json:"signalNoiseRatio"` - BandwidthUsedMbps float64 `json:"bandwidthUsedMbps"` + Ssid string `json:"ssid"` + HashedWpaKey string `json:"hashedWpaKey"` + WpaKeySalt string `json:"wpaKeySalt"` + IsLinked bool `json:"isLinked"` + RxRateMbps float64 `json:"rxRateMbps"` + TxRateMbps float64 `json:"txRateMbps"` + SignalNoiseRatio int `json:"signalNoiseRatio"` + BandwidthUsedMbps float64 `json:"bandwidthUsedMbps"` } func (ap *AccessPoint) SetSettings( @@ -227,7 +227,7 @@ func updateTeamWifiStatus(teamWifiStatus *TeamWifiStatus, stationStatus *station teamWifiStatus.SignalNoiseRatio = 0 } else { teamWifiStatus.TeamId, _ = strconv.Atoi(stationStatus.Ssid) - teamWifiStatus.RadioLinked = stationStatus.IsRobotRadioLinked + teamWifiStatus.RadioLinked = stationStatus.IsLinked teamWifiStatus.MBits = stationStatus.BandwidthUsedMbps teamWifiStatus.RxRate = stationStatus.RxRateMbps teamWifiStatus.TxRate = stationStatus.TxRateMbps From c5d1366acfe3c8984ff8f73ff14764ee5fdf136c Mon Sep 17 00:00:00 2001 From: Patrick Fairbank Date: Sun, 16 Jun 2024 16:42:37 -0700 Subject: [PATCH 3/3] Switch alliance selection unpicked teams overlay to use flexbox and fix tests. --- field/arena.go | 8 +------- field/arena_notifiers.go | 2 +- model/alliance.go | 6 ++++++ static/css/audience_display.css | 27 +++++++++++++++++++-------- static/js/audience_display.js | 7 ++++--- templates/setup_settings.html | 4 +++- web/alliance_selection.go | 23 ++++++++++++----------- web/alliance_selection_test.go | 10 +--------- web/setup_settings.go | 3 +-- 9 files changed, 48 insertions(+), 42 deletions(-) diff --git a/field/arena.go b/field/arena.go index 0b09b738..051dc4ed 100644 --- a/field/arena.go +++ b/field/arena.go @@ -47,12 +47,6 @@ const ( PostTimeout ) -type RankedTeam struct { - Rank int - TeamId int - Picked bool -} - type Arena struct { Database *model.Database EventSettings *model.EventSettings @@ -83,7 +77,7 @@ type Arena struct { SavedRankings game.Rankings AllianceStationDisplayMode string AllianceSelectionAlliances []model.Alliance - AllianceSelectionRankedTeams []*RankedTeam + AllianceSelectionRankedTeams []model.AllianceSelectionRankedTeam AllianceSelectionShowTimer bool AllianceSelectionTimeRemainingSec int PlayoffTournament *playoff.PlayoffTournament diff --git a/field/arena_notifiers.go b/field/arena_notifiers.go index 224d369c..17f6119d 100644 --- a/field/arena_notifiers.go +++ b/field/arena_notifiers.go @@ -69,7 +69,7 @@ func (arena *Arena) generateAllianceSelectionMessage() any { Alliances []model.Alliance ShowTimer bool TimeRemainingSec int - RankedTeams []*RankedTeam + RankedTeams []model.AllianceSelectionRankedTeam }{ arena.AllianceSelectionAlliances, arena.AllianceSelectionShowTimer, diff --git a/model/alliance.go b/model/alliance.go index b627e5c9..de733db4 100644 --- a/model/alliance.go +++ b/model/alliance.go @@ -13,6 +13,12 @@ type Alliance struct { Lineup [3]int } +type AllianceSelectionRankedTeam struct { + Rank int + TeamId int + Picked bool +} + func (database *Database) CreateAlliance(alliance *Alliance) error { return database.allianceTable.create(alliance) } diff --git a/static/css/audience_display.css b/static/css/audience_display.css index 4f1389d4..a1c02d2e 100644 --- a/static/css/audience_display.css +++ b/static/css/audience_display.css @@ -560,18 +560,29 @@ html { top: 3em; } #allianceRankings { + max-width: 11em; + max-height: 92%; + display: flex; + flex-flow: column wrap; + overflow: hidden; background-color: #fff; - padding: .5em 1em; border: 2px solid #222; font-size: 2em; - color: #222; font-family: "FuturaLT"; - -webkit-column-count: 3; - -moz-column-count: 3; - column-count: 3; - -webkit-column-gap: 1em; - -moz-column-gap: 1em; - column-gap: 1em; +} +.unpicked { + width: 5.5em; + display: flex; + justify-content: start; +} +.unpicked-rank { + width: 1.8em; + text-align: right; + color: #999; +} +.unpicked-team { + margin-left: 0.3em; + color: #222; } #allianceSelectionCentering { position: absolute; diff --git a/static/js/audience_display.js b/static/js/audience_display.js index 64bc57c7..688732ed 100644 --- a/static/js/audience_display.js +++ b/static/js/audience_display.js @@ -337,10 +337,11 @@ const handleAllianceSelection = function(data) { $("#allianceSelection").html(allianceSelectionTemplate({alliances: alliances, numColumns: numColumns})); } if (rankedTeams) { - var text = ''; + let text = ""; $.each(rankedTeams, function(i, v) { if (!v.Picked) { - text += v.Rank + '. ' + v.TeamId + '
'; + text += `
${v.Rank}.
` + + `
${v.TeamId}
`; } }); $("#allianceRankings").html(text); @@ -389,7 +390,7 @@ const transitionAllianceSelectionToBlank = function(callback) { const transitionBlankToAllianceSelection = function(callback) { $('#allianceSelectionCentering').css("right","-60em").show(); $('#allianceSelectionCentering').transition({queue: false, right: "3em"}, 500, "ease", callback); - $('#allianceRankingsCentering.enabled').css('left', '-60em').show(); + $('#allianceRankingsCentering.enabled').css("left", "-60em").show(); $('#allianceRankingsCentering.enabled').transition({queue: false, left: "3em"}, 500, "ease"); }; diff --git a/templates/setup_settings.html b/templates/setup_settings.html index 7c797df1..68314713 100644 --- a/templates/setup_settings.html +++ b/templates/setup_settings.html @@ -98,7 +98,9 @@
- +
diff --git a/web/alliance_selection.go b/web/alliance_selection.go index 81d376a6..d15d0641 100644 --- a/web/alliance_selection.go +++ b/web/alliance_selection.go @@ -7,7 +7,6 @@ package web import ( "fmt" - "github.com/Team254/cheesy-arena/field" "github.com/Team254/cheesy-arena/model" "github.com/Team254/cheesy-arena/tournament" "github.com/Team254/cheesy-arena/websocket" @@ -48,9 +47,8 @@ func (web *Web) allianceSelectionPostHandler(w http.ResponseWriter, r *http.Requ allianceSelectionTimeLimitSec, _ = strconv.Atoi(r.PostFormValue("timeLimitSec")) // Reset picked state for each team in preparation for reconstructing it. - newRankedTeams := make([]*field.RankedTeam, len(web.arena.AllianceSelectionRankedTeams)) - for i, team := range web.arena.AllianceSelectionRankedTeams { - newRankedTeams[i] = &field.RankedTeam{team.Rank, team.TeamId, false} + for i := range web.arena.AllianceSelectionRankedTeams { + web.arena.AllianceSelectionRankedTeams[i].Picked = false } // Iterate through all selections and update the alliances. @@ -66,7 +64,7 @@ func (web *Web) allianceSelectionPostHandler(w http.ResponseWriter, r *http.Requ return } found := false - for _, team := range newRankedTeams { + for k, team := range web.arena.AllianceSelectionRankedTeams { if team.TeamId == teamId { if team.Picked { web.renderAllianceSelection(w, r, @@ -74,7 +72,7 @@ func (web *Web) allianceSelectionPostHandler(w http.ResponseWriter, r *http.Requ return } found = true - team.Picked = true + web.arena.AllianceSelectionRankedTeams[k].Picked = true web.arena.AllianceSelectionAlliances[i].TeamIds[j] = teamId break } @@ -92,7 +90,6 @@ func (web *Web) allianceSelectionPostHandler(w http.ResponseWriter, r *http.Requ } } } - web.arena.AllianceSelectionRankedTeams = newRankedTeams if allianceSelectionTicker != nil { allianceSelectionTicker.Stop() @@ -149,9 +146,13 @@ func (web *Web) allianceSelectionStartHandler(w http.ResponseWriter, r *http.Req handleWebErr(w, err) return } - web.arena.AllianceSelectionRankedTeams = make([]*field.RankedTeam, len(rankings)) + web.arena.AllianceSelectionRankedTeams = make([]model.AllianceSelectionRankedTeam, len(rankings)) for i, ranking := range rankings { - web.arena.AllianceSelectionRankedTeams[i] = &field.RankedTeam{i + 1, ranking.TeamId, false} + web.arena.AllianceSelectionRankedTeams[i] = model.AllianceSelectionRankedTeam{ + Rank: i + 1, + TeamId: ranking.TeamId, + Picked: false, + } } web.arena.AllianceSelectionNotifier.Notify() @@ -183,7 +184,7 @@ func (web *Web) allianceSelectionResetHandler(w http.ResponseWriter, r *http.Req } web.arena.AllianceSelectionAlliances = []model.Alliance{} - web.arena.AllianceSelectionRankedTeams = []*field.RankedTeam{} + web.arena.AllianceSelectionRankedTeams = []model.AllianceSelectionRankedTeam{} web.arena.AllianceSelectionNotifier.Notify() http.Redirect(w, r, "/alliance_selection", 303) } @@ -339,7 +340,7 @@ func (web *Web) renderAllianceSelection(w http.ResponseWriter, r *http.Request, data := struct { *model.EventSettings Alliances []model.Alliance - RankedTeams []*field.RankedTeam + RankedTeams []model.AllianceSelectionRankedTeam NextRow int NextCol int ErrorMessage string diff --git a/web/alliance_selection_test.go b/web/alliance_selection_test.go index 532dea25..e598b2dc 100644 --- a/web/alliance_selection_test.go +++ b/web/alliance_selection_test.go @@ -16,8 +16,6 @@ import ( func TestAllianceSelection(t *testing.T) { web := setupTestWeb(t) - web.arena.AllianceSelectionAlliances = []model.Alliance{} - cachedRankedTeams = []*RankedTeam{} web.arena.EventSettings.PlayoffType = model.SingleEliminationPlayoff web.arena.EventSettings.NumPlayoffAlliances = 15 web.arena.EventSettings.SelectionRound3Order = "L" @@ -104,8 +102,6 @@ func TestAllianceSelection(t *testing.T) { func TestAllianceSelectionErrors(t *testing.T) { web := setupTestWeb(t) - web.arena.AllianceSelectionAlliances = []model.Alliance{} - cachedRankedTeams = []*RankedTeam{} web.arena.EventSettings.PlayoffType = model.SingleEliminationPlayoff web.arena.EventSettings.NumPlayoffAlliances = 2 for i := 1; i <= 6; i++ { @@ -157,7 +153,7 @@ func TestAllianceSelectionErrors(t *testing.T) { assert.Equal(t, 200, recorder.Code) assert.Contains(t, recorder.Body.String(), "already been finalized") web.arena.AllianceSelectionAlliances = []model.Alliance{} - cachedRankedTeams = []*RankedTeam{} + web.arena.AllianceSelectionRankedTeams = []model.AllianceSelectionRankedTeam{} recorder = web.postHttpResponse("/alliance_selection/start", "") assert.Equal(t, 200, recorder.Code) assert.Contains(t, recorder.Body.String(), "already been finalized") @@ -166,8 +162,6 @@ func TestAllianceSelectionErrors(t *testing.T) { func TestAllianceSelectionReset(t *testing.T) { web := setupTestWeb(t) - web.arena.AllianceSelectionAlliances = []model.Alliance{} - cachedRankedTeams = []*RankedTeam{} web.arena.EventSettings.PlayoffType = model.SingleEliminationPlayoff web.arena.EventSettings.NumPlayoffAlliances = 2 for i := 1; i <= 6; i++ { @@ -223,8 +217,6 @@ func TestAllianceSelectionReset(t *testing.T) { func TestAllianceSelectionAutofocus(t *testing.T) { web := setupTestWeb(t) - web.arena.AllianceSelectionAlliances = []model.Alliance{} - cachedRankedTeams = []*RankedTeam{} web.arena.EventSettings.PlayoffType = model.SingleEliminationPlayoff web.arena.EventSettings.NumPlayoffAlliances = 2 diff --git a/web/setup_settings.go b/web/setup_settings.go index dbc5d279..7673e2cb 100644 --- a/web/setup_settings.go +++ b/web/setup_settings.go @@ -7,7 +7,6 @@ package web import ( "fmt" - "github.com/Team254/cheesy-arena/field" "io" "io/ioutil" "net/http" @@ -258,7 +257,7 @@ func (web *Web) clearDbHandler(w http.ResponseWriter, r *http.Request) { return } web.arena.AllianceSelectionAlliances = []model.Alliance{} - web.arena.AllianceSelectionRankedTeams = []*field.RankedTeam{} + web.arena.AllianceSelectionRankedTeams = []model.AllianceSelectionRankedTeam{} } http.Redirect(w, r, "/setup/settings", 303)