mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-09 21:56:50 -04:00
Added nicknames to pit display.
This commit is contained in:
28
api.go
28
api.go
@@ -10,6 +10,11 @@ import (
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type RankingWithNickname struct {
|
||||
Ranking
|
||||
Nickname string
|
||||
}
|
||||
|
||||
// Generates a JSON dump of the qualification rankings.
|
||||
func RankingsApiHandler(w http.ResponseWriter, r *http.Request) {
|
||||
rankings, err := db.GetAllRankings()
|
||||
@@ -17,9 +22,26 @@ func RankingsApiHandler(w http.ResponseWriter, r *http.Request) {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
var rankingsWithNicknames []RankingWithNickname
|
||||
if rankings == nil {
|
||||
// Go marshals an empty slice to null, so explicitly create it so that it appears as an empty JSON array.
|
||||
rankings = make([]Ranking, 0)
|
||||
rankingsWithNicknames = make([]RankingWithNickname, 0)
|
||||
} else {
|
||||
rankingsWithNicknames = make([]RankingWithNickname, len(rankings))
|
||||
}
|
||||
|
||||
// Get team info so that nicknames can be displayed.
|
||||
teams, err := db.GetAllTeams()
|
||||
if err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
teamNicknames := make(map[int]string)
|
||||
for _, team := range teams {
|
||||
teamNicknames[team.Id] = team.Nickname
|
||||
}
|
||||
for i, ranking := range rankings {
|
||||
rankingsWithNicknames[i] = RankingWithNickname{ranking, teamNicknames[ranking.TeamId]}
|
||||
}
|
||||
|
||||
// Get the last match scored so we can report that on the display.
|
||||
@@ -36,9 +58,9 @@ func RankingsApiHandler(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
data := struct {
|
||||
Rankings []Ranking
|
||||
Rankings []RankingWithNickname
|
||||
HighestPlayedMatch string
|
||||
}{rankings, highestPlayedMatch}
|
||||
}{rankingsWithNicknames, highestPlayedMatch}
|
||||
jsonData, err := json.MarshalIndent(data, "", " ")
|
||||
if err != nil {
|
||||
handleWebErr(w, err)
|
||||
|
||||
13
api_test.go
13
api_test.go
@@ -19,7 +19,8 @@ func TestRankingsApi(t *testing.T) {
|
||||
assert.Equal(t, 200, recorder.Code)
|
||||
assert.Equal(t, "application/json", recorder.HeaderMap["Content-Type"][0])
|
||||
rankingsData := struct {
|
||||
Rankings []Ranking
|
||||
Rankings []RankingWithNickname
|
||||
TeamNicknames map[string]string
|
||||
HighestPlayedMatch string
|
||||
}{}
|
||||
err := json.Unmarshal([]byte(recorder.Body.String()), &rankingsData)
|
||||
@@ -27,12 +28,14 @@ func TestRankingsApi(t *testing.T) {
|
||||
assert.Equal(t, 0, len(rankingsData.Rankings))
|
||||
assert.Equal(t, "", rankingsData.HighestPlayedMatch)
|
||||
|
||||
ranking1 := Ranking{1114, 2, 18, 1100, 625, 90, 554, 0.254, 9, 1, 0, 0, 10}
|
||||
ranking2 := Ranking{254, 1, 20, 1100, 625, 90, 554, 0.254, 10, 0, 0, 0, 10}
|
||||
db.CreateRanking(&ranking1)
|
||||
db.CreateRanking(&ranking2)
|
||||
ranking1 := RankingWithNickname{Ranking{1114, 2, 18, 1100, 625, 90, 554, 0.254, 9, 1, 0, 0, 10}, "Simbots"}
|
||||
ranking2 := RankingWithNickname{Ranking{254, 1, 20, 1100, 625, 90, 554, 0.254, 10, 0, 0, 0, 10}, "ChezyPof"}
|
||||
db.CreateRanking(&ranking1.Ranking)
|
||||
db.CreateRanking(&ranking2.Ranking)
|
||||
db.CreateMatch(&Match{Type: "qualification", DisplayName: "29", Status: "complete"})
|
||||
db.CreateMatch(&Match{Type: "qualification", DisplayName: "30"})
|
||||
db.CreateTeam(&Team{Id: 254, Nickname: "ChezyPof"})
|
||||
db.CreateTeam(&Team{Id: 1114, Nickname: "Simbots"})
|
||||
|
||||
recorder = getHttpResponse("/api/rankings")
|
||||
assert.Equal(t, 200, recorder.Code)
|
||||
|
||||
@@ -57,16 +57,23 @@ body {
|
||||
border-top: 1px solid #000;
|
||||
}
|
||||
.rankings-table {
|
||||
table-layout: fixed;
|
||||
text-align: center;
|
||||
font-size: 17px;
|
||||
color: #000;
|
||||
border-bottom: 3px solid #666;
|
||||
margin: 0;
|
||||
}
|
||||
.team-field {
|
||||
width: 7%;
|
||||
}
|
||||
.team-nickname {
|
||||
width: 30%;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-align: left;
|
||||
}
|
||||
.rankings-table > tbody > tr > td {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
.align-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Display</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li class="disabled"><a href="#">Audience</a></li>
|
||||
<li><a href="/displays/pit">Pit</a></li>
|
||||
<li><a target="_blank" href="/displays/pit">Pit</a></li>
|
||||
<li class="disabled"><a href="#">Announcer</a></li>
|
||||
<li class="disabled"><a href="#">Referee</a></li>
|
||||
<li class="disabled"><a href="#">Scoring</a></li>
|
||||
|
||||
@@ -21,17 +21,17 @@
|
||||
<div id="standings">
|
||||
<table id="header">
|
||||
<tr>
|
||||
<td style="width: 7%;">Rank</td>
|
||||
<td style="width: 7%;">Team</td>
|
||||
<td style="width: 30%;" class="align-left">Name</td>
|
||||
<td style="width: 7%;">W-L-T</td>
|
||||
<td style="width: 7%;">QS</td>
|
||||
<td style="width: 7%;">Assist</td>
|
||||
<td style="width: 7%;">Auto</td>
|
||||
<td style="width: 7%;">T&C</td>
|
||||
<td style="width: 7%;">G&F</td>
|
||||
<td style="width: 7%;">DQ</td>
|
||||
<td style="width: 7%;">Played</td>
|
||||
<td class="team-field">Rank</td>
|
||||
<td class="team-field">Team</td>
|
||||
<td style="team-nickname">Name</td>
|
||||
<td class="team-field">W-L-T</td>
|
||||
<td class="team-field">QS</td>
|
||||
<td class="team-field">Assist</td>
|
||||
<td class="team-field">Auto</td>
|
||||
<td class="team-field">T&C</td>
|
||||
<td class="team-field">G&F</td>
|
||||
<td class="team-field">DQ</td>
|
||||
<td class="team-field">Played</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="container">
|
||||
@@ -49,17 +49,17 @@
|
||||
<tbody>
|
||||
{{"{{#each Rankings}}"}}
|
||||
<tr>
|
||||
<td style="width: 7%;">{{"{{../Iteration}}"}} {{"{{this.Rank}}"}}</td>
|
||||
<td style="width: 7%;">{{"{{this.TeamId}}"}}</td>
|
||||
<td style="width: 30%;" class="align-left">Teh Chezy Pofs</td>
|
||||
<td style="width: 7%;">{{"{{this.Wins}}"}}-{{"{{this.Losses}}"}}-{{"{{this.Ties}}"}}</td>
|
||||
<td style="width: 7%;">{{"{{this.QualificationScore}}"}}</td>
|
||||
<td style="width: 7%;">{{"{{this.AssistPoints}}"}}</td>
|
||||
<td style="width: 7%;">{{"{{this.AutoPoints}}"}}</td>
|
||||
<td style="width: 7%;">{{"{{this.TrussCatchPoints}}"}}</td>
|
||||
<td style="width: 7%;">{{"{{this.GoalFoulPoints}}"}}</td>
|
||||
<td style="width: 7%;">{{"{{this.Disqualifications}}"}}</td>
|
||||
<td style="width: 7%;">{{"{{this.Played}}"}}</td>
|
||||
<td class="team-field">{{"{{../Iteration}}"}} {{"{{this.Rank}}"}}</td>
|
||||
<td class="team-field">{{"{{this.TeamId}}"}}</td>
|
||||
<td class="team-nickname">{{"{{this.Nickname}}"}}</td>
|
||||
<td class="team-field">{{"{{this.Wins}}"}}-{{"{{this.Losses}}"}}-{{"{{this.Ties}}"}}</td>
|
||||
<td class="team-field">{{"{{this.QualificationScore}}"}}</td>
|
||||
<td class="team-field">{{"{{this.AssistPoints}}"}}</td>
|
||||
<td class="team-field">{{"{{this.AutoPoints}}"}}</td>
|
||||
<td class="team-field">{{"{{this.TrussCatchPoints}}"}}</td>
|
||||
<td class="team-field">{{"{{this.GoalFoulPoints}}"}}</td>
|
||||
<td class="team-field">{{"{{this.Disqualifications}}"}}</td>
|
||||
<td class="team-field">{{"{{this.Played}}"}}</td>
|
||||
</tr>
|
||||
{{"{{/each}}"}}
|
||||
</tbody>
|
||||
|
||||
Reference in New Issue
Block a user