package main import ( "net/http" "strings" ) type updateConversationMuteRequest struct { Muted bool `json:"muted"` } func (s *Server) handleUpdateConversationMute(w http.ResponseWriter, r *http.Request) { user, ok := userFromContext(r.Context()) if !ok { writeError(w, http.StatusUnauthorized, "Unauthorized") return } conversationID := strings.TrimSpace(r.PathValue("id")) if !s.canAccessConversation(r.Context(), conversationID, user.ID) { writeError(w, http.StatusForbidden, "Kein Zugriff auf diesen Chat") return } var conversationType string if err := s.db.QueryRow( r.Context(), `SELECT type FROM conversations WHERE id = $1`, conversationID, ).Scan(&conversationType); err != nil { writeError(w, http.StatusNotFound, "Chat wurde nicht gefunden") return } if conversationType == "direct" { writeError(w, http.StatusBadRequest, "Einzelchats können nicht stummgeschaltet werden") return } var input updateConversationMuteRequest if err := readJSON(r, &input); err != nil { writeError(w, http.StatusBadRequest, "Ungültige Anfrage") return } _, err := s.db.Exec( r.Context(), ` INSERT INTO conversation_members (conversation_id, user_id, muted) VALUES ($1, $2, $3) ON CONFLICT (conversation_id, user_id) DO UPDATE SET muted = EXCLUDED.muted `, conversationID, user.ID, input.Muted, ) if err != nil { writeError(w, http.StatusInternalServerError, "Stummschaltung konnte nicht gespeichert werden") return } writeJSON(w, http.StatusOK, map[string]any{ "muted": input.Muted, }) }