Repository navigation
Doc Chat
src/Services/Chat/. Переписка клиента и менеджера внутри заявки, в реальном времени через SignalR. База travel_chat.
Клиент открывает свою заявку в личном кабинете:
- Фронтенд загружает историю:
GET /api/v1/chat/booking/{bookingId}/messages. - Открывает соединение SignalR с
/api/v1/chat/hubs/chatи вызываетJoinBookingGroup(bookingId). - Клиент пишет «Можно на неделю позже?», фронтенд вызывает
SendMessage(bookingId, text). - Сервер сохраняет сообщение и рассылает событие
MessageReceivedвсем в группеbooking_{bookingId}. Менеджер, у которого открыта та же заявка, видит сообщение сразу.
Каждый вызов (GET messages, JoinBookingGroup, SendMessage) спрашивает у Booking по gRPC ValidateBookingAccess(bookingId, userId). Доступ есть у клиента этой заявки и у любого Manager или Admin (роль Booking уточняет у Identity).
-
GET messagesбез доступа: 403. - В хабе без доступа:
HubException, сообщение не сохраняется. - Booking недоступен: ошибка gRPC считается отказом в доступе (403 или
HubException), в лог пишется предупреждение. Ответа 503 у Chat нет.
ChatMessage: Id, BookingId, SenderId, SenderName, SenderRole (Client, Manager, Admin, System), Text, Attachments (список строк, необязательно), CreatedAt. В JSON те же поля в camelCase.
Браузер не передаёт заголовок Authorization в WebSocket. Gateway берёт токен из cookie сессии и сам добавляет заголовок при проксировании, поэтому хаб видит обычного вошедшего пользователя. Подробно: Вход и сессия.
На фронтенде (src/api/chat.ts):
- адрес хаба
${origin}/api/v1/chat/hubs/chat, можно переопределитьVITE_CHAT_HUB_URL; -
withCredentials, автоматическое переподключение; - одно соединение на открытую заявку.
Redis используется только для проверки готовности (/health/ready), и только если задана строка ConnectionStrings__Redis. Backplane SignalR не настроен: при нескольких экземплярах Chat сообщения не дойдут до клиентов на другом экземпляре. Сейчас экземпляр один.
ConnectionStrings__ChatDb, ConnectionStrings__Redis, JwtSettings__*, GrpcSettings__InternalServiceToken, GrpcClients__BookingServiceUrl.
Система
API
Сервисы
Как реализовано
Справочное
- Видение продукта
- Дорожная карта
- Этап 1: что осталось
- Этап 2: расширение
- Этап 3: масштабирование
- Концепция сайта и интерфейса
- Шаблон ТЗ