Scouting: Update note scouting for 2023 game

This patch updates the keywords provided by strategy team.

Signed-off-by: Filip Kujawa <filip.j.kujawa@gmail.com>
Change-Id: I473af7d6c229a744a175414994e8552944a82d0e
diff --git a/scouting/db/db.go b/scouting/db/db.go
index eecc01c..75309d9 100644
--- a/scouting/db/db.go
+++ b/scouting/db/db.go
@@ -94,15 +94,16 @@
 }
 
 type NotesData struct {
-	ID           uint `gorm:"primaryKey"`
-	TeamNumber   int32
-	Notes        string
-	GoodDriving  bool
-	BadDriving   bool
-	SketchyClimb bool
-	SolidClimb   bool
-	GoodDefense  bool
-	BadDefense   bool
+	ID             uint `gorm:"primaryKey"`
+	TeamNumber     int32
+	Notes          string
+	GoodDriving    bool
+	BadDriving     bool
+	SketchyPickup  bool
+	SketchyPlacing bool
+	GoodDefense    bool
+	BadDefense     bool
+	EasilyDefended bool
 }
 
 type Ranking struct {
@@ -395,14 +396,15 @@
 
 func (database *Database) AddNotes(data NotesData) error {
 	result := database.Create(&NotesData{
-		TeamNumber:   data.TeamNumber,
-		Notes:        data.Notes,
-		GoodDriving:  data.GoodDriving,
-		BadDriving:   data.BadDriving,
-		SketchyClimb: data.SketchyClimb,
-		SolidClimb:   data.SolidClimb,
-		GoodDefense:  data.GoodDefense,
-		BadDefense:   data.BadDefense,
+		TeamNumber:     data.TeamNumber,
+		Notes:          data.Notes,
+		GoodDriving:    data.GoodDriving,
+		BadDriving:     data.BadDriving,
+		SketchyPickup:  data.SketchyPickup,
+		SketchyPlacing: data.SketchyPlacing,
+		GoodDefense:    data.GoodDefense,
+		BadDefense:     data.BadDefense,
+		EasilyDefended: data.EasilyDefended,
 	})
 	return result.Error
 }
diff --git a/scouting/db/db_test.go b/scouting/db/db_test.go
index d775404..b5e9a38 100644
--- a/scouting/db/db_test.go
+++ b/scouting/db/db_test.go
@@ -1092,11 +1092,11 @@
 
 	expected := []string{"Note 1", "Note 3"}
 
-	err := fixture.db.AddNotes(NotesData{TeamNumber: 1234, Notes: "Note 1", GoodDriving: true, BadDriving: false, SketchyClimb: false, SolidClimb: true, GoodDefense: false, BadDefense: true})
+	err := fixture.db.AddNotes(NotesData{TeamNumber: 1234, Notes: "Note 1", GoodDriving: true, BadDriving: false, SketchyPickup: 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, SketchyClimb: false, SolidClimb: true, GoodDefense: false, BadDefense: false})
+	err = fixture.db.AddNotes(NotesData{TeamNumber: 1235, Notes: "Note 2", GoodDriving: false, BadDriving: true, SketchyPickup: 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, SketchyClimb: false, SolidClimb: true, GoodDefense: true, BadDefense: false})
+	err = fixture.db.AddNotes(NotesData{TeamNumber: 1234, Notes: "Note 3", GoodDriving: true, BadDriving: false, SketchyPickup: false, SketchyPlacing: true, GoodDefense: true, BadDefense: false, EasilyDefended: true})
 	check(t, err, "Failed to add Note")
 
 	actual, err := fixture.db.QueryNotes(1234)
diff --git a/scouting/webserver/requests/debug/cli/cli_test.py b/scouting/webserver/requests/debug/cli/cli_test.py
index 979ef5a..4763058 100644
--- a/scouting/webserver/requests/debug/cli/cli_test.py
+++ b/scouting/webserver/requests/debug/cli/cli_test.py
@@ -188,10 +188,11 @@
             "notes": "A very inspiring and useful comment",
             "good_driving": True,
             "bad_driving": False,
-            "sketchy_climb": False,
-            "solid_climb": True,
+            "sketchy_pickup": False,
+            "sketchy_placing": True,
             "good_defense": False,
             "bad_defense": False,
+            "easily_defended": False,
         })
         exit_code, _, stderr = run_debug_cli(["-submitNotes", json_path])
         self.assertEqual(exit_code, 0, stderr)
