You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

67 line
1.6 KiB

  1. package controller
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "net/http"
  7. "github.com/AFASystems/presence/internal/pkg/common/appcontext"
  8. "github.com/AFASystems/presence/internal/pkg/model"
  9. "github.com/segmentio/kafka-go"
  10. )
  11. func SettingsEditController(writer *kafka.Writer, appstate *appcontext.AppState, ctx context.Context) http.HandlerFunc {
  12. return func(w http.ResponseWriter, r *http.Request) {
  13. decoder := json.NewDecoder(r.Body)
  14. var inSettings model.SettingsVal
  15. if err := decoder.Decode(&inSettings); err != nil {
  16. http.Error(w, err.Error(), 400)
  17. fmt.Println("Error in decoding Settings body: ", err)
  18. return
  19. }
  20. if !settingsCheck(inSettings) {
  21. http.Error(w, "values must be greater than 0", 400)
  22. fmt.Println("settings values must be greater than 0")
  23. return
  24. }
  25. valueStr, err := json.Marshal(&inSettings)
  26. if err != nil {
  27. http.Error(w, "Error in encoding settings", 500)
  28. fmt.Println("Error in encoding settings: ", err)
  29. return
  30. }
  31. msg := kafka.Message{
  32. Value: valueStr,
  33. }
  34. if err := writer.WriteMessages(ctx, msg); err != nil {
  35. fmt.Println("error in sending Kafka message")
  36. http.Error(w, "Error in sending kafka message", 500)
  37. return
  38. }
  39. // if all is OK persist settings
  40. appstate.UpdateSettings(inSettings)
  41. w.Write([]byte("ok"))
  42. }
  43. }
  44. func settingsCheck(settings model.SettingsVal) bool {
  45. if settings.LocationConfidence <= 0 || settings.LastSeenThreshold <= 0 || settings.HASendInterval <= 0 {
  46. return false
  47. }
  48. return true
  49. }
  50. func SettingsListController(appstate *appcontext.AppState, ctx context.Context) http.HandlerFunc {
  51. return func(w http.ResponseWriter, r *http.Request) {
  52. }
  53. }