package controller import ( "context" "encoding/json" "fmt" "net/http" "github.com/AFASystems/presence/internal/pkg/common/appcontext" "github.com/AFASystems/presence/internal/pkg/model" "github.com/segmentio/kafka-go" ) func SettingsEditController(writer *kafka.Writer, appstate *appcontext.AppState, ctx context.Context) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { decoder := json.NewDecoder(r.Body) var inSettings model.SettingsVal if err := decoder.Decode(&inSettings); err != nil { http.Error(w, err.Error(), 400) fmt.Println("Error in decoding Settings body: ", err) return } if !settingsCheck(inSettings) { http.Error(w, "values must be greater than 0", 400) fmt.Println("settings values must be greater than 0") return } valueStr, err := json.Marshal(&inSettings) if err != nil { http.Error(w, "Error in encoding settings", 500) fmt.Println("Error in encoding settings: ", err) return } msg := kafka.Message{ Value: valueStr, } if err := writer.WriteMessages(ctx, msg); err != nil { fmt.Println("error in sending Kafka message") http.Error(w, "Error in sending kafka message", 500) return } // if all is OK persist settings appstate.UpdateSettings(inSettings) w.Write([]byte("ok")) } } func settingsCheck(settings model.SettingsVal) bool { if settings.LocationConfidence <= 0 || settings.LastSeenThreshold <= 0 || settings.HASendInterval <= 0 { return false } return true } func SettingsListController(appstate *appcontext.AppState, ctx context.Context) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { } }