From 37bf6929841e3bb4e5be8b63b0345e44961d09c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20=C3=85hall?= Date: Thu, 30 May 2024 15:06:41 +0200 Subject: [PATCH] Better trigger create --- main.go | 33 +++++++++++++++++++++++++++++++++ trigger.go | 29 ++++++++++++++++++++++++++++- views/pages/triggers.gotmpl | 25 ++++++++++++++++++++++++- 3 files changed, 85 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index fd0ed62..d8990d4 100644 --- a/main.go +++ b/main.go @@ -137,6 +137,7 @@ func main() { // {{{ service.Register("/datapoint/values/{id}", false, false, pageDatapointValues) service.Register("/triggers", false, false, pageTriggers) + service.Register("/trigger/create/{sectionID}/{name}", false, false, triggerCreate) service.Register("/trigger/edit/{id}", false, false, pageTriggerEdit) service.Register("/trigger/edit/{id}/{sectionID}", false, false, pageTriggerEdit) service.Register("/trigger/addDatapoint/{id}/{datapointName}", false, false, pageTriggerDatapointAdd) @@ -672,6 +673,38 @@ func pageTriggers(w http.ResponseWriter, _ *http.Request, _ *session.T) { // {{{ page.Render(w) } // }}} +func triggerCreate(w http.ResponseWriter, r *http.Request, _ *session.T) { // {{{ + name := r.PathValue("name") + sectionIDStr := r.PathValue("sectionID") + sectionID, err := strconv.Atoi(sectionIDStr) + if err != nil { + httpError(w, werr.Wrap(err).WithData(sectionIDStr).Log()) + return + } + + t, err := TriggerCreate(sectionID, name) + if err != nil { + httpError(w, werr.Wrap(err).WithData(struct { + SectionID int + Name string + }{ + sectionID, + name, + }).Log()) + return + } + + resp := struct { + OK bool + Trigger Trigger + }{ + true, + t, + } + j, _ := json.Marshal(resp) + w.Header().Add("Content-Type", "application/json") + w.Write(j) +} // }}} func pageTriggerEdit(w http.ResponseWriter, r *http.Request, _ *session.T) { // {{{ idStr := r.PathValue("id") id, err := strconv.Atoi(idStr) diff --git a/trigger.go b/trigger.go index 01d6043..6020f12 100644 --- a/trigger.go +++ b/trigger.go @@ -7,6 +7,7 @@ import ( "github.com/lib/pq" // Standard + "database/sql" "encoding/json" "fmt" "strings" @@ -20,6 +21,13 @@ type Trigger struct { Datapoints []string } +func TriggerCreate(sectionID int, name string) (t Trigger, err error) { // {{{ + t.SectionID = sectionID + t.Name = name + t.Expression = "false" + err = t.Update() + return +} // }}} func TriggersRetrieve() (areas []Area, err error) { // {{{ areas = []Area{} @@ -137,15 +145,34 @@ func (t *Trigger) Update() (err error) { // {{{ } jsonDatapoints, _ := json.Marshal(t.Datapoints) if t.ID == 0 { - _, err = service.Db.Conn.Exec(` + var row *sql.Row + row = service.Db.Conn.QueryRow(` INSERT INTO "trigger"(name, section_id, expression, datapoints) VALUES($1, $2, $3, $4) + RETURNING id `, t.Name, t.SectionID, t.Expression, jsonDatapoints, ) + err = row.Scan(&t.ID) + if err != nil { + err = we.Wrap(err).WithData( + struct { + SectionID int + Name string + Expression string + JsonDataPoints []byte + }{ + t.SectionID, + t.Name, + t.Expression, + jsonDatapoints, + }, + ) + return + } } else { _, err = service.Db.Conn.Exec(` UPDATE "trigger" diff --git a/views/pages/triggers.gotmpl b/views/pages/triggers.gotmpl index b934985..60baf48 100644 --- a/views/pages/triggers.gotmpl +++ b/views/pages/triggers.gotmpl @@ -3,6 +3,29 @@ {{ block "page_label" . }}{{end}} {{ $version := .VERSION }} + +
{{ range .Data.Areas }}
@@ -11,7 +34,7 @@
{{ .Name }}
- +