Delete Stats object and replace with Stats2023
Deleting the stats object in the database and any functions/files that are using it and replacing it with Stats2023 in the view tab.
Signed-off-by: Emily Markova <emily.markova@gmail.com>
Change-Id: I76f5ad9e3f5d4a6ede60266fdc179e21013d6093
diff --git a/scouting/db/db.go b/scouting/db/db.go
index 3791596..98d8d71 100644
--- a/scouting/db/db.go
+++ b/scouting/db/db.go
@@ -7,7 +7,6 @@
"gorm.io/gorm"
"gorm.io/gorm/clause"
"gorm.io/gorm/logger"
- "strconv"
)
type Database struct {
@@ -28,44 +27,6 @@
R1scouter, R2scouter, R3scouter, B1scouter, B2scouter, B3scouter string
}
-type Stats struct {
- TeamNumber int32 `gorm:"primaryKey"`
- MatchNumber int32 `gorm:"primaryKey"`
- SetNumber int32 `gorm:"primaryKey"`
- CompLevel string `gorm:"primaryKey"`
- StartingQuadrant int32
- // This field is for the balls picked up during auto. Use this field
- // when using this library. Ignore the AutoBallPickedUpX fields below.
- AutoBallPickedUp [5]bool `gorm:"-:all"`
- // These fields are internal implementation details. Do not use these.
- // TODO(phil): Figure out how to use the JSON gorm serializer instead
- // of manually serializing/deserializing these.
- AutoBallPickedUp1 bool
- AutoBallPickedUp2 bool
- AutoBallPickedUp3 bool
- AutoBallPickedUp4 bool
- AutoBallPickedUp5 bool
- // TODO(phil): Re-order auto and teleop fields so auto comes first.
- ShotsMissed, UpperGoalShots, LowerGoalShots int32
- ShotsMissedAuto, UpperGoalAuto, LowerGoalAuto int32
- PlayedDefense, DefenseReceivedScore int32
- // Climbing level:
- // 0 -> "NoAttempt"
- // 1 -> "Failed"
- // 2 -> "FailedWithPlentyOfTime"
- // 3 -> "Low"
- // 4 -> "Medium"
- // 5 -> "High"
- // 6 -> "Traversal"
- Climbing int32
- // Some non-numerical data that the scout felt worth noting.
- Comment string
- // The username of the person who collected these statistics.
- // "unknown" if submitted without logging in.
- // Empty if the stats have not yet been collected.
- CollectedBy string
-}
-
type Stats2023 struct {
TeamNumber string `gorm:"primaryKey"`
MatchNumber int32 `gorm:"primaryKey"`
@@ -155,7 +116,7 @@
return nil, errors.New(fmt.Sprint("Failed to connect to postgres: ", err))
}
- err = database.AutoMigrate(&TeamMatch{}, &Shift{}, &Stats{}, &Stats2023{}, &Action{}, &NotesData{}, &Ranking{}, &DriverRankingData{}, &ParsedDriverRankingData{})
+ err = database.AutoMigrate(&TeamMatch{}, &Shift{}, &Stats2023{}, &Action{}, &NotesData{}, &Ranking{}, &DriverRankingData{}, &ParsedDriverRankingData{})
if err != nil {
database.Delete()
return nil, errors.New(fmt.Sprint("Failed to create/migrate tables: ", err))
@@ -197,34 +158,6 @@
return result.Error
}
-func (database *Database) AddToStats(s Stats) error {
- matches, err := database.queryMatches(strconv.Itoa(int(s.TeamNumber)))
- if err != nil {
- return err
- }
- foundMatch := false
- for _, match := range matches {
- if match.MatchNumber == s.MatchNumber {
- foundMatch = true
- break
- }
- }
- if !foundMatch {
- return errors.New(fmt.Sprint(
- "Failed to find team ", s.TeamNumber,
- " in match ", s.MatchNumber, " in the schedule."))
- }
-
- // Unpack the auto balls array.
- s.AutoBallPickedUp1 = s.AutoBallPickedUp[0]
- s.AutoBallPickedUp2 = s.AutoBallPickedUp[1]
- s.AutoBallPickedUp3 = s.AutoBallPickedUp[2]
- s.AutoBallPickedUp4 = s.AutoBallPickedUp[3]
- s.AutoBallPickedUp5 = s.AutoBallPickedUp[4]
- result := database.Create(&s)
- return result.Error
-}
-
func (database *Database) AddToStats2023(s Stats2023) error {
matches, err := database.QueryMatchesString(s.TeamNumber)
if err != nil {
@@ -298,34 +231,6 @@
return actions, result.Error
}
-// Packs the stats. This really just consists of taking the individual auto
-// ball booleans and turning them into an array. The individual booleans are
-// cleared so that they don't affect struct comparisons.
-func packStats(stats *Stats) {
- stats.AutoBallPickedUp = [5]bool{
- stats.AutoBallPickedUp1,
- stats.AutoBallPickedUp2,
- stats.AutoBallPickedUp3,
- stats.AutoBallPickedUp4,
- stats.AutoBallPickedUp5,
- }
- stats.AutoBallPickedUp1 = false
- stats.AutoBallPickedUp2 = false
- stats.AutoBallPickedUp3 = false
- stats.AutoBallPickedUp4 = false
- stats.AutoBallPickedUp5 = false
-}
-
-func (database *Database) ReturnStats() ([]Stats, error) {
- var stats []Stats
- result := database.Find(&stats)
- // Pack the auto balls array.
- for i := range stats {
- packStats(&stats[i])
- }
- return stats, result.Error
-}
-
func (database *Database) ReturnStats2023() ([]Stats2023, error) {
var stats2023 []Stats2023
result := database.Find(&stats2023)
@@ -369,16 +274,6 @@
return shifts, result.Error
}
-func (database *Database) QueryStats(teamNumber_ int) ([]Stats, error) {
- var stats []Stats
- result := database.Where("team_number = ?", teamNumber_).Find(&stats)
- // Pack the auto balls array.
- for i := range stats {
- packStats(&stats[i])
- }
- return stats, result.Error
-}
-
func (database *Database) QueryActions(teamNumber_ int) ([]Action, error) {
var actions []Action
result := database.
diff --git a/scouting/db/db_test.go b/scouting/db/db_test.go
index 72c5f86..bd2bb68 100644
--- a/scouting/db/db_test.go
+++ b/scouting/db/db_test.go
@@ -6,7 +6,6 @@
"os"
"os/exec"
"reflect"
- "strings"
"testing"
"time"
@@ -139,99 +138,6 @@
}
}
-func TestAddToStatsDB(t *testing.T) {
- fixture := createDatabase(t)
- defer fixture.TearDown()
-
- correct := []Stats{
- Stats{
- TeamNumber: 1236, MatchNumber: 7,
- StartingQuadrant: 2,
- AutoBallPickedUp: [5]bool{false, false, false, true, false},
- ShotsMissed: 9, UpperGoalShots: 5, LowerGoalShots: 4,
- ShotsMissedAuto: 3, UpperGoalAuto: 2, LowerGoalAuto: 1,
- PlayedDefense: 2, DefenseReceivedScore: 0, Climbing: 3,
- Comment: "this is a comment", CollectedBy: "josh",
- },
- Stats{
- TeamNumber: 1001, MatchNumber: 7,
- StartingQuadrant: 3,
- AutoBallPickedUp: [5]bool{true, false, true, true, false},
- ShotsMissed: 6, UpperGoalShots: 9, LowerGoalShots: 9,
- ShotsMissedAuto: 0, UpperGoalAuto: 0, LowerGoalAuto: 0,
- PlayedDefense: 0, DefenseReceivedScore: 1, Climbing: 0,
- Comment: "another comment", CollectedBy: "rupert",
- },
- Stats{
- TeamNumber: 777, MatchNumber: 7,
- StartingQuadrant: 4,
- AutoBallPickedUp: [5]bool{false, true, true, true, false},
- ShotsMissed: 5, UpperGoalShots: 7, LowerGoalShots: 12,
- ShotsMissedAuto: 0, UpperGoalAuto: 4, LowerGoalAuto: 0,
- PlayedDefense: 0, DefenseReceivedScore: 3, Climbing: 0,
- Comment: "and another", CollectedBy: "felix",
- },
- Stats{
- TeamNumber: 1000, MatchNumber: 7,
- StartingQuadrant: 1,
- AutoBallPickedUp: [5]bool{false, false, false, false, false},
- ShotsMissed: 12, UpperGoalShots: 6, LowerGoalShots: 10,
- ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0,
- PlayedDefense: 0, DefenseReceivedScore: 1, Climbing: 0,
- Comment: "and another one", CollectedBy: "thea",
- },
- Stats{
- TeamNumber: 4321, MatchNumber: 7,
- StartingQuadrant: 2,
- AutoBallPickedUp: [5]bool{true, false, false, false, false},
- ShotsMissed: 14, UpperGoalShots: 12, LowerGoalShots: 3,
- ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0,
- PlayedDefense: 0, DefenseReceivedScore: 0, Climbing: 0,
- Comment: "more comment", CollectedBy: "amy",
- },
- Stats{
- TeamNumber: 1234, MatchNumber: 7,
- StartingQuadrant: 3,
- AutoBallPickedUp: [5]bool{false, false, false, false, true},
- ShotsMissed: 3, UpperGoalShots: 4, LowerGoalShots: 0,
- ShotsMissedAuto: 0, UpperGoalAuto: 9, LowerGoalAuto: 0,
- PlayedDefense: 0, DefenseReceivedScore: 5, Climbing: 0,
- Comment: "final comment", CollectedBy: "beth",
- },
- }
- matches := []TeamMatch{
- TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
- Alliance: "R", AlliancePosition: 1, TeamNumber: "1236"},
- TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
- Alliance: "R", AlliancePosition: 2, TeamNumber: "1001"},
- TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
- Alliance: "R", AlliancePosition: 3, TeamNumber: "777"},
- TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
- Alliance: "B", AlliancePosition: 1, TeamNumber: "1000"},
- TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
- Alliance: "B", AlliancePosition: 2, TeamNumber: "4321"},
- TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
- Alliance: "B", AlliancePosition: 3, TeamNumber: "1234"},
- }
-
- for _, match := range matches {
- err := fixture.db.AddToMatch(match)
- check(t, err, "Failed to add match")
- }
-
- for i := 0; i < len(correct); i++ {
- err := fixture.db.AddToStats(correct[i])
- check(t, err, "Failed to add stats to DB")
- }
-
- got, err := fixture.db.ReturnStats()
- check(t, err, "Failed ReturnStats()")
-
- if !reflect.DeepEqual(correct, got) {
- t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
- }
-}
-
func TestAddToStats2023DB(t *testing.T) {
fixture := createDatabase(t)
defer fixture.TearDown()
@@ -403,55 +309,6 @@
}
}
-func TestAddDuplicateStats(t *testing.T) {
- fixture := createDatabase(t)
- defer fixture.TearDown()
-
- stats := Stats{
- TeamNumber: 1236, MatchNumber: 7,
- SetNumber: 1, CompLevel: "qual",
- StartingQuadrant: 2,
- AutoBallPickedUp: [5]bool{false, false, false, true, false},
- ShotsMissed: 9, UpperGoalShots: 5, LowerGoalShots: 4,
- ShotsMissedAuto: 3, UpperGoalAuto: 2, LowerGoalAuto: 1,
- PlayedDefense: 2, DefenseReceivedScore: 0, Climbing: 3,
- Comment: "this is a comment", CollectedBy: "josh",
- }
-
- matches := []TeamMatch{
- TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
- Alliance: "R", AlliancePosition: 1, TeamNumber: "1236"},
- TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
- Alliance: "R", AlliancePosition: 2, TeamNumber: "1001"},
- TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
- Alliance: "R", AlliancePosition: 3, TeamNumber: "777"},
- TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
- Alliance: "B", AlliancePosition: 1, TeamNumber: "1000"},
- TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
- Alliance: "B", AlliancePosition: 2, TeamNumber: "4321"},
- TeamMatch{MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
- Alliance: "B", AlliancePosition: 3, TeamNumber: "1234"},
- }
-
- for _, match := range matches {
- err := fixture.db.AddToMatch(match)
- check(t, err, "Failed to add match")
- }
-
- // Add stats. This should succeed.
- err := fixture.db.AddToStats(stats)
- check(t, err, "Failed to add stats to DB")
-
- // Try again. It should fail this time.
- err = fixture.db.AddToStats(stats)
- if err == nil {
- t.Fatal("Failed to get error when adding duplicate stats.")
- }
- if !strings.Contains(err.Error(), "ERROR: duplicate key value violates unique constraint") {
- t.Fatal("Expected error message to be complain about duplicate key value, but got ", err)
- }
-}
-
func TestDeleteFromStats(t *testing.T) {
fixture := createDatabase(t)
defer fixture.TearDown()
@@ -621,104 +478,6 @@
}
}
-func TestQueryStatsDB(t *testing.T) {
- fixture := createDatabase(t)
- defer fixture.TearDown()
-
- testDatabase := []Stats{
- Stats{
- TeamNumber: 1235, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
- StartingQuadrant: 1,
- AutoBallPickedUp: [5]bool{false, false, false, false, false},
- ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
- ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
- PlayedDefense: 2, DefenseReceivedScore: 1, Climbing: 2},
- Stats{
- TeamNumber: 1234, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
- StartingQuadrant: 2,
- AutoBallPickedUp: [5]bool{false, false, false, false, true},
- ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4,
- ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4,
- PlayedDefense: 7, DefenseReceivedScore: 1, Climbing: 2,
- },
- Stats{
- TeamNumber: 1233, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
- StartingQuadrant: 3,
- AutoBallPickedUp: [5]bool{false, false, false, false, false},
- ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3,
- ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3,
- PlayedDefense: 3, DefenseReceivedScore: 0, Climbing: 3,
- },
- Stats{
- TeamNumber: 1232, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
- StartingQuadrant: 2,
- AutoBallPickedUp: [5]bool{true, false, false, false, true},
- ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5,
- ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5,
- PlayedDefense: 7, DefenseReceivedScore: 2, Climbing: 1,
- },
- Stats{
- TeamNumber: 1231, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
- StartingQuadrant: 3,
- AutoBallPickedUp: [5]bool{false, false, true, false, false},
- ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6,
- ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6,
- PlayedDefense: 7, DefenseReceivedScore: 3, Climbing: 1,
- },
- Stats{
- TeamNumber: 1239, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
- StartingQuadrant: 4,
- AutoBallPickedUp: [5]bool{false, true, true, false, false},
- ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7,
- ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3,
- PlayedDefense: 7, DefenseReceivedScore: 5, Climbing: 1,
- },
- }
-
- matches := []TeamMatch{
- TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
- Alliance: "R", AlliancePosition: 1, TeamNumber: "1235"},
- TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
- Alliance: "R", AlliancePosition: 2, TeamNumber: "1234"},
- TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
- Alliance: "R", AlliancePosition: 3, TeamNumber: "1233"},
- TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
- Alliance: "B", AlliancePosition: 1, TeamNumber: "1232"},
- TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
- Alliance: "B", AlliancePosition: 2, TeamNumber: "1231"},
- TeamMatch{MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
- Alliance: "B", AlliancePosition: 3, TeamNumber: "1239"},
- }
-
- for _, match := range matches {
- err := fixture.db.AddToMatch(match)
- check(t, err, "Failed to add match")
- }
-
- for i := 0; i < len(testDatabase); i++ {
- err := fixture.db.AddToStats(testDatabase[i])
- check(t, err, fmt.Sprint("Failed to add stats ", i))
- }
-
- correct := []Stats{
- Stats{
- TeamNumber: 1235, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
- StartingQuadrant: 1,
- AutoBallPickedUp: [5]bool{false, false, false, false, false},
- ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
- ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
- PlayedDefense: 2, DefenseReceivedScore: 1, Climbing: 2,
- },
- }
-
- got, err := fixture.db.QueryStats(1235)
- check(t, err, "Failed QueryStats()")
-
- if !reflect.DeepEqual(correct, got) {
- t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
- }
-}
-
func TestQueryRankingsDB(t *testing.T) {
fixture := createDatabase(t)
defer fixture.TearDown()
@@ -898,93 +657,6 @@
}
}
-func TestReturnStatsDB(t *testing.T) {
- fixture := createDatabase(t)
- defer fixture.TearDown()
-
- correct := []Stats{
- Stats{
- TeamNumber: 1235, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
- StartingQuadrant: 1,
- AutoBallPickedUp: [5]bool{false, false, false, false, false},
- ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
- ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
- PlayedDefense: 2, DefenseReceivedScore: 3, Climbing: 2},
- Stats{
- TeamNumber: 1236, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
- StartingQuadrant: 2,
- AutoBallPickedUp: [5]bool{false, false, false, false, true},
- ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4,
- ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4,
- PlayedDefense: 7, DefenseReceivedScore: 1, Climbing: 2,
- },
- Stats{
- TeamNumber: 1237, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
- StartingQuadrant: 3,
- AutoBallPickedUp: [5]bool{false, false, false, false, false},
- ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3,
- ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3,
- PlayedDefense: 3, DefenseReceivedScore: 0, Climbing: 3,
- },
- Stats{
- TeamNumber: 1238, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
- StartingQuadrant: 2,
- AutoBallPickedUp: [5]bool{true, false, false, false, true},
- ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5,
- ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5,
- PlayedDefense: 7, DefenseReceivedScore: 4, Climbing: 1,
- },
- Stats{
- TeamNumber: 1239, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
- StartingQuadrant: 3,
- AutoBallPickedUp: [5]bool{false, false, true, false, false},
- ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6,
- ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6,
- PlayedDefense: 7, DefenseReceivedScore: 4, Climbing: 1,
- },
- Stats{
- TeamNumber: 1233, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
- StartingQuadrant: 4,
- AutoBallPickedUp: [5]bool{false, true, true, false, false},
- ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7,
- ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3,
- PlayedDefense: 7, DefenseReceivedScore: 1, Climbing: 1,
- },
- }
-
- matches := []TeamMatch{
- TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
- Alliance: "R", AlliancePosition: 1, TeamNumber: "1235"},
- TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
- Alliance: "R", AlliancePosition: 2, TeamNumber: "1236"},
- TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
- Alliance: "R", AlliancePosition: 3, TeamNumber: "1237"},
- TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
- Alliance: "B", AlliancePosition: 1, TeamNumber: "1238"},
- TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
- Alliance: "B", AlliancePosition: 2, TeamNumber: "1239"},
- TeamMatch{MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
- Alliance: "B", AlliancePosition: 3, TeamNumber: "1233"},
- }
-
- for _, match := range matches {
- err := fixture.db.AddToMatch(match)
- check(t, err, "Failed to add match")
- }
-
- for i := 0; i < len(correct); i++ {
- err := fixture.db.AddToStats(correct[i])
- check(t, err, fmt.Sprint("Failed to add stats ", i))
- }
-
- got, err := fixture.db.ReturnStats()
- check(t, err, "Failed ReturnStats()")
-
- if !reflect.DeepEqual(correct, got) {
- t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
- }
-}
-
func TestReturnStats2023DB(t *testing.T) {
fixture := createDatabase(t)
defer fixture.TearDown()
diff --git a/scouting/webserver/requests/BUILD b/scouting/webserver/requests/BUILD
index 935d721..2ff8b85 100644
--- a/scouting/webserver/requests/BUILD
+++ b/scouting/webserver/requests/BUILD
@@ -17,16 +17,12 @@
"//scouting/webserver/requests/messages:request_all_matches_response_go_fbs",
"//scouting/webserver/requests/messages:request_all_notes_go_fbs",
"//scouting/webserver/requests/messages:request_all_notes_response_go_fbs",
- "//scouting/webserver/requests/messages:request_data_scouting_go_fbs",
- "//scouting/webserver/requests/messages:request_data_scouting_response_go_fbs",
"//scouting/webserver/requests/messages:request_notes_for_team_go_fbs",
"//scouting/webserver/requests/messages:request_notes_for_team_response_go_fbs",
"//scouting/webserver/requests/messages:request_shift_schedule_go_fbs",
"//scouting/webserver/requests/messages:request_shift_schedule_response_go_fbs",
"//scouting/webserver/requests/messages:submit_actions_go_fbs",
"//scouting/webserver/requests/messages:submit_actions_response_go_fbs",
- "//scouting/webserver/requests/messages:submit_data_scouting_go_fbs",
- "//scouting/webserver/requests/messages:submit_data_scouting_response_go_fbs",
"//scouting/webserver/requests/messages:submit_driver_ranking_go_fbs",
"//scouting/webserver/requests/messages:submit_driver_ranking_response_go_fbs",
"//scouting/webserver/requests/messages:submit_notes_go_fbs",
@@ -46,7 +42,6 @@
deps = [
"//scouting/db",
"//scouting/webserver/requests/debug",
- "//scouting/webserver/requests/messages:error_response_go_fbs",
"//scouting/webserver/requests/messages:request_2023_data_scouting_go_fbs",
"//scouting/webserver/requests/messages:request_2023_data_scouting_response_go_fbs",
"//scouting/webserver/requests/messages:request_all_driver_rankings_go_fbs",
@@ -55,14 +50,10 @@
"//scouting/webserver/requests/messages:request_all_matches_response_go_fbs",
"//scouting/webserver/requests/messages:request_all_notes_go_fbs",
"//scouting/webserver/requests/messages:request_all_notes_response_go_fbs",
- "//scouting/webserver/requests/messages:request_data_scouting_go_fbs",
- "//scouting/webserver/requests/messages:request_data_scouting_response_go_fbs",
"//scouting/webserver/requests/messages:request_notes_for_team_go_fbs",
"//scouting/webserver/requests/messages:request_shift_schedule_go_fbs",
"//scouting/webserver/requests/messages:request_shift_schedule_response_go_fbs",
"//scouting/webserver/requests/messages:submit_actions_go_fbs",
- "//scouting/webserver/requests/messages:submit_data_scouting_go_fbs",
- "//scouting/webserver/requests/messages:submit_data_scouting_response_go_fbs",
"//scouting/webserver/requests/messages:submit_driver_ranking_go_fbs",
"//scouting/webserver/requests/messages:submit_notes_go_fbs",
"//scouting/webserver/requests/messages:submit_shift_schedule_go_fbs",
diff --git a/scouting/webserver/requests/debug/BUILD b/scouting/webserver/requests/debug/BUILD
index 355fff0..f3f4a72 100644
--- a/scouting/webserver/requests/debug/BUILD
+++ b/scouting/webserver/requests/debug/BUILD
@@ -12,10 +12,8 @@
"//scouting/webserver/requests/messages:request_all_driver_rankings_response_go_fbs",
"//scouting/webserver/requests/messages:request_all_matches_response_go_fbs",
"//scouting/webserver/requests/messages:request_all_notes_response_go_fbs",
- "//scouting/webserver/requests/messages:request_data_scouting_response_go_fbs",
"//scouting/webserver/requests/messages:request_notes_for_team_response_go_fbs",
"//scouting/webserver/requests/messages:request_shift_schedule_response_go_fbs",
- "//scouting/webserver/requests/messages:submit_data_scouting_response_go_fbs",
"//scouting/webserver/requests/messages:submit_driver_ranking_response_go_fbs",
"//scouting/webserver/requests/messages:submit_notes_response_go_fbs",
"//scouting/webserver/requests/messages:submit_shift_schedule_response_go_fbs",
diff --git a/scouting/webserver/requests/debug/cli/cli_test.py b/scouting/webserver/requests/debug/cli/cli_test.py
index 4763058..51308d7 100644
--- a/scouting/webserver/requests/debug/cli/cli_test.py
+++ b/scouting/webserver/requests/debug/cli/cli_test.py
@@ -96,89 +96,6 @@
time.sleep(0.25)
- def test_submit_and_request_data_scouting(self):
- self.start_servers(year=2020, event_code="fake")
-
- # First submit some data to be added to the database.
- json_path = write_json_request({
- "team":
- 100,
- "match":
- 1,
- "set_number":
- 2,
- "comp_level":
- "quals",
- "starting_quadrant":
- 3,
- "auto_ball_1":
- True,
- "auto_ball_2":
- False,
- "auto_ball_3":
- False,
- "auto_ball_4":
- False,
- "auto_ball_5":
- True,
- "missed_shots_auto":
- 10,
- "upper_goal_auto":
- 11,
- "lower_goal_auto":
- 12,
- "missed_shots_tele":
- 13,
- "upper_goal_tele":
- 14,
- "lower_goal_tele":
- 15,
- "defense_rating":
- 3,
- "defense_received_rating":
- 4,
- "climb_level":
- "Medium",
- "comment":
- "A very inspiring and useful comment",
- })
- exit_code, _, stderr = run_debug_cli(
- ["-submitDataScouting", json_path])
- self.assertEqual(exit_code, 0, stderr)
-
- # Now request the data back with zero indentation. That let's us
- # validate the data easily.
- json_path = write_json_request({})
- exit_code, stdout, stderr = run_debug_cli(
- ["-requestDataScouting", json_path, "-indent="])
-
- self.assertEqual(exit_code, 0, stderr)
- self.assertIn(
- textwrap.dedent("""\
- {
- Team: (int32) 100,
- Match: (int32) 1,
- MissedShotsAuto: (int32) 10,
- UpperGoalAuto: (int32) 11,
- LowerGoalAuto: (int32) 12,
- MissedShotsTele: (int32) 13,
- UpperGoalTele: (int32) 14,
- LowerGoalTele: (int32) 15,
- DefenseRating: (int32) 3,
- CollectedBy: (string) (len=9) "debug_cli",
- AutoBall1: (bool) true,
- AutoBall2: (bool) false,
- AutoBall3: (bool) false,
- AutoBall4: (bool) false,
- AutoBall5: (bool) true,
- StartingQuadrant: (int32) 3,
- ClimbLevel: (request_data_scouting_response.ClimbLevel) Medium,
- DefenseReceivedRating: (int32) 4,
- Comment: (string) (len=35) "A very inspiring and useful comment",
- SetNumber: (int32) 2,
- CompLevel: (string) (len=5) "quals"
- }"""), stdout)
-
def test_submit_and_request_notes(self):
self.start_servers(year=2020, event_code="fake")
diff --git a/scouting/webserver/requests/debug/cli/main.go b/scouting/webserver/requests/debug/cli/main.go
index 58e24a2..a4346e5 100644
--- a/scouting/webserver/requests/debug/cli/main.go
+++ b/scouting/webserver/requests/debug/cli/main.go
@@ -83,16 +83,12 @@
"The indentation to use for the result dumping. Default is a space.")
addressPtr := flag.String("address", "http://localhost:8080",
"The end point where the server is listening.")
- submitDataScoutingPtr := flag.String("submitDataScouting", "",
- "If specified, parse the file as a SubmitDataScouting JSON request.")
submitDriverRankingPtr := flag.String("submitDriverRanking", "",
"If specified, parse the file as a submitDriverRanking JSON request.")
submitNotesPtr := flag.String("submitNotes", "",
"If specified, parse the file as a submitNotes JSON request.")
requestAllMatchesPtr := flag.String("requestAllMatches", "",
"If specified, parse the file as a RequestAllMatches JSON request.")
- requestDataScoutingPtr := flag.String("requestDataScouting", "",
- "If specified, parse the file as a RequestDataScouting JSON request.")
request2023DataScoutingPtr := flag.String("request2023DataScouting", "",
"If specified, parse the file as a Request2023DataScouting JSON request.")
requestAllDriverRankingsPtr := flag.String("requestAllDriverRankings", "",
@@ -108,13 +104,6 @@
// Handle the actual arguments.
maybePerformRequest(
- "SubmitDataScouting",
- "scouting/webserver/requests/messages/submit_data_scouting.fbs",
- *submitDataScoutingPtr,
- *addressPtr,
- debug.SubmitDataScouting)
-
- maybePerformRequest(
"submitNotes",
"scouting/webserver/requests/messages/submit_notes.fbs",
*submitNotesPtr,
@@ -136,13 +125,6 @@
debug.RequestAllMatches)
maybePerformRequest(
- "RequestDataScouting",
- "scouting/webserver/requests/messages/request_data_scouting.fbs",
- *requestDataScoutingPtr,
- *addressPtr,
- debug.RequestDataScouting)
-
- maybePerformRequest(
"Request2023DataScouting",
"scouting/webserver/requests/messages/request_2023_data_scouting.fbs",
*request2023DataScoutingPtr,
diff --git a/scouting/webserver/requests/debug/debug.go b/scouting/webserver/requests/debug/debug.go
index 60d14be..eb3a1ca 100644
--- a/scouting/webserver/requests/debug/debug.go
+++ b/scouting/webserver/requests/debug/debug.go
@@ -14,10 +14,8 @@
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_all_driver_rankings_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_all_matches_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_all_notes_response"
- "github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_data_scouting_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_notes_for_team_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_shift_schedule_response"
- "github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_data_scouting_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_driver_ranking_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_notes_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_shift_schedule_response"
@@ -106,12 +104,6 @@
return response.UnPack(), nil
}
-func SubmitDataScouting(server string, requestBytes []byte) (*submit_data_scouting_response.SubmitDataScoutingResponseT, error) {
- return sendMessage[submit_data_scouting_response.SubmitDataScoutingResponseT](
- server+"/requests/submit/data_scouting", requestBytes,
- submit_data_scouting_response.GetRootAsSubmitDataScoutingResponse)
-}
-
func RequestAllMatches(server string, requestBytes []byte) (*request_all_matches_response.RequestAllMatchesResponseT, error) {
return sendMessage[request_all_matches_response.RequestAllMatchesResponseT](
server+"/requests/request/all_matches", requestBytes,
@@ -124,12 +116,6 @@
request_all_driver_rankings_response.GetRootAsRequestAllDriverRankingsResponse)
}
-func RequestDataScouting(server string, requestBytes []byte) (*request_data_scouting_response.RequestDataScoutingResponseT, error) {
- return sendMessage[request_data_scouting_response.RequestDataScoutingResponseT](
- server+"/requests/request/data_scouting", requestBytes,
- request_data_scouting_response.GetRootAsRequestDataScoutingResponse)
-}
-
func Request2023DataScouting(server string, requestBytes []byte) (*request_2023_data_scouting_response.Request2023DataScoutingResponseT, error) {
return sendMessage[request_2023_data_scouting_response.Request2023DataScoutingResponseT](
server+"/requests/request/2023_data_scouting", requestBytes,
diff --git a/scouting/webserver/requests/messages/BUILD b/scouting/webserver/requests/messages/BUILD
index a04f39f..c1cd999 100644
--- a/scouting/webserver/requests/messages/BUILD
+++ b/scouting/webserver/requests/messages/BUILD
@@ -3,16 +3,12 @@
FILE_NAMES = (
"error_response",
- "submit_data_scouting",
- "submit_data_scouting_response",
"request_all_driver_rankings",
"request_all_driver_rankings_response",
"request_all_matches",
"request_all_matches_response",
"request_all_notes",
"request_all_notes_response",
- "request_data_scouting",
- "request_data_scouting_response",
"request_2023_data_scouting",
"request_2023_data_scouting_response",
"submit_notes",
diff --git a/scouting/webserver/requests/messages/request_data_scouting.fbs b/scouting/webserver/requests/messages/request_data_scouting.fbs
deleted file mode 100644
index 884c1a6..0000000
--- a/scouting/webserver/requests/messages/request_data_scouting.fbs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace scouting.webserver.requests;
-
-table RequestDataScouting {
- // TODO: Implement this.
-}
-
-root_type RequestDataScouting;
diff --git a/scouting/webserver/requests/messages/request_data_scouting_response.fbs b/scouting/webserver/requests/messages/request_data_scouting_response.fbs
deleted file mode 100644
index 6048210..0000000
--- a/scouting/webserver/requests/messages/request_data_scouting_response.fbs
+++ /dev/null
@@ -1,52 +0,0 @@
-namespace scouting.webserver.requests;
-
-// TODO(phil): Deduplicate with submit_data_scouting.
-// At the moment, our Go setup doesn't handle includes.
-enum ClimbLevel : byte {
- NoAttempt = 0,
- Failed,
- // Tried for more than 10 seconds and failed.
- FailedWithPlentyOfTime,
- Low,
- Medium,
- High,
- Traversal,
-}
-
-table Stats {
- team:int (id: 0);
- match:int (id: 1);
- set_number:int (id: 20);
- comp_level:string (id: 21);
-
- missed_shots_auto:int (id: 2);
- upper_goal_auto:int (id:3);
- lower_goal_auto:int (id:4);
- missed_shots_tele:int (id: 5);
- upper_goal_tele:int (id:6);
- lower_goal_tele:int (id:7);
- defense_rating:int (id:8);
- defense_received_rating:int (id:18);
-
- climbing:int (id:9, deprecated);
- climb_level:ClimbLevel (id:17);
-
- collected_by:string (id:10);
-
- auto_ball_1:bool (id:11);
- auto_ball_2:bool (id:12);
- auto_ball_3:bool (id:13);
- auto_ball_4:bool (id:14);
- auto_ball_5:bool (id:15);
- // The quadrant that the robot starts in for autonomous mode.
- // Valid values are 1 through 4.
- starting_quadrant: int (id:16);
-
- comment:string (id:19);
-}
-
-table RequestDataScoutingResponse {
- stats_list:[Stats] (id:0);
-}
-
-root_type RequestDataScoutingResponse;
\ No newline at end of file
diff --git a/scouting/webserver/requests/messages/submit_data_scouting.fbs b/scouting/webserver/requests/messages/submit_data_scouting.fbs
deleted file mode 100644
index 36990f5..0000000
--- a/scouting/webserver/requests/messages/submit_data_scouting.fbs
+++ /dev/null
@@ -1,55 +0,0 @@
-namespace scouting.webserver.requests;
-
-// TODO(phil): Deduplicate with request_scouting_data_response.
-// At the moment, our Go setup doesn't handle includes.
-enum ClimbLevel : byte {
- NoAttempt = 0,
- Failed,
- // Tried for more than 10 seconds and failed.
- FailedWithPlentyOfTime,
- Low,
- Medium,
- High,
- Traversal,
-}
-
-table SubmitDataScouting {
- team:int (id: 0);
- match:int (id: 1);
- set_number:int (id: 19);
- comp_level:string (id: 20);
-
- missed_shots_auto:int (id: 2);
- upper_goal_auto:int (id:3);
- lower_goal_auto:int (id:4);
- missed_shots_tele:int (id: 5);
- upper_goal_tele:int (id:6);
- lower_goal_tele:int (id:7);
- // The rating that is used to rate the defense that this robot played on
- // other robots.
- // TODO: Document what the different values mean. E.g. 0 means no defense
- // played?
- defense_rating:int (id:8);
- // The amount of defense that other robots played on this robot.
- // TODO: Document what the different values mean. E.g. 0 means no defense
- // played against this robot?
- defense_received_rating:int (id:10);
-
- climbing:int (id:9, deprecated);
- climb_level:ClimbLevel (id:17);
-
- auto_ball_1:bool (id:11);
- auto_ball_2:bool (id:12);
- auto_ball_3:bool (id:13);
- auto_ball_4:bool (id:14);
- auto_ball_5:bool (id:15);
- // The quadrant that the robot starts in for autonomous mode.
- // Valid values are 1 through 4.
- starting_quadrant: int (id:16);
-
- // A general comment that scouts can use as a way to record non-numerical
- // data if they need to.
- comment: string (id:18);
-}
-
-root_type SubmitDataScouting;
diff --git a/scouting/webserver/requests/messages/submit_data_scouting_response.fbs b/scouting/webserver/requests/messages/submit_data_scouting_response.fbs
deleted file mode 100644
index fb7f765..0000000
--- a/scouting/webserver/requests/messages/submit_data_scouting_response.fbs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace scouting.webserver.requests;
-
-table SubmitDataScoutingResponse {
- // TODO: Implement this.
-}
-
-root_type SubmitDataScoutingResponse;
diff --git a/scouting/webserver/requests/requests.go b/scouting/webserver/requests/requests.go
index 4f12a4f..19f63b8 100644
--- a/scouting/webserver/requests/requests.go
+++ b/scouting/webserver/requests/requests.go
@@ -21,16 +21,12 @@
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_all_matches_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_all_notes"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_all_notes_response"
- "github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_data_scouting"
- "github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_data_scouting_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_notes_for_team"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_notes_for_team_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_shift_schedule"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_shift_schedule_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_actions"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_actions_response"
- "github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_data_scouting"
- "github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_data_scouting_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_driver_ranking"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_driver_ranking_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_notes"
@@ -41,16 +37,12 @@
flatbuffers "github.com/google/flatbuffers/go"
)
-type SubmitDataScouting = submit_data_scouting.SubmitDataScouting
-type SubmitDataScoutingResponseT = submit_data_scouting_response.SubmitDataScoutingResponseT
type RequestAllMatches = request_all_matches.RequestAllMatches
type RequestAllMatchesResponseT = request_all_matches_response.RequestAllMatchesResponseT
type RequestAllDriverRankings = request_all_driver_rankings.RequestAllDriverRankings
type RequestAllDriverRankingsResponseT = request_all_driver_rankings_response.RequestAllDriverRankingsResponseT
type RequestAllNotes = request_all_notes.RequestAllNotes
type RequestAllNotesResponseT = request_all_notes_response.RequestAllNotesResponseT
-type RequestDataScouting = request_data_scouting.RequestDataScouting
-type RequestDataScoutingResponseT = request_data_scouting_response.RequestDataScoutingResponseT
type Request2023DataScouting = request_2023_data_scouting.Request2023DataScouting
type Request2023DataScoutingResponseT = request_2023_data_scouting_response.Request2023DataScoutingResponseT
type SubmitNotes = submit_notes.SubmitNotes
@@ -71,17 +63,14 @@
type Database interface {
AddToMatch(db.TeamMatch) error
AddToShift(db.Shift) error
- AddToStats(db.Stats) error
AddToStats2023(db.Stats2023) error
ReturnMatches() ([]db.TeamMatch, error)
ReturnAllNotes() ([]db.NotesData, error)
ReturnAllDriverRankings() ([]db.DriverRankingData, error)
ReturnAllShifts() ([]db.Shift, error)
- ReturnStats() ([]db.Stats, error)
ReturnStats2023() ([]db.Stats2023, error)
ReturnStats2023ForTeam(teamNumber string, matchNumber int32, setNumber int32, compLevel string) ([]db.Stats2023, error)
QueryAllShifts(int) ([]db.Shift, error)
- QueryStats(int) ([]db.Stats, error)
QueryNotes(int32) ([]string, error)
AddNotes(db.NotesData) error
AddDriverRanking(db.DriverRankingData) error
@@ -145,69 +134,6 @@
return loginParts[0]
}
-// Handles a SubmitDataScouting request.
-type submitDataScoutingHandler struct {
- db Database
-}
-
-func (handler submitDataScoutingHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
- // Get the username of the person submitting the data.
- username := parseUsername(req)
-
- requestBytes, err := io.ReadAll(req.Body)
- if err != nil {
- respondWithError(w, http.StatusBadRequest, fmt.Sprint("Failed to read request bytes:", err))
- return
- }
-
- request, success := parseRequest[SubmitDataScouting](w, requestBytes, "SubmitDataScouting", submit_data_scouting.GetRootAsSubmitDataScouting)
- if !success {
- return
- }
-
- log.Println("Got data scouting data for match", request.Match(), "team", request.Team(), "from", username)
-
- stats := db.Stats{
- TeamNumber: request.Team(),
- MatchNumber: request.Match(),
- SetNumber: request.SetNumber(),
- CompLevel: string(request.CompLevel()),
- StartingQuadrant: request.StartingQuadrant(),
- AutoBallPickedUp: [5]bool{
- request.AutoBall1(), request.AutoBall2(), request.AutoBall3(),
- request.AutoBall4(), request.AutoBall5(),
- },
- ShotsMissedAuto: request.MissedShotsAuto(),
- UpperGoalAuto: request.UpperGoalAuto(),
- LowerGoalAuto: request.LowerGoalAuto(),
- ShotsMissed: request.MissedShotsTele(),
- UpperGoalShots: request.UpperGoalTele(),
- LowerGoalShots: request.LowerGoalTele(),
- PlayedDefense: request.DefenseRating(),
- DefenseReceivedScore: request.DefenseReceivedRating(),
- Climbing: int32(request.ClimbLevel()),
- CollectedBy: username,
- Comment: string(request.Comment()),
- }
-
- // Do some error checking.
- if stats.StartingQuadrant < 1 || stats.StartingQuadrant > 4 {
- respondWithError(w, http.StatusBadRequest, fmt.Sprint(
- "Invalid starting_quadrant field value of ", stats.StartingQuadrant))
- return
- }
-
- err = handler.db.AddToStats(stats)
- if err != nil {
- respondWithError(w, http.StatusInternalServerError, fmt.Sprint("Failed to submit datascouting data: ", err))
- return
- }
-
- builder := flatbuffers.NewBuilder(50 * 1024)
- builder.Finish((&SubmitDataScoutingResponseT{}).Pack(builder))
- w.Write(builder.FinishedBytes())
-}
-
// Handles a RequestAllMaches request.
type requestAllMatchesHandler struct {
db Database
@@ -406,61 +332,6 @@
w.Write(builder.FinishedBytes())
}
-// Handles a RequestDataScouting request.
-type requestDataScoutingHandler struct {
- db Database
-}
-
-func (handler requestDataScoutingHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
- requestBytes, err := io.ReadAll(req.Body)
- if err != nil {
- respondWithError(w, http.StatusBadRequest, fmt.Sprint("Failed to read request bytes:", err))
- return
- }
-
- _, success := parseRequest(w, requestBytes, "RequestDataScouting", request_data_scouting.GetRootAsRequestDataScouting)
- if !success {
- return
- }
-
- stats, err := handler.db.ReturnStats()
- if err != nil {
- respondWithError(w, http.StatusInternalServerError, fmt.Sprint("Failed to query database: ", err))
- return
- }
-
- var response RequestDataScoutingResponseT
- for _, stat := range stats {
- response.StatsList = append(response.StatsList, &request_data_scouting_response.StatsT{
- Team: stat.TeamNumber,
- Match: stat.MatchNumber,
- SetNumber: stat.SetNumber,
- CompLevel: stat.CompLevel,
- StartingQuadrant: stat.StartingQuadrant,
- AutoBall1: stat.AutoBallPickedUp[0],
- AutoBall2: stat.AutoBallPickedUp[1],
- AutoBall3: stat.AutoBallPickedUp[2],
- AutoBall4: stat.AutoBallPickedUp[3],
- AutoBall5: stat.AutoBallPickedUp[4],
- MissedShotsAuto: stat.ShotsMissedAuto,
- UpperGoalAuto: stat.UpperGoalAuto,
- LowerGoalAuto: stat.LowerGoalAuto,
- MissedShotsTele: stat.ShotsMissed,
- UpperGoalTele: stat.UpperGoalShots,
- LowerGoalTele: stat.LowerGoalShots,
- DefenseRating: stat.PlayedDefense,
- DefenseReceivedRating: stat.DefenseReceivedScore,
- ClimbLevel: request_data_scouting_response.ClimbLevel(stat.Climbing),
- CollectedBy: stat.CollectedBy,
- Comment: stat.Comment,
- })
- }
-
- builder := flatbuffers.NewBuilder(50 * 1024)
- builder.Finish((&response).Pack(builder))
- w.Write(builder.FinishedBytes())
-}
-
type submitNoteScoutingHandler struct {
db Database
}
@@ -908,11 +779,9 @@
func HandleRequests(db Database, scoutingServer server.ScoutingServer) {
scoutingServer.HandleFunc("/requests", unknown)
- scoutingServer.Handle("/requests/submit/data_scouting", submitDataScoutingHandler{db})
scoutingServer.Handle("/requests/request/all_matches", requestAllMatchesHandler{db})
scoutingServer.Handle("/requests/request/all_notes", requestAllNotesHandler{db})
scoutingServer.Handle("/requests/request/all_driver_rankings", requestAllDriverRankingsHandler{db})
- scoutingServer.Handle("/requests/request/data_scouting", requestDataScoutingHandler{db})
scoutingServer.Handle("/requests/request/2023_data_scouting", request2023DataScoutingHandler{db})
scoutingServer.Handle("/requests/submit/submit_notes", submitNoteScoutingHandler{db})
scoutingServer.Handle("/requests/request/notes_for_team", requestNotesForTeamHandler{db})
diff --git a/scouting/webserver/requests/requests_test.go b/scouting/webserver/requests/requests_test.go
index d2d5acc..409d61c 100644
--- a/scouting/webserver/requests/requests_test.go
+++ b/scouting/webserver/requests/requests_test.go
@@ -1,15 +1,12 @@
package requests
import (
- "bytes"
- "io"
"net/http"
"reflect"
"testing"
"github.com/frc971/971-Robot-Code/scouting/db"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/debug"
- "github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/error_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_2023_data_scouting"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_2023_data_scouting_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_all_driver_rankings"
@@ -18,14 +15,10 @@
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_all_matches_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_all_notes"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_all_notes_response"
- "github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_data_scouting"
- "github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_data_scouting_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_notes_for_team"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_shift_schedule"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_shift_schedule_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_actions"
- "github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_data_scouting"
- "github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_data_scouting_response"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_driver_ranking"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_notes"
"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/submit_shift_schedule"
@@ -50,78 +43,6 @@
}
}
-// Validates that we can submit new data scouting data.
-func TestSubmitDataScoutingError(t *testing.T) {
- db := MockDatabase{}
- scoutingServer := server.NewScoutingServer()
- HandleRequests(&db, scoutingServer)
- scoutingServer.Start(8080)
- defer scoutingServer.Stop()
-
- resp, err := http.Post("http://localhost:8080/requests/submit/data_scouting", "application/octet-stream", bytes.NewReader([]byte("")))
- if err != nil {
- t.Fatalf("Failed to send request: %v", err)
- }
- if resp.StatusCode != http.StatusBadRequest {
- t.Fatal("Unexpected status code. Got", resp.Status)
- }
-
- responseBytes, err := io.ReadAll(resp.Body)
- if err != nil {
- t.Fatal("Failed to read response bytes:", err)
- }
- errorResponse := error_response.GetRootAsErrorResponse(responseBytes, 0)
-
- errorMessage := string(errorResponse.ErrorMessage())
- if errorMessage != "Failed to parse SubmitDataScouting: runtime error: index out of range [3] with length 0" {
- t.Fatal("Got mismatched error message:", errorMessage)
- }
-}
-
-// Validates that we can submit new data scouting data.
-func TestSubmitDataScouting(t *testing.T) {
- db := MockDatabase{}
- scoutingServer := server.NewScoutingServer()
- HandleRequests(&db, scoutingServer)
- scoutingServer.Start(8080)
- defer scoutingServer.Stop()
-
- builder := flatbuffers.NewBuilder(1024)
- builder.Finish((&submit_data_scouting.SubmitDataScoutingT{
- Team: 971,
- Match: 1,
- SetNumber: 8,
- CompLevel: "quals",
- StartingQuadrant: 2,
- AutoBall1: true,
- AutoBall2: false,
- AutoBall3: false,
- AutoBall4: false,
- AutoBall5: false,
- MissedShotsAuto: 9971,
- UpperGoalAuto: 9971,
- LowerGoalAuto: 9971,
- MissedShotsTele: 9971,
- UpperGoalTele: 9971,
- LowerGoalTele: 9971,
- DefenseRating: 9971,
- DefenseReceivedRating: 4,
- ClimbLevel: submit_data_scouting.ClimbLevelLow,
- Comment: "this is a comment",
- }).Pack(builder))
-
- response, err := debug.SubmitDataScouting("http://localhost:8080", builder.FinishedBytes())
- if err != nil {
- t.Fatal("Failed to submit data scouting: ", err)
- }
-
- // We get an empty response back. Validate that.
- expected := submit_data_scouting_response.SubmitDataScoutingResponseT{}
- if !reflect.DeepEqual(expected, *response) {
- t.Fatal("Expected ", expected, ", but got:", *response)
- }
-}
-
// Validates that we can request the full match list.
func TestRequestAllMatches(t *testing.T) {
db := MockDatabase{
@@ -280,83 +201,6 @@
}
-// Validates that we can request the stats.
-func TestRequestDataScouting(t *testing.T) {
- db := MockDatabase{
- stats: []db.Stats{
- {
- TeamNumber: 971, MatchNumber: 1, SetNumber: 2, CompLevel: "quals",
- StartingQuadrant: 1,
- AutoBallPickedUp: [5]bool{true, false, false, false, true},
- ShotsMissed: 1, UpperGoalShots: 2, LowerGoalShots: 3,
- ShotsMissedAuto: 4, UpperGoalAuto: 5, LowerGoalAuto: 6,
- PlayedDefense: 7, DefenseReceivedScore: 3, Climbing: 2,
- Comment: "a lovely comment", CollectedBy: "john",
- },
- {
- TeamNumber: 972, MatchNumber: 1, SetNumber: 4, CompLevel: "extra",
- StartingQuadrant: 2,
- AutoBallPickedUp: [5]bool{false, false, true, false, false},
- ShotsMissed: 2, UpperGoalShots: 3, LowerGoalShots: 4,
- ShotsMissedAuto: 5, UpperGoalAuto: 6, LowerGoalAuto: 7,
- PlayedDefense: 8, DefenseReceivedScore: 1, Climbing: 4,
- Comment: "another lovely comment", CollectedBy: "andrea",
- },
- },
- }
- scoutingServer := server.NewScoutingServer()
- HandleRequests(&db, scoutingServer)
- scoutingServer.Start(8080)
- defer scoutingServer.Stop()
-
- builder := flatbuffers.NewBuilder(1024)
- builder.Finish((&request_data_scouting.RequestDataScoutingT{}).Pack(builder))
-
- response, err := debug.RequestDataScouting("http://localhost:8080", builder.FinishedBytes())
- if err != nil {
- t.Fatal("Failed to request all matches: ", err)
- }
-
- expected := request_data_scouting_response.RequestDataScoutingResponseT{
- StatsList: []*request_data_scouting_response.StatsT{
- {
- Team: 971, Match: 1, SetNumber: 2, CompLevel: "quals",
- MissedShotsAuto: 4, UpperGoalAuto: 5, LowerGoalAuto: 6,
- MissedShotsTele: 1, UpperGoalTele: 2, LowerGoalTele: 3,
- DefenseRating: 7,
- DefenseReceivedRating: 3,
- CollectedBy: "john",
- AutoBall1: true, AutoBall2: false, AutoBall3: false,
- AutoBall4: false, AutoBall5: true,
- StartingQuadrant: 1,
- ClimbLevel: request_data_scouting_response.ClimbLevelFailedWithPlentyOfTime,
- Comment: "a lovely comment",
- },
- {
- Team: 972, Match: 1, SetNumber: 4, CompLevel: "extra",
- MissedShotsAuto: 5, UpperGoalAuto: 6, LowerGoalAuto: 7,
- MissedShotsTele: 2, UpperGoalTele: 3, LowerGoalTele: 4,
- DefenseRating: 8,
- DefenseReceivedRating: 1,
- CollectedBy: "andrea",
- AutoBall1: false, AutoBall2: false, AutoBall3: true,
- AutoBall4: false, AutoBall5: false,
- StartingQuadrant: 2,
- ClimbLevel: request_data_scouting_response.ClimbLevelMedium,
- Comment: "another lovely comment",
- },
- },
- }
- if len(expected.StatsList) != len(response.StatsList) {
- t.Fatal("Expected ", expected, ", but got ", *response)
- }
- for i, match := range expected.StatsList {
- if !reflect.DeepEqual(*match, *response.StatsList[i]) {
- t.Fatal("Expected for stats", i, ":", *match, ", but got:", *response.StatsList[i])
- }
- }
-}
-
// Validates that we can request the 2023 stats.
func TestRequest2023DataScouting(t *testing.T) {
db := MockDatabase{
@@ -904,7 +748,6 @@
type MockDatabase struct {
matches []db.TeamMatch
- stats []db.Stats
notes []db.NotesData
shiftSchedule []db.Shift
driver_ranking []db.DriverRankingData
@@ -916,11 +759,6 @@
return nil
}
-func (database *MockDatabase) AddToStats(stats db.Stats) error {
- database.stats = append(database.stats, stats)
- return nil
-}
-
func (database *MockDatabase) AddToStats2023(stats2023 db.Stats2023) error {
database.stats2023 = append(database.stats2023, stats2023)
return nil
@@ -929,10 +767,6 @@
return database.matches, nil
}
-func (database *MockDatabase) ReturnStats() ([]db.Stats, error) {
- return database.stats, nil
-}
-
func (database *MockDatabase) ReturnStats2023() ([]db.Stats2023, error) {
return database.stats2023, nil
}
@@ -947,10 +781,6 @@
return results, nil
}
-func (database *MockDatabase) QueryStats(int) ([]db.Stats, error) {
- return []db.Stats{}, nil
-}
-
func (database *MockDatabase) QueryNotes(requestedTeam int32) ([]string, error) {
var results []string
for _, data := range database.notes {
diff --git a/scouting/www/rpc/BUILD b/scouting/www/rpc/BUILD
index 427b493..113c747 100644
--- a/scouting/www/rpc/BUILD
+++ b/scouting/www/rpc/BUILD
@@ -11,14 +11,14 @@
generate_public_api = False,
deps = [
"//scouting/webserver/requests/messages:error_response_ts_fbs",
+ "//scouting/webserver/requests/messages:request_2023_data_scouting_response_ts_fbs",
+ "//scouting/webserver/requests/messages:request_2023_data_scouting_ts_fbs",
"//scouting/webserver/requests/messages:request_all_driver_rankings_response_ts_fbs",
"//scouting/webserver/requests/messages:request_all_driver_rankings_ts_fbs",
"//scouting/webserver/requests/messages:request_all_matches_response_ts_fbs",
"//scouting/webserver/requests/messages:request_all_matches_ts_fbs",
"//scouting/webserver/requests/messages:request_all_notes_response_ts_fbs",
"//scouting/webserver/requests/messages:request_all_notes_ts_fbs",
- "//scouting/webserver/requests/messages:request_data_scouting_response_ts_fbs",
- "//scouting/webserver/requests/messages:request_data_scouting_ts_fbs",
"@com_github_google_flatbuffers//ts:flatbuffers_ts",
],
)
diff --git a/scouting/www/rpc/view_data_requestor.ts b/scouting/www/rpc/view_data_requestor.ts
index d41bf43..24d10b6 100644
--- a/scouting/www/rpc/view_data_requestor.ts
+++ b/scouting/www/rpc/view_data_requestor.ts
@@ -11,11 +11,11 @@
Ranking,
RequestAllDriverRankingsResponse,
} from '../../webserver/requests/messages/request_all_driver_rankings_response_generated';
-import {RequestDataScouting} from '../../webserver/requests/messages/request_data_scouting_generated';
+import {Request2023DataScouting} from '../../webserver/requests/messages/request_2023_data_scouting_generated';
import {
- Stats,
- RequestDataScoutingResponse,
-} from '../../webserver/requests/messages/request_data_scouting_response_generated';
+ Stats2023,
+ Request2023DataScoutingResponse,
+} from '../../webserver/requests/messages/request_2023_data_scouting_response_generated';
@Injectable({providedIn: 'root'})
export class ViewDataRequestor {
@@ -77,15 +77,15 @@
return driverRankingList;
}
// Returns all data scouting entries from the database.
- async fetchStatsList(): Promise<Stats[]> {
+ async fetchStats2023List(): Promise<Stats2023[]> {
let fbBuffer = await this.fetchFromServer(
- RequestDataScouting.startRequestDataScouting,
- RequestDataScouting.endRequestDataScouting,
- '/requests/request/data_scouting'
+ Request2023DataScouting.startRequest2023DataScouting,
+ Request2023DataScouting.endRequest2023DataScouting,
+ '/requests/request/2023_data_scouting'
);
const parsedResponse =
- RequestDataScoutingResponse.getRootAsRequestDataScoutingResponse(
+ Request2023DataScoutingResponse.getRootAsRequest2023DataScoutingResponse(
fbBuffer
);
diff --git a/scouting/www/view/BUILD b/scouting/www/view/BUILD
index 25aa9fa..d787e8f 100644
--- a/scouting/www/view/BUILD
+++ b/scouting/www/view/BUILD
@@ -11,12 +11,12 @@
deps = [
":node_modules/@angular/forms",
"//scouting/webserver/requests/messages:error_response_ts_fbs",
+ "//scouting/webserver/requests/messages:request_2023_data_scouting_response_ts_fbs",
+ "//scouting/webserver/requests/messages:request_2023_data_scouting_ts_fbs",
"//scouting/webserver/requests/messages:request_all_driver_rankings_response_ts_fbs",
"//scouting/webserver/requests/messages:request_all_driver_rankings_ts_fbs",
"//scouting/webserver/requests/messages:request_all_notes_response_ts_fbs",
"//scouting/webserver/requests/messages:request_all_notes_ts_fbs",
- "//scouting/webserver/requests/messages:request_data_scouting_response_ts_fbs",
- "//scouting/webserver/requests/messages:request_data_scouting_ts_fbs",
"//scouting/www/rpc",
"@com_github_google_flatbuffers//ts:flatbuffers_ts",
],
diff --git a/scouting/www/view/view.component.ts b/scouting/www/view/view.component.ts
index f4a55a1..f5b4d6a 100644
--- a/scouting/www/view/view.component.ts
+++ b/scouting/www/view/view.component.ts
@@ -4,9 +4,9 @@
RequestAllDriverRankingsResponse,
} from '../../webserver/requests/messages/request_all_driver_rankings_response_generated';
import {
- Stats,
- RequestDataScoutingResponse,
-} from '../../webserver/requests/messages/request_data_scouting_response_generated';
+ Stats2023,
+ Request2023DataScoutingResponse,
+} from '../../webserver/requests/messages/request_2023_data_scouting_response_generated';
import {
Note,
RequestAllNotesResponse,
@@ -14,7 +14,7 @@
import {ViewDataRequestor} from '../rpc';
-type Source = 'Notes' | 'Stats' | 'DriverRanking';
+type Source = 'Notes' | 'Stats2023' | 'DriverRanking';
//TODO(Filip): Deduplicate
const COMP_LEVEL_LABELS = {
@@ -52,7 +52,7 @@
// Stores the corresponding data.
noteList: Note[] = [];
driverRankingList: Ranking[] = [];
- statList: Stats[] = [];
+ statList: Stats2023[] = [];
// Fetch notes on initialization.
ngOnInit() {
@@ -66,11 +66,11 @@
if (!this.ascendingSort) {
this.driverRankingList.sort((a, b) => b.matchNumber() - a.matchNumber());
this.noteList.sort((a, b) => b.team() - a.team());
- this.statList.sort((a, b) => b.match() - a.match());
+ 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.statList.sort((a, b) => a.match() - b.match());
+ this.statList.sort((a, b) => a.matchNumber() - b.matchNumber());
}
}
@@ -93,8 +93,8 @@
this.fetchNotes();
}
- case 'Stats': {
- this.fetchStats();
+ case 'Stats2023': {
+ this.fetchStats2023();
}
case 'DriverRanking': {
@@ -133,12 +133,12 @@
}
// Fetch all data scouting (stats) data and store in statList.
- async fetchStats() {
+ async fetchStats2023() {
this.progressMessage = 'Fetching stats list. Please be patient.';
this.errorMessage = '';
try {
- this.statList = await this.viewDataRequestor.fetchStatsList();
+ this.statList = await this.viewDataRequestor.fetchStats2023List();
this.progressMessage = 'Successfully fetched stats list.';
} catch (e) {
this.errorMessage = e;
diff --git a/scouting/www/view/view.ng.html b/scouting/www/view/view.ng.html
index c361638..667765f 100644
--- a/scouting/www/view/view.ng.html
+++ b/scouting/www/view/view.ng.html
@@ -16,7 +16,7 @@
</a>
</li>
<li>
- <a class="dropdown-item" href="#" (click)="switchDataSource('Stats')">
+ <a class="dropdown-item" href="#" (click)="switchDataSource('Stats2023')">
Stats
</a>
</li>
@@ -73,7 +73,7 @@
</table>
</div>
<!-- Stats Data Display. -->
- <div *ngSwitchCase="'Stats'">
+ <div *ngSwitchCase="'Stats2023'">
<table class="table">
<thead>
<tr>
@@ -93,11 +93,11 @@
</tr>
</thead>
<tbody>
- <tr *ngFor="let stat of statList; index as i;">
- <th scope="row">{{stat.match()}}</th>
- <td>{{stat.team()}}</td>
- <td>{{stat.setNumber()}}</td>
- <td>{{COMP_LEVEL_LABELS[stat.compLevel()]}}</td>
+ <tr *ngFor="let stat2023 of statList; index as i;">
+ <th scope="row">{{stat2023.match()}}</th>
+ <td>{{stat2023.team()}}</td>
+ <td>{{stat2023.setNumber()}}</td>
+ <td>{{COMP_LEVEL_LABELS[stat2023.compLevel()]}}</td>
<!-- Delete Icon. -->
<td>
<button class="btn btn-danger" (click)="deleteData()">