summaryrefslogtreecommitdiff
path: root/backend/recipe.go
diff options
context:
space:
mode:
authorTucker Evans <tuckerevans24@gmail.com>2019-11-10 13:41:59 -0500
committerTucker Evans <tuckerevans24@gmail.com>2019-11-10 13:41:59 -0500
commit25e9d6a91903b45d6a62a152e230bfdbc6a41af0 (patch)
treee879f39881b9fb2d16c7b62a6c3240c44a305ca1 /backend/recipe.go
parent2efe3ce53cebd373bf56ba7580bb63df16871bac (diff)
Fix RecipeFromId expects only one row from database
Now uses sql.QueryRow rather than sql.Query so it doesnt have to check row.Next(), just have to check that row was returned (on scan call)
Diffstat (limited to 'backend/recipe.go')
-rw-r--r--backend/recipe.go127
1 files changed, 67 insertions, 60 deletions
diff --git a/backend/recipe.go b/backend/recipe.go
index 98308d3..ceae402 100644
--- a/backend/recipe.go
+++ b/backend/recipe.go
@@ -51,71 +51,78 @@ func RecipeFromId(id int, db *sql.DB) *Recipe {
var ingr Ingredient
var step Step
- rows, err := db.Query("SELECT id, title, photo_urls, keywords, description, serving_size, cook_time, rating, num_cooked FROM recipes WHERE id = $1", id)
- if err == nil {
- var id, rating, num_cooked, servings, cook_time int
- var title, photo_urls, keywords, desc string
-
- defer rows.Close()
- if rows.Next() {
- rows.Scan(&id, &title, &photo_urls, &keywords, &desc, &servings, &cook_time, &rating, &num_cooked)
- rec = Recipe{
- Id: id,
- Title: title,
- Desc: desc,
- Photos: make([]string, 0),
- Serving_size: servings,
- Cook_time: cook_time,
- Rating: rating,
- Keywords: make([]string, 0),
- Ingredients: make([]Ingredient, 0),
- Steps: make([]Step, 0)}
-
- if len(photo_urls) > 0 {
- photos := strings.Split(photo_urls, "|")
- for _, p := range photos {
- rec.Photos = append(rec.Photos, p)
- }
- }
- if len(keywords) > 0 {
- keyword_split := strings.Split(keywords, "|")
- for _, k := range keyword_split {
- rec.Keywords = append(rec.Keywords, k)
- }
- }
+ rows := db.QueryRow(`SELECT title, photo_urls, keywords,
+ description, serving_size, cook_time, rating,
+ num_cooked FROM recipes WHERE id = $1`, id)
- var name, unit string
- var amount float64
- rows, err = db.Query("SELECT name, amount, unit FROM ingredients WHERE recipe_id = $1", id)
- if err == nil {
- for rows.Next() {
- rows.Scan(&name, &amount, &unit)
- ingr = Ingredient{
- Name: name,
- Amount: amount,
- Unit: unit,
- }
- rec.Ingredients = append(rec.Ingredients, ingr)
- }
- }
+ var rating, num_cooked, servings, cook_time int
+ var title, photo_urls, keywords, desc string
+
+ err := rows.Scan(&title, &photo_urls, &keywords, &desc,
+ &servings, &cook_time, &rating, &num_cooked)
+
+ if err == sql.ErrNoRows {
+ return nil
+ }
+
+ rec = Recipe{
+ Id: id,
+ Title: title,
+ Desc: desc,
+ Photos: make([]string, 0),
+ Serving_size: servings,
+ Cook_time: cook_time,
+ Rating: rating,
+ Keywords: make([]string, 0),
+ Ingredients: make([]Ingredient, 0),
+ Steps: make([]Step, 0)}
- var num, timer int
- rows, err = db.Query("SELECT step, description, timer FROM steps WHERE recipe_id = $1", id)
- if err == nil {
- for rows.Next() {
- rows.Scan(&num, &desc, &timer)
- step = Step{
- Num: num,
- Desc: desc,
- Time: timer,
- }
- rec.Steps = append(rec.Steps, step)
- }
+ if len(photo_urls) > 0 {
+ photos := strings.Split(photo_urls, "|")
+ for _, p := range photos {
+ rec.Photos = append(rec.Photos, p)
+ }
+ }
+ if len(keywords) > 0 {
+ keyword_split := strings.Split(keywords, "|")
+ for _, k := range keyword_split {
+ rec.Keywords = append(rec.Keywords, k)
+ }
+ }
+
+ var name, unit string
+ var amount float64
+ rows_ingr, err := db.Query(`SELECT name, amount, unit
+ FROM ingredients WHERE recipe_id = $1`,
+ id)
+ defer rows_ingr.Close()
+ if err == nil {
+ for rows_ingr.Next() {
+ rows_ingr.Scan(&name, &amount, &unit)
+ ingr = Ingredient{
+ Name: name,
+ Amount: amount,
+ Unit: unit,
}
+ rec.Ingredients = append(rec.Ingredients, ingr)
+ }
+ }
- return &rec
+ var num, timer int
+ rows_steps, err := db.Query(`SELECT step, description, timer
+ FROM steps WHERE recipe_id = $1`, id)
+ defer rows_steps.Close()
+ if err == nil {
+ for rows_steps.Next() {
+ rows_steps.Scan(&num, &desc, &timer)
+ step = Step{
+ Num: num,
+ Desc: desc,
+ Time: timer,
+ }
+ rec.Steps = append(rec.Steps, step)
}
}
- return nil
+ return &rec
}