summaryrefslogtreecommitdiff
path: root/backend/recipe.go
blob: 98308d340e3099d96e5b3069acafffe3c3ca5a9f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package main

import "database/sql"
import "strings"

type Ingredient struct {
	Name   string
	Amount float64
	Unit   string
}

type Step struct {
	Num  int
	Desc string
	Time int
}

type Recipe struct {
	Id           int
	Title        string
	Desc         string
	Photos       []string
	Serving_size int
	Cook_time    int
	Rating       int
	Keywords     []string
	Ingredients  []Ingredient
	Steps        []Step
}

func MakeRecipe() *Recipe {
	var r Recipe

	r = Recipe{
		Id:           0,
		Title:        "",
		Desc:         "",
		Serving_size: 0,
		Cook_time:    0,
		Rating:       5,
		Keywords:     make([]string, 0),
		Ingredients:  make([]Ingredient, 0),
		Steps:        make([]Step, 0)}

	return &r

}

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()
		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)
				}
			}

			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
}