|
- package controller
-
- import (
- "context"
- "encoding/json"
- "log/slog"
- "net/http"
-
- "github.com/AFASystems/presence/internal/pkg/api/response"
- "github.com/AFASystems/presence/internal/pkg/kafkaclient"
- "github.com/AFASystems/presence/internal/pkg/model"
- "github.com/segmentio/kafka-go"
- "gorm.io/gorm"
- )
-
- func SettingsListController(db *gorm.DB, context context.Context) http.HandlerFunc {
- return func(w http.ResponseWriter, r *http.Request) {
- var settings []model.Settings
- if err := db.WithContext(context).Find(&settings).Error; err != nil {
- response.InternalError(w, "failed to list settings", err)
- return
- }
- response.JSON(w, http.StatusOK, settings)
- }
- }
-
- func SettingsUpdateController(db *gorm.DB, writer *kafka.Writer, context 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 {
- response.BadRequest(w, "invalid request body")
- return
- }
-
- slog.Info("updating settings", "updates", updates)
-
- if err := db.WithContext(context).Model(&model.Settings{}).Where("id = ?", 1).Updates(updates).Error; err != nil {
- response.InternalError(w, "failed to update settings", err)
- return
- }
-
- eMsg, err := json.Marshal(updates)
- if err != nil {
- response.InternalError(w, "failed to marshal settings for publish", err)
- return
- }
-
- kafkaMsg := kafka.Message{Value: eMsg}
- if err := kafkaclient.Write(context, writer, kafkaMsg); err != nil {
- slog.Error("error writing settings to Kafka", "error", err)
- response.InternalError(w, "failed to publish settings update", err)
- return
- }
-
- response.JSON(w, http.StatusOK, map[string]string{"status": "updated"})
- }
- }
|