diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2024-11-07 18:41:53 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2024-11-07 18:41:53 -0500 |
| commit | 3685ec6c933fe0a6d22df0e41c16f13d7be075cf (patch) | |
| tree | d4d83fab9be07fa43e595509d73694b41d1517d7 /server/target.go | |
| parent | 4e55b06016f254947a21b3de3eb93392c0b627dc (diff) | |
| download | soen422-3685ec6c933fe0a6d22df0e41c16f13d7be075cf.zip | |
server: refactor
Diffstat (limited to 'server/target.go')
| -rw-r--r-- | server/target.go | 45 |
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) +} |