package tenantsettings import ( "encoding/json" "net/http" ) // Handler stellt Lesen/Schreiben der Tenant-Einstellungen als schlanke // Vorbereitung der Schnittstelle bereit (API-01/TEN-05 sind nicht Teil // dieser Kachel). tenantID wird hier als Pfad-/Query-Parameter erwartet, // eine echte Auth-/Berechtigungspruefung kommt erst mit IAM-02/RBAC-01. type Handler struct { store *Store } func NewHandler(store *Store) *Handler { return &Handler{store: store} } func (h *Handler) Get(w http.ResponseWriter, r *http.Request) { tenantID := r.URL.Query().Get("tenant_id") if tenantID == "" { http.Error(w, "tenant_id fehlt", http.StatusBadRequest) return } settings, err := h.store.Get(r.Context(), tenantID) if err != nil { http.Error(w, "einstellungen konnten nicht geladen werden", http.StatusInternalServerError) return } writeJSON(w, http.StatusOK, settings) } type updateRequest struct { DisplayName *string `json:"display_name"` LogoURL *string `json:"logo_url"` ColorScheme *string `json:"color_scheme"` Timezone *string `json:"timezone"` Language *string `json:"language"` } func (h *Handler) Update(w http.ResponseWriter, r *http.Request) { tenantID := r.URL.Query().Get("tenant_id") if tenantID == "" { http.Error(w, "tenant_id fehlt", http.StatusBadRequest) return } var req updateRequest if err := json.NewDecoder(r.Body).Decode(&req); err != nil { http.Error(w, "ungueltige Anfrage", http.StatusBadRequest) return } settings, err := h.store.Update(r.Context(), tenantID, Patch{ DisplayName: req.DisplayName, LogoURL: req.LogoURL, ColorScheme: req.ColorScheme, Timezone: req.Timezone, Language: req.Language, }) if err != nil { http.Error(w, "einstellungen konnten nicht gespeichert werden", http.StatusInternalServerError) return } writeJSON(w, http.StatusOK, settings) } func writeJSON(w http.ResponseWriter, status int, v any) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(status) _ = json.NewEncoder(w).Encode(v) }