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
+}