feat(messages): счётчики упоминаний, квота приглашений и read state автора

- упоминания в сообщении увеличивают счётчик упоминаний комнаты у упомянутых
  (store.BumpMentionCount) и отправляют им READ_STATE_UPDATE на все устройства;
- отправка сообщения отмечает его прочитанным для автора;
- подтверждение прочтения сбрасывает упоминания;
- суточная квота 10 приглашений на пользователя (AGENT.md 8.6), администратор
  инстанса её обходит; httpx.NewRateLimiterWindow для произвольных окон;
- тест на рост и сброс счётчика упоминаний.
This commit is contained in:
2026-09-19 23:37:02 +03:00
parent 0e39b8e027
commit 8619f37cd5
15 changed files with 186 additions and 6 deletions
+6
View File
@@ -93,6 +93,12 @@ func (s *Server) registerInviteRoutes(api huma.API) {
if err != nil {
return nil, err
}
// Суточная квота: 10 приглашений на пользователя (AGENT.md 8.6).
if !user.IsInstanceAdmin {
if allowed, retryAfter := s.inviteLimiter.Allow("invite:" + formatSnowflake(user.ID)); !allowed {
return nil, rateLimitedError(retryAfter)
}
}
code, err := newInviteCode()
if err != nil {
return nil, humaErrorStatus(http.StatusInternalServerError, "internal.error", "cannot generate invite code")