From ddc6e8e1fb8a4b1dfe8421b12e40b15162ae75f1 Mon Sep 17 00:00:00 2001 From: xengineering Date: Sun, 10 Mar 2024 10:59:23 +0100 Subject: model: Add recipe steps This provides the infrastructure to create views and HTTP handlers to provide recipe steps. --- model/step.go | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 model/step.go (limited to 'model/step.go') 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 +} -- cgit v1.2.3-70-g09d2