diff options
Diffstat (limited to 'model/step.go')
-rw-r--r-- | model/step.go | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/model/step.go b/model/step.go new file mode 100644 index 0000000..24a11f4 --- /dev/null +++ b/model/step.go @@ -0,0 +1,89 @@ +package model + +import ( + "database/sql" +) + +type Step struct { + Text string `json:"text"` +} + +func (r *Recipe) CreateSteps(tx *sql.Tx) error { + err := r.DeleteSteps(tx) + if err != nil { + return err + } + + cmd := ` +INSERT INTO steps + (recipe, 'index', text) +VALUES + (?, ?, ?) +` + + for i, s := range r.Steps { + _, err := tx.Exec(cmd, r.Id, i, s.Text) + if err != nil { + return err + } + } + + return nil +} + +func (r *Recipe) ReadSteps(tx *sql.Tx) error { + cmd := ` +SELECT + text +FROM + steps +WHERE + recipe = ? +ORDER BY + 'index' ASC +` + + rows, err := tx.Query(cmd, r.Id) + if err != nil { + return err + } + + r.Steps = make([]Step, 0) + for rows.Next() { + s := Step{} + + err = rows.Scan(&s.Text) + if err != nil { + return err + } + + r.Steps = append(r.Steps, s) + } + + return nil +} + +func (r *Recipe) UpdateSteps(tx *sql.Tx) error { + err := r.DeleteSteps(tx) + if err != nil { + return err + } + + return r.CreateSteps(tx) +} + +func (r *Recipe) DeleteSteps(tx *sql.Tx) error { + cmd := ` +DELETE FROM + steps +WHERE + recipe = ? +` + + _, err := tx.Exec(cmd, r.Id) + if err != nil { + return err + } + + return nil +} |