Перейти к содержанию

Реализация персистентности чатов в 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).