summaryrefslogtreecommitdiffstats
path: root/server/target.go
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2024-11-07 18:41:53 -0500
committerSam Anthony <sam@samanthony.xyz>2024-11-07 18:41:53 -0500
commit3685ec6c933fe0a6d22df0e41c16f13d7be075cf (patch)
treed4d83fab9be07fa43e595509d73694b41d1517d7 /server/target.go
parent4e55b06016f254947a21b3de3eb93392c0b627dc (diff)
downloadsoen422-3685ec6c933fe0a6d22df0e41c16f13d7be075cf.zip
server: refactor
Diffstat (limited to 'server/target.go')
-rw-r--r--server/target.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/server/target.go b/server/target.go
new file mode 100644
index 0000000..4c58f1d
--- /dev/null
+++ b/server/target.go
@@ -0,0 +1,45 @@
+package main
+
+import (
+ "fmt"
+ "log"
+ "net/http"
+ "strconv"
+ "sync"
+)
+
+type TargetHumidityHandler struct {
+ mu sync.Mutex
+ target Humidity
+}
+
+func (h *TargetHumidityHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+ log.Println(r.Method, r.URL)
+ switch r.Method {
+ case http.MethodGet:
+ h.get(w, r)
+ case http.MethodPost:
+ h.post(w, r)
+ default:
+ w.WriteHeader(http.StatusMethodNotAllowed)
+ fmt.Fprintf(w, "invalid method: '%s'", r.Method)
+ }
+}
+
+func (h *TargetHumidityHandler) get(w http.ResponseWriter, r *http.Request) {
+ h.mu.Lock()
+ defer h.mu.Unlock()
+ fmt.Fprintf(w, "%.2f", h.target)
+}
+
+func (h *TargetHumidityHandler) post(w http.ResponseWriter, r *http.Request) {
+ target, err := strconv.ParseFloat(r.URL.RawQuery, 32)
+ if err != nil {
+ badRequest(w, "invalid humidity: '%s'", r.URL.RawQuery)
+ return
+ }
+
+ h.mu.Lock()
+ defer h.mu.Unlock()
+ h.target = Humidity(target)
+}