Class: ActiveMatrix::ChatSession

Inherits:
ApplicationRecord show all
Defined in:
app/models/active_matrix/chat_session.rb

Constant Summary collapse

MAX_HISTORY_SIZE =

Configuration

20

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.cleanup_stale!Object



72
73
74
# File 'app/models/active_matrix/chat_session.rb', line 72

def self.cleanup_stale!
  stale.destroy_all
end

Instance Method Details

#add_message(message_data) ⇒ Object

Add a message to the history



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'app/models/active_matrix/chat_session.rb', line 22

def add_message(message_data)
  messages = message_history['messages'] || []

  # Add new message
  messages << {
    'event_id' => message_data[:event_id],
    'sender' => message_data[:sender],
    'content' => message_data[:content],
    'timestamp' => message_data[:timestamp] || Time.current.to_i
  }

  # Keep only recent messages
  messages = messages.last(MAX_HISTORY_SIZE)

  # Update record
  self.message_history = { 'messages' => messages }
  self.last_message_at = Time.current
  self.message_count = messages.size
  save!

  # Update cache
  write_to_cache
end

#cache_keyObject

Cache integration



60
61
62
# File 'app/models/active_matrix/chat_session.rb', line 60

def cache_key
  "conversation/#{agent_id}/#{user_id}/#{room_id}"
end

#prune_history!Object

Clear old messages but keep context



53
54
55
56
57
# File 'app/models/active_matrix/chat_session.rb', line 53

def prune_history!
  messages = message_history['messages'] || []
  self.message_history = { 'messages' => messages.last(5) }
  save!
end

#recent_messages(limit = 10) ⇒ Object

Get recent messages



47
48
49
50
# File 'app/models/active_matrix/chat_session.rb', line 47

def recent_messages(limit = 10)
  messages = message_history['messages'] || []
  messages.last(limit)
end

#write_to_cacheObject



64
65
66
67
68
69
70
# File 'app/models/active_matrix/chat_session.rb', line 64

def write_to_cache
  Rails.cache.write(cache_key, {
                      context: context,
                      recent_messages: recent_messages,
                      last_message_at: last_message_at
                    }, expires_in: 1.hour)
end