package controller import ( "context" "encoding/json" "fmt" "log/slog" "net/http" "github.com/AFASystems/presence/internal/pkg/model" "github.com/segmentio/kafka-go" "gorm.io/gorm" ) func SettingsListController(db *gorm.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var settings []model.Settings db.Find(&settings) res, err := json.Marshal(settings) if err != nil { http.Error(w, err.Error(), 400) return } w.Write(res) } } func SettingsUpdateController(db *gorm.DB, writer *kafka.Writer, ctx context.Context) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var updates map[string]any if err := json.NewDecoder(r.Body).Decode(&updates); err != nil { http.Error(w, "Invalid JSON", 400) return } inMsg := fmt.Sprintf("updates: %+v", updates) slog.Info(inMsg) if err := db.Model(&model.Settings{}).Where("id = ?", 1).Updates(updates).Error; err != nil { msg := fmt.Sprintf("Error in updating settings: %v", err) slog.Error(msg) http.Error(w, err.Error(), 500) return } eMsg, err := json.Marshal(updates) if err != nil { http.Error(w, "Error in marshaling settings updates", 400) msg := fmt.Sprintf("Error in marshaling settings updates: %v", err) slog.Error(msg) return } msg := kafka.Message{ Value: eMsg, } if err := writer.WriteMessages(ctx, msg); err != nil { slog.Error("writing settings to Kafka", "err", err) http.Error(w, "Failed to publish settings update", 500) return } w.Header().Set("Content-Type", "application/json") w.Write([]byte(`{"status":"Settings updated"}`)) } }