Реализация персистентности чатов в Rust¶
Дата: 2026-03-13 Автор: Trae AI Agent Статус: Выполнено
Описание¶
Завершена реализация WebSocket-чатов в Rust-сервисе с полной поддержкой базы данных. Теперь сообщения не только транслируются в реальном времени, но и сохраняются в PostgreSQL, обеспечивая полную идемпотентность с Python-бэкендом.
Внесенные изменения¶
1. Слой данных (src/db/chat.rs)¶
Реализованы функции для работы с БД:
- check_chat_access: Проверяет права доступа пользователя к чату (поддерживает как P2P, так и групповые чаты через таблицу chat_participants).
- save_message: Сохраняет сообщение в таблицу chat_messages и обновляет updated_at у сессии.
- mark_message_read: Отмечает конкретное сообщение как прочитанное.
2. WebSocket Handler (src/handlers/ws.rs)¶
Обновлена логика обработки сообщений:
- При подключении: Выполняется проверка доступа через check_chat_access. Если доступ запрещен — соединение закрывается (403).
- При получении сообщения:
- Сообщение сохраняется в БД через save_message.
- При успешном сохранении — рассылается всем участникам через ChatRooms.
- При прочтении:
- Вызывается mark_message_read.
- Отправляется уведомление о прочтении (read) всем участникам.
3. Исправление ошибок компиляции¶
Попутно устранены ошибки в других модулях для обеспечения успешной сборки проекта:
- handlers/tour.rs: Исправлено приведение типов (i64 vs i32).
- handlers/restaurant.rs: Убраны неиспользуемые импорты и исправлена логика проверки существования.
- handlers/event.rs: Исправлен макрос sqlx на рантайм-версию для совместимости.
- Cargo.toml: Добавлены features uuid и chrono для utoipa.
Результат¶
Сервис api-rust успешно компилируется и готов к работе с чатами.
- Путь: /rust/v1/ws/chats/{session_id}
- Авторизация: Authorization: Bearer ...
- Персистентность: Полная (Postgres).