diff options
| -rw-r--r-- | backend/recipe.go | 127 | 
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  }  | 