@@ -210,10 +211,11 @@
             Notes: (string) (len=35) "A very inspiring and useful comment",
             GoodDriving: (bool) true,
             BadDriving: (bool) false,
-            SketchyClimb: (bool) false,
-            SolidClimb: (bool) true,
+            SketchyPickup: (bool) false,
+            SketchyPlacing: (bool) true,
             GoodDefense: (bool) false,
-            BadDefense: (bool) false
+            BadDefense: (bool) false,
+            EasilyDefended: (bool) false
             }"""), stdout)
 
     def test_submit_and_request_driver_ranking(self):
diff --git a/scouting/webserver/requests/messages/request_all_notes_response.fbs b/scouting/webserver/requests/messages/request_all_notes_response.fbs
index a69861b..78e662d 100644
--- a/scouting/webserver/requests/messages/request_all_notes_response.fbs
+++ b/scouting/webserver/requests/messages/request_all_notes_response.fbs
@@ -5,10 +5,11 @@
     notes:string (id: 1);
     good_driving:bool (id: 2);
     bad_driving:bool (id: 3);
-    sketchy_climb:bool (id: 4);
-    solid_climb:bool (id: 5);
+    sketchy_pickup:bool (id: 4);
+    sketchy_placing:bool (id: 5);
     good_defense:bool (id: 6);
     bad_defense:bool (id: 7);
+    easily_defended:bool (id: 8);
 }
 
 table RequestAllNotesResponse {
diff --git a/scouting/webserver/requests/messages/submit_notes.fbs b/scouting/webserver/requests/messages/submit_notes.fbs
index 1498e26..27ed472 100644
--- a/scouting/webserver/requests/messages/submit_notes.fbs
+++ b/scouting/webserver/requests/messages/submit_notes.fbs
@@ -5,10 +5,11 @@
     notes:string (id: 1);
     good_driving:bool (id: 2);
     bad_driving:bool (id: 3);
-    sketchy_climb:bool (id: 4);
-    solid_climb:bool (id: 5);
+    sketchy_pickup:bool (id: 4);
+    sketchy_placing:bool (id: 5);
     good_defense:bool (id: 6);
     bad_defense:bool (id: 7);
+    easily_defended:bool (id: 8);
 }
 
 root_type SubmitNotes;
diff --git a/scouting/webserver/requests/requests.go b/scouting/webserver/requests/requests.go
index bf24140..467542a 100644
--- a/scouting/webserver/requests/requests.go
+++ b/scouting/webserver/requests/requests.go
@@ -433,14 +433,15 @@
 	}
 
 	err = handler.db.AddNotes(db.NotesData{
-		TeamNumber:   request.Team(),
-		Notes:        string(request.Notes()),
-		GoodDriving:  bool(request.GoodDriving()),
-		BadDriving:   bool(request.BadDriving()),
-		SketchyClimb: bool(request.SketchyClimb()),
-		SolidClimb:   bool(request.SolidClimb()),
-		GoodDefense:  bool(request.GoodDefense()),
-		BadDefense:   bool(request.BadDefense()),
+		TeamNumber:     request.Team(),
+		Notes:          string(request.Notes()),
+		GoodDriving:    bool(request.GoodDriving()),
+		BadDriving:     bool(request.BadDriving()),
+		SketchyPickup:  bool(request.SketchyPickup()),
+		SketchyPlacing: bool(request.SketchyPlacing()),
+		GoodDefense:    bool(request.GoodDefense()),
+		BadDefense:     bool(request.BadDefense()),
+		EasilyDefended: bool(request.EasilyDefended()),
 	})
 	if err != nil {
 		respondWithError(w, http.StatusInternalServerError, fmt.Sprintf("Failed to insert notes: %v", err))
@@ -686,14 +687,15 @@
 	var response RequestAllNotesResponseT
 	for _, note := range notes {
 		response.NoteList = append(response.NoteList, &request_all_notes_response.NoteT{
-			Team:         note.TeamNumber,
-			Notes:        note.Notes,
-			GoodDriving:  note.GoodDriving,
-			BadDriving:   note.BadDriving,
-			SketchyClimb: note.SketchyClimb,
-			SolidClimb:   note.SolidClimb,
-			GoodDefense:  note.GoodDefense,
-			BadDefense:   note.BadDefense,
+			Team:           note.TeamNumber,
+			Notes:          note.Notes,
+			GoodDriving:    note.GoodDriving,
+			BadDriving:     note.BadDriving,
+			SketchyPickup:  note.SketchyPickup,
+			SketchyPlacing: note.SketchyPlacing,
+			GoodDefense:    note.GoodDefense,
+			BadDefense:     note.BadDefense,
+			EasilyDefended: note.EasilyDefended,
 		})
 	}
 
diff --git a/scouting/webserver/requests/requests_test.go b/scouting/webserver/requests/requests_test.go
index 6df15de..efd770b 100644
--- a/scouting/webserver/requests/requests_test.go
+++ b/scouting/webserver/requests/requests_test.go
@@ -400,14 +400,15 @@
 
 	builder := flatbuffers.NewBuilder(1024)
 	builder.Finish((&submit_notes.SubmitNotesT{
-		Team:         971,
-		Notes:        "Notes",
-		GoodDriving:  true,
-		BadDriving:   false,
-		SketchyClimb: true,
-		SolidClimb:   false,
-		GoodDefense:  true,
-		BadDefense:   false,
+		Team:           971,
+		Notes:          "Notes",
+		GoodDriving:    true,
+		BadDriving:     false,
+		SketchyPickup:  true,
+		SketchyPlacing: false,
+		GoodDefense:    true,
+		BadDefense:     false,
+		EasilyDefended: true,
 	}).Pack(builder))
 
 	_, err := debug.SubmitNotes("http://localhost:8080", builder.FinishedBytes())
@@ -417,14 +418,15 @@
 
 	expected := []db.NotesData{
 		{
-			TeamNumber:   971,
-			Notes:        "Notes",
-			GoodDriving:  true,
-			BadDriving:   false,
-			SketchyClimb: true,
-			SolidClimb:   false,
-			GoodDefense:  true,
-			BadDefense:   false,
+			TeamNumber:     971,
+			Notes:          "Notes",
+			GoodDriving:    true,
+			BadDriving:     false,
+			SketchyPickup:  true,
+			SketchyPlacing: false,
+			GoodDefense:    true,
+			BadDefense:     false,
+			EasilyDefended: true,
 		},
 	}
 
@@ -436,14 +438,15 @@
 func TestRequestNotes(t *testing.T) {
 	database := MockDatabase{
 		notes: []db.NotesData{{
-			TeamNumber:   971,
-			Notes:        "Notes",
-			GoodDriving:  true,
-			BadDriving:   false,
-			SketchyClimb: true,
-			SolidClimb:   false,
-			GoodDefense:  true,
-			BadDefense:   false,
+			TeamNumber:     971,
+			Notes:          "Notes",
+			GoodDriving:    true,
+			BadDriving:     false,
+			SketchyPickup:  true,
+			SketchyPlacing: false,
+			GoodDefense:    true,
+			BadDefense:     false,
+			EasilyDefended: true,
 		}},
 	}
 	scoutingServer := server.NewScoutingServer()
@@ -663,24 +666,26 @@
 	db := MockDatabase{
 		notes: []db.NotesData{
 			{
-				TeamNumber:   971,
-				Notes:        "Notes",
-				GoodDriving:  true,
-				BadDriving:   false,
-				SketchyClimb: true,
-				SolidClimb:   false,
-				GoodDefense:  true,
-				BadDefense:   false,
+				TeamNumber:     971,
+				Notes:          "Notes",
+				GoodDriving:    true,
+				BadDriving:     false,
+				SketchyPickup:  true,
+				SketchyPlacing: false,
+				GoodDefense:    true,
+				BadDefense:     false,
+				EasilyDefended: false,
 			},
 			{
-				TeamNumber:   972,
-				Notes:        "More Notes",
-				GoodDriving:  false,
-				BadDriving:   false,
-				SketchyClimb: false,
-				SolidClimb:   true,
-				GoodDefense:  false,
-				BadDefense:   true,
+				TeamNumber:     972,
+				Notes:          "More Notes",
+				GoodDriving:    false,
+				BadDriving:     false,
+				SketchyPickup:  false,
+				SketchyPlacing: true,
+				GoodDefense:    false,
+				BadDefense:     true,
+				EasilyDefended: false,
 			},
 		},
 	}
@@ -700,24 +705,26 @@
 	expected := request_all_notes_response.RequestAllNotesResponseT{
 		NoteList: []*request_all_notes_response.NoteT{
 			{
-				Team:         971,
-				Notes:        "Notes",
-				GoodDriving:  true,
-				BadDriving:   false,
-				SketchyClimb: true,
-				SolidClimb:   false,
-				GoodDefense:  true,
-				BadDefense:   false,
+				Team:           971,
+				Notes:          "Notes",
+				GoodDriving:    true,
+				BadDriving:     false,
+				SketchyPickup:  true,
+				SketchyPlacing: false,
+				GoodDefense:    true,
+				BadDefense:     false,
+				EasilyDefended: false,
 			},
 			{
-				Team:         972,
-				Notes:        "More Notes",
-				GoodDriving:  false,
-				BadDriving:   false,
-				SketchyClimb: false,
-				SolidClimb:   true,
-				GoodDefense:  false,
-				BadDefense:   true,
+				Team:           972,
+				Notes:          "More Notes",
+				GoodDriving:    false,
+				BadDriving:     false,
+				SketchyPickup:  false,
+				SketchyPlacing: true,
+				GoodDefense:    false,
+				BadDefense:     true,
+				EasilyDefended: false,
 			},
 		},
 	}
diff --git a/scouting/www/notes/notes.component.ts b/scouting/www/notes/notes.component.ts
index 62b4990..21264f2 100644
--- a/scouting/www/notes/notes.component.ts
+++ b/scouting/www/notes/notes.component.ts
@@ -40,10 +40,11 @@
 interface Keywords {
   goodDriving: boolean;
   badDriving: boolean;
-  sketchyClimb: boolean;
-  solidClimb: boolean;
+  sketchyPickup: boolean;
+  sketchyPlacing: boolean;
   goodDefense: boolean;
   badDefense: boolean;
+  easilyDefended: boolean;
 }
 
 interface Input {
@@ -55,10 +56,11 @@
 const KEYWORD_CHECKBOX_LABELS = {
   goodDriving: 'Good Driving',
   badDriving: 'Bad Driving',
-  solidClimb: 'Solid Climb',
-  sketchyClimb: 'Sketchy Climb',
+  sketchyPickup: 'Solid Pickup',
+  sketchyPlacing: 'Sketchy Placing',
   goodDefense: 'Good Defense',
   badDefense: 'Bad Defense',
+  easilyDefended: 'Easily Defended',
 } as const;
 
 @Component({
@@ -113,10 +115,11 @@
       keywordsData: {
         goodDriving: false,
         badDriving: false,
-        solidClimb: false,
-        sketchyClimb: false,
+        sketchyPickup: false,
+        sketchyPlacing: false,
         goodDefense: false,
         badDefense: false,
+        easilyDefended: false,
       },
     };
 
@@ -149,10 +152,11 @@
           dataFb,
           this.newData[i].keywordsData.goodDriving,
           this.newData[i].keywordsData.badDriving,
-          this.newData[i].keywordsData.sketchyClimb,
-          this.newData[i].keywordsData.solidClimb,
+          this.newData[i].keywordsData.sketchyPickup,
+          this.newData[i].keywordsData.sketchyPlacing,
           this.newData[i].keywordsData.goodDefense,
-          this.newData[i].keywordsData.badDefense
+          this.newData[i].keywordsData.badDefense,
+          this.newData[i].keywordsData.easilyDefended
         )
       );
 
diff --git a/scouting/www/view/view.component.ts b/scouting/www/view/view.component.ts
index c877faf..f4a55a1 100644
--- a/scouting/www/view/view.component.ts
+++ b/scouting/www/view/view.component.ts
@@ -171,11 +171,11 @@
     if (entry.badDriving()) {
       parsedKeywords += 'Bad Driving ';
     }
-    if (entry.solidClimb()) {
-      parsedKeywords += 'Solid Climb ';
+    if (entry.sketchyPickup()) {
+      parsedKeywords += 'Sketchy Pickup ';
     }
-    if (entry.sketchyClimb()) {
-      parsedKeywords += 'Sketchy Climb ';
+    if (entry.sketchyPlacing()) {
+      parsedKeywords += 'Sketchy Pickup ';
     }
     if (entry.goodDefense()) {
       parsedKeywords += 'Good Defense ';
@@ -183,6 +183,9 @@
     if (entry.badDefense()) {
       parsedKeywords += 'Bad Defense ';
     }
+    if (entry.easilyDefended()) {
+      parsedKeywords += 'Easily Defended';
+    }
 
     return parsedKeywords;
   }