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 identifiercontent
: Message text contentsender
: Username/identifier of message sendertimestamp
: Implicit timestamp from RabbitMQ properties
Services
MessageStorageService
Handles persistent storage of chat messages.
- Methods:
saveMessage(eventName, message)
: Stores message for specific eventgetMessagesForEvent(eventName)
: Retrieves all messages for an eventclearMessagesForEvent(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
- Request Body:
GET /api/chat/consume
: Retrieves messages for specific event- Query Param:
eventName
- Security: VOLUNTEER role required
- Process:
- Consumes messages from RabbitMQ queue
- Filters by event name
- Stores valid messages
- Returns all stored messages for event
- Query Param:
DELETE /api/chat/{eventName}
: Clears message history- Security: VOLUNTEER role required
- Process: Removes all stored messages for specified event
Message Flow
-
Publishing:
- Client sends message via
/publish
endpoint - System validates message and event
- Message published to RabbitMQ "eventQueue"
- Client sends message via
-
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
- Volunteer requests messages via
-
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