Add new database table for notes scouting.
Change-Id: I437276133f673b2ae8b01bde75a7b1550eef85f3
Signed-off-by: Alex Perry <alex.perry96@gmail.com>
diff --git a/scouting/db/db.go b/scouting/db/db.go
index d666f79..94e9056 100644
--- a/scouting/db/db.go
+++ b/scouting/db/db.go
@@ -27,6 +27,11 @@
Climbing int32
}
+type NotesData struct {
+ TeamNumber int32
+ Notes []string
+}
+
// Opens a database at the specified path. If the path refers to a non-existent
// file, the database will be created and initialized with empty tables.
func NewDatabase(path string) (*Database, error) {
@@ -86,6 +91,20 @@
return nil, errors.New(fmt.Sprint("Failed to create team_match_stats table: ", err))
}
+ statement, err = database.Prepare("CREATE TABLE IF NOT EXISTS team_notes (" +
+ "id INTEGER PRIMARY KEY, " +
+ "TeamNumber INTEGER, " +
+ "Notes TEXT)")
+ if err != nil {
+ return nil, errors.New(fmt.Sprint("Failed to prepare notes table creation: ", err))
+ }
+ defer statement.Close()
+
+ _, err = statement.Exec()
+ if err != nil {
+ return nil, errors.New(fmt.Sprint("Failed to create notes table: ", err))
+ }
+
return database, nil
}
@@ -107,6 +126,15 @@
if err != nil {
return errors.New(fmt.Sprint("Failed to drop stats table: ", err))
}
+
+ statement, err = database.Prepare("DROP TABLE IF EXISTS team_notes")
+ if err != nil {
+ return errors.New(fmt.Sprint("Failed to prepare dropping notes table: ", err))
+ }
+ _, err = statement.Exec()
+ if err != nil {
+ return errors.New(fmt.Sprint("Failed to drop notes table: ", err))
+ }
return nil
}
@@ -285,3 +313,42 @@
}
return teams, nil
}
+
+func (database *Database) QueryNotes(TeamNumber int32) (NotesData, error) {
+ rows, err := database.Query("SELECT * FROM team_notes WHERE TeamNumber = ?", TeamNumber)
+ if err != nil {
+ return NotesData{}, errors.New(fmt.Sprint("Failed to select from notes: ", err))
+ }
+ defer rows.Close()
+
+ var notes []string
+ for rows.Next() {
+ var id int32
+ var data string
+ err = rows.Scan(&id, &TeamNumber, &data)
+ if err != nil {
+ return NotesData{}, errors.New(fmt.Sprint("Failed to scan from notes: ", err))
+ }
+ notes = append(notes, data)
+ }
+ return NotesData{TeamNumber, notes}, nil
+}
+
+func (database *Database) AddNotes(data NotesData) error {
+ if len(data.Notes) > 1 {
+ return errors.New("Can only insert one row of notes at a time")
+ }
+ statement, err := database.Prepare("INSERT INTO " +
+ "team_notes(TeamNumber, Notes)" +
+ "VALUES (?, ?)")
+ if err != nil {
+ return errors.New(fmt.Sprint("Failed to prepare insertion into notes table: ", err))
+ }
+ defer statement.Close()
+
+ _, err = statement.Exec(data.TeamNumber, data.Notes[0])
+ if err != nil {
+ return errors.New(fmt.Sprint("Failed to insert into Notes database: ", err))
+ }
+ return nil
+}
diff --git a/scouting/db/db_test.go b/scouting/db/db_test.go
index 474ea41..13a43f8 100644
--- a/scouting/db/db_test.go
+++ b/scouting/db/db_test.go
@@ -324,3 +324,27 @@
t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
}
}
+
+func TestNotes(t *testing.T) {
+ db := createDatabase(t)
+ defer db.Delete()
+
+ expected := NotesData{
+ TeamNumber: 1234,
+ Notes: []string{"Note 1", "Note 3"},
+ }
+
+ err := db.AddNotes(NotesData{1234, []string{"Note 1"}})
+ check(t, err, "Failed to add Note")
+ err = db.AddNotes(NotesData{1235, []string{"Note 2"}})
+ check(t, err, "Failed to add Note")
+ err = db.AddNotes(NotesData{1234, []string{"Note 3"}})
+ check(t, err, "Failed to add Note")
+
+ actual, err := db.QueryNotes(1234)
+ check(t, err, "Failed to get Notes")
+
+ if !reflect.DeepEqual(expected, actual) {
+ t.Errorf("Got %#v,\nbut expected %#v.", actual, expected)
+ }
+}