|
- 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/redis/go-redis/v9"
- "github.com/segmentio/kafka-go"
- )
-
- func SettingsEditController(writer *kafka.Writer, appstate *appcontext.AppState, client *redis.Client, 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)
- appstate.PersistSettings(client, ctx)
-
- 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, client *redis.Client, ctx context.Context) http.HandlerFunc {
- return func(w http.ResponseWriter, r *http.Request) {
- v, err := client.Get(ctx, "settings").Result()
- if err == redis.Nil {
- msg := "No list found for key settings, starting empty"
- fmt.Println(msg)
- http.Error(w, "msg", 500)
- } else if err != nil {
- msg := fmt.Sprintf("Error in connecting to Redis: %v, key: settings returning empty map\n", err)
- fmt.Println(msg)
- http.Error(w, msg, 500)
- } else {
- w.Write([]byte(v))
- }
- }
- }
|