summaryrefslogtreecommitdiff
path: root/backend/recipe.go
diff options
context:
space:
mode:
Diffstat (limited to 'backend/recipe.go')
-rw-r--r--backend/recipe.go75
1 files changed, 75 insertions, 0 deletions
diff --git a/backend/recipe.go b/backend/recipe.go
index 4fb8816..1d6da90 100644
--- a/backend/recipe.go
+++ b/backend/recipe.go
@@ -1,5 +1,8 @@
package main
+import "database/sql"
+import "strings"
+
type Ingredient struct {
Name string
Amount float64
@@ -43,3 +46,75 @@ func MakeRecipe() *Recipe {
}
+func RecipeFromId(id int, db *sql.DB) *Recipe {
+ var rec 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()
+ 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)
+ }
+ }
+
+ 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 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)
+ }
+ }
+
+ return &rec
+ }
+
+ return nil
+}