Make sidewalk slice concurrency-safe

This commit is contained in:
Chandler Swift 2025-02-12 22:54:00 -06:00
parent 47d1fca78f
commit 8eadd7b71e
Signed by: chandlerswift
GPG key ID: A851D929D52FB93F

View file

@ -11,6 +11,7 @@ import (
"net/http"
"runtime/debug"
"strconv"
"sync"
"time"
"git.chandlerswift.com/chandlerswift/nau-sidewalks/sidewalk"
@ -42,6 +43,7 @@ func main() {
// Decode the JSON data
var sidewalks []sidewalk.Sidewalk
var sidewalksMutex sync.RWMutex
if err := json.Unmarshal(sidewalk_data, &sidewalks); err != nil {
log.Fatalf("Error decoding JSON: %v", err)
}
@ -58,7 +60,9 @@ func main() {
http.HandleFunc("GET /api/sidewalks", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
sidewalksMutex.RLock()
json.NewEncoder(w).Encode(sidewalks)
sidewalksMutex.RUnlock()
})
http.HandleFunc("POST /api/sidewalks/{id}", func(w http.ResponseWriter, r *http.Request) {
@ -75,8 +79,10 @@ func main() {
if err != nil {
http.Error(w, "Invalid condition", http.StatusBadRequest)
}
sidewalksMutex.Lock()
sidewalks[sidewalkID].Condition = sidewalk.Condition(condition)
sidewalks[sidewalkID].LastUpdated = time.Now()
sidewalksMutex.Unlock()
http.Redirect(w, r, "/", http.StatusSeeOther)
})