66 lines
1.5 KiB
Go
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,
|
|
})
|
|
}
|