summaryrefslogtreecommitdiff
path: root/model/step.go
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2024-03-10 10:59:23 +0100
committerxengineering <me@xengineering.eu>2024-03-24 10:10:54 +0100
commitddc6e8e1fb8a4b1dfe8421b12e40b15162ae75f1 (patch)
tree202012df833fad11ee274b90bf1b9e3c76759339 /model/step.go
parent0520cf604c4dc3279d76e1dd4b49c275dd54611e (diff)
downloadceres-ddc6e8e1fb8a4b1dfe8421b12e40b15162ae75f1.tar
ceres-ddc6e8e1fb8a4b1dfe8421b12e40b15162ae75f1.tar.zst
ceres-ddc6e8e1fb8a4b1dfe8421b12e40b15162ae75f1.zip
model: Add recipe steps
This provides the infrastructure to create views and HTTP handlers to provide recipe steps.
Diffstat (limited to 'model/step.go')
-rw-r--r--model/step.go89
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
+}