fix(realtime): объединение частых синхронизаций и лог неожиданных ошибок

- клиент откладывает перечитывание комнат (окно 250 мс) и не запускает второй
  запрос, пока идёт первый: серия событий ролей и участников больше не даёт
  лавину GET members/roles и 429 на лимите API;
- неожиданные ошибки API пишутся в лог (и в chi-, и в huma-ветке): под
  параллельной нагрузкой на стенде видели разовые 500 на GET members/roles,
  но без текста ошибки разобраться было нельзя.
This commit is contained in:
2026-09-22 20:58:49 +03:00
parent 63466fb75b
commit e4bbc27a7c
4 changed files with 48 additions and 4 deletions
+4
View File
@@ -3,6 +3,7 @@ package server
import (
"encoding/json"
"errors"
"log/slog"
"net/http"
"glchat/internal/auth"
@@ -74,6 +75,9 @@ func newAPIError(err error) apiError {
func writeAPIError(w http.ResponseWriter, err error) {
apiErr := newAPIError(err)
if apiErr.Status >= http.StatusInternalServerError {
// Неожиданную ошибку пишем в лог: клиент видит «internal error», а
// разобраться без текста ошибки невозможно (AGENT.md 9.4).
slog.Error("unexpected API error", slog.String("code", apiErr.Code), slog.Any("error", err))
apiErr.Message = "internal error"
}
httpx.WriteJSON(w, apiErr.Status, map[string]any{