Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

57 строки
1.6 KiB

  1. package controller
  2. import (
  3. "context"
  4. "encoding/json"
  5. "log/slog"
  6. "net/http"
  7. "github.com/AFASystems/presence/internal/pkg/api/response"
  8. "github.com/AFASystems/presence/internal/pkg/model"
  9. "github.com/segmentio/kafka-go"
  10. "gorm.io/gorm"
  11. )
  12. func SettingsListController(db *gorm.DB, context context.Context) http.HandlerFunc {
  13. return func(w http.ResponseWriter, r *http.Request) {
  14. var settings []model.Settings
  15. if err := db.WithContext(context).Find(&settings).Error; err != nil {
  16. response.InternalError(w, "failed to list settings", err)
  17. return
  18. }
  19. response.JSON(w, http.StatusOK, settings)
  20. }
  21. }
  22. func SettingsUpdateController(db *gorm.DB, writer *kafka.Writer, context context.Context) http.HandlerFunc {
  23. return func(w http.ResponseWriter, r *http.Request) {
  24. var updates map[string]any
  25. if err := json.NewDecoder(r.Body).Decode(&updates); err != nil {
  26. response.BadRequest(w, "invalid request body")
  27. return
  28. }
  29. slog.Info("updating settings", "updates", updates)
  30. if err := db.WithContext(context).Model(&model.Settings{}).Where("id = ?", 1).Updates(updates).Error; err != nil {
  31. response.InternalError(w, "failed to update settings", err)
  32. return
  33. }
  34. eMsg, err := json.Marshal(updates)
  35. if err != nil {
  36. response.InternalError(w, "failed to marshal settings for publish", err)
  37. return
  38. }
  39. kafkaMsg := kafka.Message{Value: eMsg}
  40. if err := writer.WriteMessages(context, kafkaMsg); err != nil {
  41. slog.Error("writing settings to Kafka", "err", err)
  42. response.InternalError(w, "failed to publish settings update", err)
  43. return
  44. }
  45. response.JSON(w, http.StatusOK, map[string]string{"status": "updated"})
  46. }
  47. }