diff --git a/backend/cmd/main.go b/backend/cmd/main.go index 1e0e21c..b25c9c0 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "fmt" "io" "net/http" @@ -9,6 +10,26 @@ import ( _ "github.com/mattn/go-sqlite3" ) +// The button state as represented in memory +type ButtonState struct { + pressCount int +} + +// This is what a handler with a receiver looks like +// Keep in mind that concurrent state access is not (usually) safe +// And will in pracice be guarded by a mutex +func (b *ButtonState) pressHandler(w http.ResponseWriter, r *http.Request) { + b.pressCount++ + response, err := json.Marshal(b.pressCount) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + fmt.Println("Request received") + io.WriteString(w, string(response)) +} + // This is what a handler looks like func handler(w http.ResponseWriter, r *http.Request) { fmt.Println("Request received") @@ -17,15 +38,18 @@ func handler(w http.ResponseWriter, r *http.Request) { func main() { database.DbConnect() + b := &ButtonState{pressCount: 0} - // Mounting the handler + // Mounting the handlers fs := http.FileServer(http.Dir("static")) http.Handle("/", fs) http.HandleFunc("/hello", handler) + http.HandleFunc("/button", b.pressHandler) // Start the server on port 8080 println("Currently listening on http://localhost:8080") - println("Visit http://localhost:8080/hello to see the handler in action") + println("Visit http://localhost:8080/hello to see the hello handler in action") + println("Visit http://localhost:8080/button to see the button handler in action") println("Press Ctrl+C to stop the server") err := http.ListenAndServe(":8080", nil) if err != nil {