Make team number a string
Signed-off-by: Emily Markova <emily.markova@gmail.com>
Change-Id: Ia1cff2cfb854e2202cbcaee6f1fd22fc7efd1c15
diff --git a/scouting/db/db.go b/scouting/db/db.go
index 578edb6..cf1c823 100644
--- a/scouting/db/db.go
+++ b/scouting/db/db.go
@@ -82,7 +82,7 @@
type NotesData struct {
ID uint `gorm:"primaryKey"`
- TeamNumber int32
+ TeamNumber string
Notes string
GoodDriving bool
BadDriving bool
@@ -94,7 +94,7 @@
}
type Ranking struct {
- TeamNumber int `gorm:"primaryKey"`
+ TeamNumber string `gorm:"primaryKey"`
Losses, Wins, Ties int32
Rank, Dq int32
}
@@ -108,9 +108,9 @@
ID uint `gorm:"primaryKey"`
MatchNumber int32
- Rank1 int32
- Rank2 int32
- Rank3 int32
+ Rank1 string
+ Rank2 string
+ Rank3 string
}
type ParsedDriverRankingData struct {
@@ -340,14 +340,14 @@
return shifts, result.Error
}
-func (database *Database) QueryActions(teamNumber_ int) ([]Action, error) {
+func (database *Database) QueryActions(teamNumber_ string) ([]Action, error) {
var actions []Action
result := database.
Where("team_number = ?", teamNumber_).Find(&actions)
return actions, result.Error
}
-func (database *Database) QueryNotes(TeamNumber int32) ([]string, error) {
+func (database *Database) QueryNotes(TeamNumber string) ([]string, error) {
var rawNotes []NotesData
result := database.Where("team_number = ?", TeamNumber).Find(&rawNotes)
if result.Error != nil {
@@ -361,7 +361,7 @@
return notes, nil
}
-func (database *Database) QueryRankings(TeamNumber int) ([]Ranking, error) {
+func (database *Database) QueryRankings(TeamNumber string) ([]Ranking, error) {
var rankins []Ranking
result := database.Where("team_number = ?", TeamNumber).Find(&rankins)
return rankins, result.Error
diff --git a/scouting/db/db_test.go b/scouting/db/db_test.go
index 94dce7e..d7001b8 100644
--- a/scouting/db/db_test.go
+++ b/scouting/db/db_test.go
@@ -114,12 +114,12 @@
correct := []Ranking{
Ranking{
- TeamNumber: 123,
+ TeamNumber: "123",
Losses: 1, Wins: 7, Ties: 0,
Rank: 2, Dq: 0,
},
Ranking{
- TeamNumber: 125,
+ TeamNumber: "125",
Losses: 2, Wins: 4, Ties: 0,
Rank: 2, Dq: 0,
},
@@ -691,22 +691,22 @@
testDatabase := []Ranking{
Ranking{
- TeamNumber: 123,
+ TeamNumber: "123",
Losses: 1, Wins: 7, Ties: 2,
Rank: 2, Dq: 0,
},
Ranking{
- TeamNumber: 124,
+ TeamNumber: "124",
Losses: 3, Wins: 4, Ties: 0,
Rank: 4, Dq: 2,
},
Ranking{
- TeamNumber: 125,
+ TeamNumber: "125",
Losses: 5, Wins: 2, Ties: 0,
Rank: 17, Dq: 0,
},
Ranking{
- TeamNumber: 126,
+ TeamNumber: "126",
Losses: 0, Wins: 7, Ties: 0,
Rank: 5, Dq: 0,
},
@@ -719,13 +719,13 @@
correct := []Ranking{
Ranking{
- TeamNumber: 126,
+ TeamNumber: "126",
Losses: 0, Wins: 7, Ties: 0,
Rank: 5, Dq: 0,
},
}
- got, err := fixture.db.QueryRankings(126)
+ got, err := fixture.db.QueryRankings("126")
check(t, err, "Failed QueryRankings()")
if !reflect.DeepEqual(correct, got) {
@@ -830,22 +830,22 @@
correct := []Ranking{
Ranking{
- TeamNumber: 123,
+ TeamNumber: "123",
Losses: 1, Wins: 7, Ties: 2,
Rank: 2, Dq: 0,
},
Ranking{
- TeamNumber: 124,
+ TeamNumber: "124",
Losses: 3, Wins: 4, Ties: 0,
Rank: 4, Dq: 2,
},
Ranking{
- TeamNumber: 125,
+ TeamNumber: "125",
Losses: 5, Wins: 2, Ties: 0,
Rank: 17, Dq: 0,
},
Ranking{
- TeamNumber: 126,
+ TeamNumber: "126",
Losses: 0, Wins: 7, Ties: 0,
Rank: 5, Dq: 0,
},
@@ -1021,27 +1021,27 @@
testDatabase := []Ranking{
Ranking{
- TeamNumber: 123,
+ TeamNumber: "123",
Losses: 1, Wins: 7, Ties: 2,
Rank: 2, Dq: 0,
},
Ranking{
- TeamNumber: 124,
+ TeamNumber: "124",
Losses: 3, Wins: 4, Ties: 0,
Rank: 4, Dq: 2,
},
Ranking{
- TeamNumber: 125,
+ TeamNumber: "125",
Losses: 5, Wins: 2, Ties: 0,
Rank: 17, Dq: 0,
},
Ranking{
- TeamNumber: 126,
+ TeamNumber: "126",
Losses: 0, Wins: 7, Ties: 0,
Rank: 5, Dq: 0,
},
Ranking{
- TeamNumber: 125,
+ TeamNumber: "125",
Losses: 2, Wins: 4, Ties: 1,
Rank: 5, Dq: 0,
},
@@ -1054,13 +1054,13 @@
correct := []Ranking{
Ranking{
- TeamNumber: 125,
+ TeamNumber: "125",
Losses: 2, Wins: 4, Ties: 1,
Rank: 5, Dq: 0,
},
}
- got, err := fixture.db.QueryRankings(125)
+ got, err := fixture.db.QueryRankings("125")
check(t, err, "Failed QueryRankings()")
checkDeepEqual(t, correct, got)
@@ -1072,14 +1072,14 @@
expected := []string{"Note 1", "Note 3"}
- err := fixture.db.AddNotes(NotesData{TeamNumber: 1234, Notes: "Note 1", GoodDriving: true, BadDriving: false, SolidPlacing: false, SketchyPlacing: true, GoodDefense: false, BadDefense: true, EasilyDefended: true})
+ err := fixture.db.AddNotes(NotesData{TeamNumber: "1234", Notes: "Note 1", GoodDriving: true, BadDriving: false, SolidPlacing: false, SketchyPlacing: true, GoodDefense: false, BadDefense: true, EasilyDefended: true})
check(t, err, "Failed to add Note")
- err = fixture.db.AddNotes(NotesData{TeamNumber: 1235, Notes: "Note 2", GoodDriving: false, BadDriving: true, SolidPlacing: false, SketchyPlacing: true, GoodDefense: false, BadDefense: false, EasilyDefended: false})
+ err = fixture.db.AddNotes(NotesData{TeamNumber: "1235", Notes: "Note 2", GoodDriving: false, BadDriving: true, SolidPlacing: false, SketchyPlacing: true, GoodDefense: false, BadDefense: false, EasilyDefended: false})
check(t, err, "Failed to add Note")
- err = fixture.db.AddNotes(NotesData{TeamNumber: 1234, Notes: "Note 3", GoodDriving: true, BadDriving: false, SolidPlacing: false, SketchyPlacing: true, GoodDefense: true, BadDefense: false, EasilyDefended: true})
+ err = fixture.db.AddNotes(NotesData{TeamNumber: "1234", Notes: "Note 3", GoodDriving: true, BadDriving: false, SolidPlacing: false, SketchyPlacing: true, GoodDefense: true, BadDefense: false, EasilyDefended: true})
check(t, err, "Failed to add Note")
- actual, err := fixture.db.QueryNotes(1234)
+ actual, err := fixture.db.QueryNotes("1234")
check(t, err, "Failed to get Notes")
if !reflect.DeepEqual(expected, actual) {
@@ -1092,20 +1092,20 @@
defer fixture.TearDown()
expected := []DriverRankingData{
- {ID: 1, MatchNumber: 12, Rank1: 1234, Rank2: 1235, Rank3: 1236},
- {ID: 2, MatchNumber: 12, Rank1: 1236, Rank2: 1235, Rank3: 1234},
+ {ID: 1, MatchNumber: 12, Rank1: "1234", Rank2: "1235", Rank3: "1236"},
+ {ID: 2, MatchNumber: 12, Rank1: "1236", Rank2: "1235", Rank3: "1234"},
}
err := fixture.db.AddDriverRanking(
- DriverRankingData{MatchNumber: 12, Rank1: 1234, Rank2: 1235, Rank3: 1236},
+ DriverRankingData{MatchNumber: 12, Rank1: "1234", Rank2: "1235", Rank3: "1236"},
)
check(t, err, "Failed to add Driver Ranking")
err = fixture.db.AddDriverRanking(
- DriverRankingData{MatchNumber: 12, Rank1: 1236, Rank2: 1235, Rank3: 1234},
+ DriverRankingData{MatchNumber: 12, Rank1: "1236", Rank2: "1235", Rank3: "1234"},
)
check(t, err, "Failed to add Driver Ranking")
err = fixture.db.AddDriverRanking(
- DriverRankingData{MatchNumber: 13, Rank1: 1235, Rank2: 1234, Rank3: 1236},
+ DriverRankingData{MatchNumber: 13, Rank1: "1235", Rank2: "1234", Rank3: "1236"},
)
check(t, err, "Failed to add Driver Ranking")
diff --git a/scouting/webserver/driver_ranking/driver_ranking.go b/scouting/webserver/driver_ranking/driver_ranking.go
index 82e34e1..82445bf 100644
--- a/scouting/webserver/driver_ranking/driver_ranking.go
+++ b/scouting/webserver/driver_ranking/driver_ranking.go
@@ -76,9 +76,9 @@
// Most of the data is unused so we just fill in empty
// strings.
"", "", "", "",
- strconv.Itoa(int(ranking.Rank1)),
- strconv.Itoa(int(ranking.Rank2)),
- strconv.Itoa(int(ranking.Rank3)),
+ ranking.Rank1,
+ ranking.Rank2,
+ ranking.Rank3,
})
}
diff --git a/scouting/webserver/driver_ranking/driver_ranking_test.go b/scouting/webserver/driver_ranking/driver_ranking_test.go
index 47a412e..98a60e8 100644
--- a/scouting/webserver/driver_ranking/driver_ranking_test.go
+++ b/scouting/webserver/driver_ranking/driver_ranking_test.go
@@ -28,8 +28,8 @@
func TestDriverRankingRun(t *testing.T) {
var database MockDatabase
database.rawRankings = []db.DriverRankingData{
- db.DriverRankingData{MatchNumber: 1, Rank1: 1234, Rank2: 1235, Rank3: 1236},
- db.DriverRankingData{MatchNumber: 2, Rank1: 971, Rank2: 972, Rank3: 973},
+ db.DriverRankingData{MatchNumber: 1, Rank1: "1234", Rank2: "1235", Rank3: "1236"},
+ db.DriverRankingData{MatchNumber: 2, Rank1: "971", Rank2: "972", Rank3: "973"},
}
GenerateFullDriverRanking(&database, "./fake_driver_rank_script")
diff --git a/scouting/webserver/match_list/match_list.go b/scouting/webserver/match_list/match_list.go
index c5af661..2ac5133 100644
--- a/scouting/webserver/match_list/match_list.go
+++ b/scouting/webserver/match_list/match_list.go
@@ -6,7 +6,6 @@
"github.com/frc971/971-Robot-Code/scouting/db"
"github.com/frc971/971-Robot-Code/scouting/scraping"
"log"
- "strconv"
"strings"
)
@@ -14,66 +13,32 @@
AddToMatch(db.TeamMatch) error
}
-func parseTeamKey(teamKey string) (int, error) {
+func parseTeamKey(teamKey string) string {
// TBA prefixes teams with "frc". Not sure why. Get rid of that.
teamKey = strings.TrimPrefix(teamKey, "frc")
- magnitude := 0
- if strings.HasSuffix(teamKey, "A") {
- magnitude = 0
- teamKey = strings.TrimSuffix(teamKey, "A")
- } else if strings.HasSuffix(teamKey, "B") {
- magnitude = 9
- teamKey = strings.TrimSuffix(teamKey, "B")
- } else if strings.HasSuffix(teamKey, "C") {
- magnitude = 8
- teamKey = strings.TrimSuffix(teamKey, "C")
- } else if strings.HasSuffix(teamKey, "D") {
- magnitude = 7
- teamKey = strings.TrimSuffix(teamKey, "D")
- } else if strings.HasSuffix(teamKey, "E") {
- magnitude = 6
- teamKey = strings.TrimSuffix(teamKey, "E")
- } else if strings.HasSuffix(teamKey, "F") {
- magnitude = 5
- teamKey = strings.TrimSuffix(teamKey, "F")
- }
-
- if magnitude != 0 {
- teamKey = strconv.Itoa(magnitude) + teamKey
- }
-
- result, err := strconv.Atoi(teamKey)
- return result, err
+ return teamKey
}
// Parses the alliance data from the specified match and returns the three red
// teams and the three blue teams.
-func parseTeamKeys(match *scraping.Match) ([3]int32, [3]int32, error) {
+func parseTeamKeys(match *scraping.Match) ([3]string, [3]string, error) {
redKeys := match.Alliances.Red.TeamKeys
blueKeys := match.Alliances.Blue.TeamKeys
if len(redKeys) != 3 || len(blueKeys) != 3 {
- return [3]int32{}, [3]int32{}, errors.New(fmt.Sprintf(
+ return [3]string{}, [3]string{}, errors.New(fmt.Sprintf(
"Found %d red teams and %d blue teams.", len(redKeys), len(blueKeys)))
}
- var red [3]int32
+ var red [3]string
for i, key := range redKeys {
- team, err := parseTeamKey(key)
- if err != nil {
- return [3]int32{}, [3]int32{}, errors.New(fmt.Sprintf(
- "Failed to parse red %d team '%s' as integer: %v", i+1, key, err))
- }
- red[i] = int32(team)
+ team := parseTeamKey(key)
+ red[i] = team
}
- var blue [3]int32
+ var blue [3]string
for i, key := range blueKeys {
- team, err := parseTeamKey(key)
- if err != nil {
- return [3]int32{}, [3]int32{}, errors.New(fmt.Sprintf(
- "Failed to parse blue %d team '%s' as integer: %v", i+1, key, err))
- }
- blue[i] = int32(team)
+ team := parseTeamKey(key)
+ blue[i] = team
}
return red, blue, nil
}
@@ -97,32 +62,32 @@
{
MatchNumber: int32(match.MatchNumber),
SetNumber: int32(match.SetNumber), CompLevel: match.CompLevel,
- Alliance: "R", AlliancePosition: 1, TeamNumber: strconv.Itoa(int(red[0])),
+ Alliance: "R", AlliancePosition: 1, TeamNumber: red[0],
},
{
MatchNumber: int32(match.MatchNumber),
SetNumber: int32(match.SetNumber), CompLevel: match.CompLevel,
- Alliance: "R", AlliancePosition: 2, TeamNumber: strconv.Itoa(int(red[1])),
+ Alliance: "R", AlliancePosition: 2, TeamNumber: red[1],
},
{
MatchNumber: int32(match.MatchNumber),
SetNumber: int32(match.SetNumber), CompLevel: match.CompLevel,
- Alliance: "R", AlliancePosition: 3, TeamNumber: strconv.Itoa(int(red[2])),
+ Alliance: "R", AlliancePosition: 3, TeamNumber: red[2],
},
{
MatchNumber: int32(match.MatchNumber),
SetNumber: int32(match.SetNumber), CompLevel: match.CompLevel,
- Alliance: "B", AlliancePosition: 1, TeamNumber: strconv.Itoa(int(blue[0])),
+ Alliance: "B", AlliancePosition: 1, TeamNumber: blue[0],
},
{
MatchNumber: int32(match.MatchNumber),
SetNumber: int32(match.SetNumber), CompLevel: match.CompLevel,
- Alliance: "B", AlliancePosition: 2, TeamNumber: strconv.Itoa(int(blue[1])),
+ Alliance: "B", AlliancePosition: 2, TeamNumber: blue[1],
},
{
MatchNumber: int32(match.MatchNumber),
SetNumber: int32(match.SetNumber), CompLevel: match.CompLevel,
- Alliance: "B", AlliancePosition: 3, TeamNumber: strconv.Itoa(int(blue[2])),
+ Alliance: "B", AlliancePosition: 3, TeamNumber: blue[2],
},
}
diff --git a/scouting/webserver/rankings/rankings.go b/scouting/webserver/rankings/rankings.go
index 0d20b54..9ffa503 100644
--- a/scouting/webserver/rankings/rankings.go
+++ b/scouting/webserver/rankings/rankings.go
@@ -4,7 +4,6 @@
"github.com/frc971/971-Robot-Code/scouting/db"
"github.com/frc971/971-Robot-Code/scouting/scraping"
"log"
- "strconv"
"strings"
)
@@ -12,10 +11,10 @@
AddOrUpdateRankings(db.Ranking) error
}
-func parseTeamKey(teamKey string) (int, error) {
+func parseTeamKey(teamKey string) string {
// TBA prefixes teams with "frc". Not sure why. Get rid of that.
teamKey = strings.TrimPrefix(teamKey, "frc")
- return strconv.Atoi(teamKey)
+ return teamKey
}
func GetRankings(database Database, year int32, eventCode string, blueAllianceConfig string) {
@@ -26,12 +25,7 @@
}
for _, rank := range rankings.Rankings {
- teamKey, err := parseTeamKey(rank.TeamKey)
-
- if err != nil {
- log.Println("Failed to parse team key: ", err)
- continue
- }
+ teamKey := parseTeamKey(rank.TeamKey)
rankingInfo := db.Ranking{
TeamNumber: teamKey,
diff --git a/scouting/webserver/rankings/rankings_test.go b/scouting/webserver/rankings/rankings_test.go
index 4ab3c34..748bcf8 100644
--- a/scouting/webserver/rankings/rankings_test.go
+++ b/scouting/webserver/rankings/rankings_test.go
@@ -58,15 +58,15 @@
}
beginningThreeExpected := []db.Ranking{
- {TeamNumber: 359, Losses: 1, Wins: 11, Ties: 0, Rank: 1, Dq: 0},
- {TeamNumber: 5254, Losses: 1, Wins: 11, Ties: 0, Rank: 2, Dq: 0},
- {TeamNumber: 3990, Losses: 1, Wins: 11, Ties: 0, Rank: 3, Dq: 0},
+ {TeamNumber: "359", Losses: 1, Wins: 11, Ties: 0, Rank: 1, Dq: 0},
+ {TeamNumber: "5254", Losses: 1, Wins: 11, Ties: 0, Rank: 2, Dq: 0},
+ {TeamNumber: "3990", Losses: 1, Wins: 11, Ties: 0, Rank: 3, Dq: 0},
}
endThreeExpected := []db.Ranking{
- {TeamNumber: 5943, Losses: 10, Wins: 2, Ties: 0, Rank: 34, Dq: 0},
- {TeamNumber: 4203, Losses: 10, Wins: 2, Ties: 0, Rank: 35, Dq: 0},
- {TeamNumber: 5149, Losses: 10, Wins: 2, Ties: 0, Rank: 36, Dq: 0},
+ {TeamNumber: "5943", Losses: 10, Wins: 2, Ties: 0, Rank: 34, Dq: 0},
+ {TeamNumber: "4203", Losses: 10, Wins: 2, Ties: 0, Rank: 35, Dq: 0},
+ {TeamNumber: "5149", Losses: 10, Wins: 2, Ties: 0, Rank: 36, Dq: 0},
}
if !reflect.DeepEqual(beginningThreeExpected, database.rankings[0:3]) {
diff --git a/scouting/webserver/requests/debug/cli/cli_test.py b/scouting/webserver/requests/debug/cli/cli_test.py
index b944564..d11b506 100644
--- a/scouting/webserver/requests/debug/cli/cli_test.py
+++ b/scouting/webserver/requests/debug/cli/cli_test.py
@@ -101,7 +101,7 @@
# First submit some data to be added to the database.
json_path = write_json_request({
- "team": 100,
+ "team": "100",
"notes": "A very inspiring and useful comment",
"good_driving": True,
"bad_driving": False,
@@ -124,7 +124,7 @@
self.assertIn(
textwrap.dedent("""\
{
- Team: (int32) 100,
+ Team: (string) (len=3) "100",
Notes: (string) (len=35) "A very inspiring and useful comment",
GoodDriving: (bool) true,
BadDriving: (bool) false,
@@ -140,10 +140,10 @@
# First submit some data to be added to the database.
json_path = write_json_request({
- "matchNumber": 100,
- "rank1": 101,
- "rank2": 202,
- "rank3": 303,
+ "match_number": 100,
+ "rank1": "101",
+ "rank2": "202",
+ "rank3": "303",
})
exit_code, _, stderr = run_debug_cli(
["-submitDriverRanking", json_path])
@@ -160,9 +160,9 @@
textwrap.dedent("""\
{
MatchNumber: (int32) 100,
- Rank1: (int32) 101,
- Rank2: (int32) 202,
- Rank3: (int32) 303
+ Rank1: (string) (len=3) "101",
+ Rank2: (string) (len=3) "202",
+ Rank3: (string) (len=3) "303"
}"""), stdout)
def test_request_all_matches(self):
diff --git a/scouting/webserver/requests/messages/request_all_driver_rankings_response.fbs b/scouting/webserver/requests/messages/request_all_driver_rankings_response.fbs
index dcc9712..8ce0ef2 100644
--- a/scouting/webserver/requests/messages/request_all_driver_rankings_response.fbs
+++ b/scouting/webserver/requests/messages/request_all_driver_rankings_response.fbs
@@ -1,10 +1,10 @@
namespace scouting.webserver.requests;
table Ranking {
- matchNumber:int (id: 0);
- rank1:int (id: 1);
- rank2:int (id: 2);
- rank3:int (id: 3);
+ match_number:int (id: 0);
+ rank1:string (id: 1);
+ rank2:string (id: 2);
+ rank3:string (id: 3);
}
table RequestAllDriverRankingsResponse {
diff --git a/scouting/webserver/requests/messages/request_all_notes_response.fbs b/scouting/webserver/requests/messages/request_all_notes_response.fbs
index 70504d3..1afdf25 100644
--- a/scouting/webserver/requests/messages/request_all_notes_response.fbs
+++ b/scouting/webserver/requests/messages/request_all_notes_response.fbs
@@ -1,7 +1,7 @@
namespace scouting.webserver.requests;
table Note {
- team:int (id: 0);
+ team:string (id: 0);
notes:string (id: 1);
good_driving:bool (id: 2);
bad_driving:bool (id: 3);
diff --git a/scouting/webserver/requests/messages/request_notes_for_team.fbs b/scouting/webserver/requests/messages/request_notes_for_team.fbs
index 9bda6d3..aa93a2b 100644
--- a/scouting/webserver/requests/messages/request_notes_for_team.fbs
+++ b/scouting/webserver/requests/messages/request_notes_for_team.fbs
@@ -1,7 +1,7 @@
namespace scouting.webserver.requests;
table RequestNotesForTeam {
- team:int (id: 0);
+ team:string (id: 0);
}
root_type RequestNotesForTeam;
diff --git a/scouting/webserver/requests/messages/submit_driver_ranking.fbs b/scouting/webserver/requests/messages/submit_driver_ranking.fbs
index ac1e218..052728c 100644
--- a/scouting/webserver/requests/messages/submit_driver_ranking.fbs
+++ b/scouting/webserver/requests/messages/submit_driver_ranking.fbs
@@ -1,10 +1,10 @@
namespace scouting.webserver.requests;
table SubmitDriverRanking {
- matchNumber:int (id: 0);
- rank1:int (id: 1);
- rank2:int (id: 2);
- rank3:int (id: 3);
+ match_number:int (id: 0);
+ rank1:string (id: 1);
+ rank2:string (id: 2);
+ rank3:string (id: 3);
}
root_type SubmitDriverRanking;
diff --git a/scouting/webserver/requests/messages/submit_notes.fbs b/scouting/webserver/requests/messages/submit_notes.fbs
index 845a601..332b612 100644
--- a/scouting/webserver/requests/messages/submit_notes.fbs
+++ b/scouting/webserver/requests/messages/submit_notes.fbs
@@ -1,7 +1,7 @@
namespace scouting.webserver.requests;
table SubmitNotes {
- team:int (id: 0);
+ team:string (id: 0);
notes:string (id: 1);
good_driving:bool (id: 2);
bad_driving:bool (id: 3);
diff --git a/scouting/webserver/requests/requests.go b/scouting/webserver/requests/requests.go
index 51612ff..af67386 100644
--- a/scouting/webserver/requests/requests.go
+++ b/scouting/webserver/requests/requests.go
@@ -84,7 +84,7 @@
ReturnStats2023() ([]db.Stats2023, error)
ReturnStats2023ForTeam(teamNumber string, matchNumber int32, setNumber int32, compLevel string, preScouting bool) ([]db.Stats2023, error)
QueryAllShifts(int) ([]db.Shift, error)
- QueryNotes(int32) ([]string, error)
+ QueryNotes(string) ([]string, error)
QueryPitImages(string) ([]db.RequestedPitImage, error)
AddNotes(db.NotesData) error
AddPitImage(db.PitImage) error
@@ -367,7 +367,7 @@
}
err = handler.db.AddNotes(db.NotesData{
- TeamNumber: request.Team(),
+ TeamNumber: string(request.Team()),
Notes: string(request.Notes()),
GoodDriving: bool(request.GoodDriving()),
BadDriving: bool(request.BadDriving()),
@@ -671,7 +671,7 @@
return
}
- notes, err := handler.db.QueryNotes(request.Team())
+ notes, err := handler.db.QueryNotes(string(request.Team()))
if err != nil {
respondWithError(w, http.StatusInternalServerError, fmt.Sprintf("Failed to query notes: %v", err))
return
@@ -790,9 +790,9 @@
err = handler.db.AddDriverRanking(db.DriverRankingData{
MatchNumber: request.MatchNumber(),
- Rank1: request.Rank1(),
- Rank2: request.Rank2(),
- Rank3: request.Rank3(),
+ Rank1: string(request.Rank1()),
+ Rank2: string(request.Rank2()),
+ Rank3: string(request.Rank3()),
})
if err != nil {
diff --git a/scouting/webserver/requests/requests_test.go b/scouting/webserver/requests/requests_test.go
index e50583b..0797bc1 100644
--- a/scouting/webserver/requests/requests_test.go
+++ b/scouting/webserver/requests/requests_test.go
@@ -449,7 +449,7 @@
builder := flatbuffers.NewBuilder(1024)
builder.Finish((&submit_notes.SubmitNotesT{
- Team: 971,
+ Team: "971",
Notes: "Notes",
GoodDriving: true,
BadDriving: false,
@@ -467,7 +467,7 @@
expected := []db.NotesData{
{
- TeamNumber: 971,
+ TeamNumber: "971",
Notes: "Notes",
GoodDriving: true,
BadDriving: false,
@@ -487,7 +487,7 @@
func TestRequestNotes(t *testing.T) {
database := MockDatabase{
notes: []db.NotesData{{
- TeamNumber: 971,
+ TeamNumber: "971A",
Notes: "Notes",
GoodDriving: true,
BadDriving: false,
@@ -505,7 +505,7 @@
builder := flatbuffers.NewBuilder(1024)
builder.Finish((&request_notes_for_team.RequestNotesForTeamT{
- Team: 971,
+ Team: "971A",
}).Pack(builder))
response, err := debug.RequestNotes("http://localhost:8080", builder.FinishedBytes())
if err != nil {
@@ -714,9 +714,9 @@
builder := flatbuffers.NewBuilder(1024)
builder.Finish((&submit_driver_ranking.SubmitDriverRankingT{
MatchNumber: 36,
- Rank1: 1234,
- Rank2: 1235,
- Rank3: 1236,
+ Rank1: "1234",
+ Rank2: "1235",
+ Rank3: "1236",
}).Pack(builder))
_, err := debug.SubmitDriverRanking("http://localhost:8080", builder.FinishedBytes())
@@ -725,7 +725,7 @@
}
expected := []db.DriverRankingData{
- {MatchNumber: 36, Rank1: 1234, Rank2: 1235, Rank3: 1236},
+ {MatchNumber: 36, Rank1: "1234", Rank2: "1235", Rank3: "1236"},
}
if !reflect.DeepEqual(database.driver_ranking, expected) {
@@ -739,15 +739,15 @@
driver_ranking: []db.DriverRankingData{
{
MatchNumber: 36,
- Rank1: 1234,
- Rank2: 1235,
- Rank3: 1236,
+ Rank1: "1234",
+ Rank2: "1235",
+ Rank3: "1236",
},
{
MatchNumber: 36,
- Rank1: 101,
- Rank2: 202,
- Rank3: 303,
+ Rank1: "101",
+ Rank2: "202",
+ Rank3: "303",
},
},
}
@@ -768,15 +768,15 @@
DriverRankingList: []*request_all_driver_rankings_response.RankingT{
{
MatchNumber: 36,
- Rank1: 1234,
- Rank2: 1235,
- Rank3: 1236,
+ Rank1: "1234",
+ Rank2: "1235",
+ Rank3: "1236",
},
{
MatchNumber: 36,
- Rank1: 101,
- Rank2: 202,
- Rank3: 303,
+ Rank1: "101",
+ Rank2: "202",
+ Rank3: "303",
},
},
}
@@ -795,7 +795,7 @@
db := MockDatabase{
notes: []db.NotesData{
{
- TeamNumber: 971,
+ TeamNumber: "971",
Notes: "Notes",
GoodDriving: true,
BadDriving: false,
@@ -806,7 +806,7 @@
EasilyDefended: false,
},
{
- TeamNumber: 972,
+ TeamNumber: "972",
Notes: "More Notes",
GoodDriving: false,
BadDriving: false,
@@ -834,7 +834,7 @@
expected := request_all_notes_response.RequestAllNotesResponseT{
NoteList: []*request_all_notes_response.NoteT{
{
- Team: 971,
+ Team: "971",
Notes: "Notes",
GoodDriving: true,
BadDriving: false,
@@ -845,7 +845,7 @@
EasilyDefended: false,
},
{
- Team: 972,
+ Team: "972",
Notes: "More Notes",
GoodDriving: false,
BadDriving: false,
@@ -1137,7 +1137,7 @@
return results, nil
}
-func (database *MockDatabase) QueryNotes(requestedTeam int32) ([]string, error) {
+func (database *MockDatabase) QueryNotes(requestedTeam string) ([]string, error) {
var results []string
for _, data := range database.notes {
if data.TeamNumber == requestedTeam {
diff --git a/scouting/www/app/app.ts b/scouting/www/app/app.ts
index 16e3197..011c94f 100644
--- a/scouting/www/app/app.ts
+++ b/scouting/www/app/app.ts
@@ -13,7 +13,7 @@
const unguardedTabs: Tab[] = ['MatchList'];
type TeamInMatch = {
- teamNumber: number;
+ teamNumber: string;
matchNumber: number;
setNumber: number;
compLevel: string;
@@ -26,7 +26,7 @@
})
export class App {
selectedTeamInMatch: TeamInMatch = {
- teamNumber: 1,
+ teamNumber: '1',
matchNumber: 1,
setNumber: 1,
compLevel: 'qm',
diff --git a/scouting/www/driver_ranking/driver_ranking.component.ts b/scouting/www/driver_ranking/driver_ranking.component.ts
index f61d901..09f62c2 100644
--- a/scouting/www/driver_ranking/driver_ranking.component.ts
+++ b/scouting/www/driver_ranking/driver_ranking.component.ts
@@ -18,7 +18,7 @@
section: Section = 'TeamSelection';
// Stores the team keys and rank (order of the array).
- team_ranking: number[] = [971, 972, 973];
+ team_ranking: string[] = ['971', '972', '973'];
match_number: number = 1;
@@ -58,13 +58,16 @@
async submitData() {
const builder = new Builder();
+ const teamRanking1 = builder.createString(this.team_ranking[0]);
+ const teamRanking2 = builder.createString(this.team_ranking[1]);
+ const teamRanking3 = builder.createString(this.team_ranking[2]);
builder.finish(
SubmitDriverRanking.createSubmitDriverRanking(
builder,
this.match_number,
- this.team_ranking[0],
- this.team_ranking[1],
- this.team_ranking[2]
+ teamRanking1,
+ teamRanking2,
+ teamRanking3
)
);
const buffer = builder.asUint8Array();
@@ -88,6 +91,6 @@
// Reset Data.
this.section = 'TeamSelection';
- this.team_ranking = [971, 972, 973];
+ this.team_ranking = ['971', '972', '973'];
}
}
diff --git a/scouting/www/driver_ranking/driver_ranking.ng.html b/scouting/www/driver_ranking/driver_ranking.ng.html
index 1fa1bc8..d361c9d 100644
--- a/scouting/www/driver_ranking/driver_ranking.ng.html
+++ b/scouting/www/driver_ranking/driver_ranking.ng.html
@@ -18,9 +18,7 @@
<input
*ngFor="let x of [1,2,3]; let i = index;"
[(ngModel)]="team_ranking[i]"
- type="number"
- min="1"
- max="9999"
+ type="text"
id="team_input_{{i}}"
/>
<button
diff --git a/scouting/www/entry/entry.component.ts b/scouting/www/entry/entry.component.ts
index 4b60ac1..5a93251 100644
--- a/scouting/www/entry/entry.component.ts
+++ b/scouting/www/entry/entry.component.ts
@@ -115,8 +115,7 @@
section: Section = 'Team Selection';
@Input() matchNumber: number = 1;
- // TODO(phil): Change the type of teamNumber to a string.
- @Input() teamNumber: number = 1;
+ @Input() teamNumber: string = '1';
@Input() setNumber: number = 1;
@Input() compLevel: CompLevel = 'qm';
@Input() skipTeamSelection = false;
@@ -173,7 +172,7 @@
if (this.teamNumber == null) {
return false;
}
- const teamNumber = this.teamNumber.toString();
+ const teamNumber = this.teamNumber;
for (const match of this.matchList) {
if (
@@ -392,7 +391,7 @@
actionOffsets.push(actionOffset);
}
}
- const teamNumberFb = builder.createString(this.teamNumber.toString());
+ const teamNumberFb = builder.createString(this.teamNumber);
const compLevelFb = builder.createString(this.compLevel);
const actionsVector = SubmitActions.createActionsListVector(
diff --git a/scouting/www/entry/entry.ng.html b/scouting/www/entry/entry.ng.html
index ada96ff..43575cd 100644
--- a/scouting/www/entry/entry.ng.html
+++ b/scouting/www/entry/entry.ng.html
@@ -26,10 +26,8 @@
<input
[(ngModel)]="teamNumber"
(ngModelChange)="updateTeamSelectionValidity()"
- type="number"
+ type="text"
id="team_number"
- min="1"
- max="9999"
/>
</div>
<div class="row">
diff --git a/scouting/www/notes/notes.component.ts b/scouting/www/notes/notes.component.ts
index 2786717..3848c22 100644
--- a/scouting/www/notes/notes.component.ts
+++ b/scouting/www/notes/notes.component.ts
@@ -48,7 +48,7 @@
}
interface Input {
- teamNumber: number;
+ teamNumber: string;
notesData: string;
keywordsData: Keywords;
}
@@ -79,7 +79,7 @@
section: Section = 'TeamSelection';
errorMessage = '';
- teamNumberSelection: number = 971;
+ teamNumberSelection: string = '971';
// Data inputted by user is stored in this array.
// Includes the team number, notes, and keyword selection.
@@ -145,10 +145,12 @@
const builder = new Builder();
const dataFb = builder.createString(this.newData[i].notesData);
+ const teamNumber = builder.createString(this.newData[i].teamNumber);
+
builder.finish(
SubmitNotes.createSubmitNotes(
builder,
- this.newData[i].teamNumber,
+ teamNumber,
dataFb,
this.newData[i].keywordsData.goodDriving,
this.newData[i].keywordsData.badDriving,
diff --git a/scouting/www/notes/notes.ng.html b/scouting/www/notes/notes.ng.html
index cb5e8ef..d7262b3 100644
--- a/scouting/www/notes/notes.ng.html
+++ b/scouting/www/notes/notes.ng.html
@@ -9,10 +9,8 @@
</label>
<input
[(ngModel)]="teamNumberSelection"
- type="number"
+ type="text"
id="team_number_notes"
- min="1"
- max="9999"
/>
<button class="btn btn-primary" (click)="setTeamNumber()">Select</button>
</div>
diff --git a/scouting/www/pit_scouting/pit_scouting.component.ts b/scouting/www/pit_scouting/pit_scouting.component.ts
index b74c119..fe14090 100644
--- a/scouting/www/pit_scouting/pit_scouting.component.ts
+++ b/scouting/www/pit_scouting/pit_scouting.component.ts
@@ -6,7 +6,7 @@
type Section = 'TeamSelection' | 'Data';
interface Input {
- teamNumber: number;
+ teamNumber: string;
pitImage: HTMLImageElement;
}
@@ -19,7 +19,7 @@
section: Section = 'Data';
errorMessage = '';
- teamNumber: number = 971;
+ teamNumber: string = '971';
pitImage: string = '';
async readFile(file): Promise<ArrayBuffer> {
@@ -41,7 +41,7 @@
async submitData() {
const builder = new Builder();
- const teamNumber = builder.createString(this.teamNumber.toString());
+ const teamNumber = builder.createString(this.teamNumber);
const pitImage = builder.createString(this.pitImage.toString());
const imageData = SubmitPitImage.createImageDataVector(
builder,
diff --git a/scouting/www/pit_scouting/pit_scouting.ng.html b/scouting/www/pit_scouting/pit_scouting.ng.html
index 98aa313..9e90d2d 100644
--- a/scouting/www/pit_scouting/pit_scouting.ng.html
+++ b/scouting/www/pit_scouting/pit_scouting.ng.html
@@ -4,13 +4,7 @@
<ng-container [ngSwitch]="section">
<div *ngSwitchCase="'Data'" id="pitImageSelection" class="container-fluid">
<label for="teamNumber">Team Number</label>
- <input
- [(ngModel)]="teamNumber"
- type="string"
- id="teamNumber"
- min="1"
- max="9999"
- />
+ <input [(ngModel)]="teamNumber" type="text" id="teamNumber" />
<form action="setPitImage()">
<label for="pitImage">Select pit image:</label>
<br />
diff --git a/scouting/www/view/view.component.ts b/scouting/www/view/view.component.ts
index c75f83b..26e816b 100644
--- a/scouting/www/view/view.component.ts
+++ b/scouting/www/view/view.component.ts
@@ -69,11 +69,19 @@
this.ascendingSort = !this.ascendingSort;
if (!this.ascendingSort) {
this.driverRankingList.sort((a, b) => b.matchNumber() - a.matchNumber());
- this.noteList.sort((a, b) => b.team() - a.team());
+ this.noteList.sort(function (a, b) {
+ return b[0]
+ .team()
+ .localeCompare(a[0].team(), undefined, {numeric: true});
+ });
this.statList.sort((a, b) => b.matchNumber() - a.matchNumber());
} else {
this.driverRankingList.sort((a, b) => a.matchNumber() - b.matchNumber());
- this.noteList.sort((a, b) => a.team() - b.team());
+ this.noteList.sort(function (a, b) {
+ return a[0]
+ .team()
+ .localeCompare(b[0].team(), undefined, {numeric: true});
+ });
this.statList.sort((a, b) => a.matchNumber() - b.matchNumber());
}
}