teg/backend/chat_preferences.go
2026-06-13 10:15:57 +02:00

66 lines
1.5 KiB
Go

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,
})
}