9.0 Chatting System ‐Volunteering Events - FatinaAlTaherr/HopeConnect GitHub Wiki

Overview

The Event Chat Messaging System enables real-time communication between volunteers participating in events. It combines RabbitMQ for message queuing with persistent storage for message history. The system ensures reliable message delivery and maintains conversation history for each event.

Models

Message

Represents a chat message in the system.

  • Attributes:
    • eventName: Associated event identifier
    • content: Message text content
    • sender: Username/identifier of message sender
    • timestamp: Implicit timestamp from RabbitMQ properties

Services

MessageStorageService

Handles persistent storage of chat messages.

  • Methods:
    • saveMessage(eventName, message): Stores message for specific event
    • getMessagesForEvent(eventName): Retrieves all messages for an event
    • clearMessagesForEvent(eventName): Deletes all messages for an event

RabbitMQJsonProducer

Handles message publishing to RabbitMQ (implementation not shown but referenced).

Controllers

MessageController

Manages chat message operations via REST API.

  • Endpoints:
    • POST /api/chat/publish: Publishes new message to event chat
      • Request Body: Message DTO
      • Validation: Checks for required fields and valid event
      • Process: Sends message to RabbitMQ queue
    • GET /api/chat/consume: Retrieves messages for specific event
      • Query Param: eventName
      • Security: VOLUNTEER role required
      • Process:
        1. Consumes messages from RabbitMQ queue
        2. Filters by event name
        3. Stores valid messages
        4. Returns all stored messages for event
    • DELETE /api/chat/{eventName}: Clears message history
      • Security: VOLUNTEER role required
      • Process: Removes all stored messages for specified event

Message Flow

  1. Publishing:

    • Client sends message via /publish endpoint
    • System validates message and event
    • Message published to RabbitMQ "eventQueue"
  2. Consumption:

    • Volunteer requests messages via /consume endpoint
    • System:
      • Retrieves messages from queue
      • Filters for current event
      • Stores relevant messages
      • Returns complete message history
    • Non-matching messages are requeued
  3. Storage:

    • Messages stored in-memory by event name
    • ConcurrentMap ensures thread safety
    • Separate lists maintained per event

Security Features

  • Role-based access control:
    • VOLUNTEER required for consumption/clearance
    • No restrictions on publishing (adjust per requirements)
  • Input validation for all messages
  • Error handling for queue operations

Error Handling

  • 400 Bad Request for:
    • Missing message fields
    • Invalid event references
  • 500 Server Error for:
    • RabbitMQ communication failures
    • Message conversion errors
  • Automatic message requeue on processing errors

Technical Details

  • RabbitMQ Configuration:
    • JSON message format
    • Manual acknowledgement mode
  • Storage:
    • In-memory ConcurrentMap storage
    • Thread-safe operations
    • Separate message lists per event
  • Performance:
    • Batch message consumption
    • Efficient filtering
    • Non-blocking operations

Example Payloads

Message Consume

image