Realized I could add some db helper funcs.
Getting/Adding/Updating/Deleting Models
Some examples:
func getModelWithId(id string, stmt *sql.Stmt) (model *Model, err error, errStatus int) {
row := stmt.QueryRow(id)
if err = model.ScanFromRowsOrRow(row); err == sql.ErrNoRows {
errStatus = http.StatusNotFound
} else if err != nil {
errStatus = http.StatusInternalServerError
}
return
}
func PostModelToDatabase(model *Model, stmt *sql.Stmt)) error {
dbInput := model.ConvertToDatabaseInput()
return stmt.Exec(dbInput...)
return err
}
func getModelsForRequester(requesterId string) ([]*FoobarModel, error) {
fbRows, err := getFoobarModelsStmt.Query(requesterId)
if err != nil {
return nil, err
}
defer fbRows.Close()
foobarModels := []*FoobarModel{}
for fbRows.Next() {
model := FoobarModel{}
if err = model.ScanFromRowsOrRow(fbRows); err != nil {
return nil, err
}
foobarModels = append(foobarModels, &model)
}
return foobarModels, nil
}
func deleteModelForRequester(fileId string, requesterId string) (err error) {
// NOTE: the other return value is an *sql.Result struct
// We can possibly check if we actually deleted a file using result.RowsAffected() == 1,
// and throw an error if == 0 (meaning we tried to delete a file that didn't exist or didn't belong to requester)
// But I think that is unnecessary for now. Just wanted to log possibility for posterity
// https://pkg.go.dev/database/sql#Result
_, err = deleteFoobarStmt.Exec(fileId, requesterId)
return
}