Skip to content

Current State Chat

plutogr edited this page May 23, 2026 · 2 revisions

Chat

Обновлено: 2026-05-23

Назначение

Chat сервис предоставляет:

  • REST-историю сообщений по заявке
  • SignalR realtime чат по заявке
  • проверку доступа к заявке через Booking gRPC

Структура проекта

  • TravelAgency.Chat.API
  • TravelAgency.Chat.Application
  • TravelAgency.Chat.Domain
  • TravelAgency.Chat.Infrastructure
  • TravelAgency.Chat.UnitTests
  • TravelAgency.Chat.IntegrationTests

REST API

Service route prefix: /chat
Public route via Gateway: /api/v1/chat

Method Service route Public route Auth Response
GET /chat/booking/{bookingId}/messages /api/v1/chat/booking/{bookingId}/messages RequireAuthenticated IReadOnlyList<ChatMessageDto>

SignalR API

Hub route (service): /hubs/chat
Hub auth policy: RequireAuthenticated

Hub methods

Method Params Behavior
JoinBookingGroup bookingId: Guid проверяет доступ (Booking gRPC) и добавляет соединение в группу booking_{bookingId}
SendMessage bookingId: Guid, text: string, attachments?: IReadOnlyList<string> проверяет доступ, сохраняет сообщение, шлёт MessageReceived в группу

Hub event

Event Payload
MessageReceived ChatMessageDto

DTO и доменные объекты

ChatMessageDto

id, bookingId, senderId, senderName, senderRole, text, attachments?, createdAt

ChatMessage (domain)

Id, BookingId, SenderId, SenderName, SenderRole, Text, Attachments, CreatedAt

SenderRole

  • Client
  • Manager
  • Admin
  • System

Внутренние контракты (gRPC)

Chat вызывает Booking RPC:

  • ValidateBookingAccess(booking_id, user_id) -> has_access

Используется:

  • в REST query на чтение сообщений
  • в SignalR методах JoinBookingGroup и SendMessage

Конфигурация

Критичные параметры:

  • ConnectionStrings__ChatDb
  • ConnectionStrings__Redis (optional)
  • GrpcClients__BookingServiceUrl
  • GrpcSettings__InternalServiceToken
  • JwtSettings__SigningKey, JwtSettings__Issuer, JwtSettings__Audience

Health

Method Route Notes
GET /health/live liveness
GET /health/ready db + optional redis

Интеграционный нюанс

Frontend hub URL и gateway transform path должны быть синхронизированы для корректного realtime-трафика.

Clone this wiki locally