Class: Rubino::API::Operations::Sessions::UndoOperation

Inherits:
Object
  • Object
show all
Defined in:
lib/rubino/api/operations/sessions/undo_operation.rb

Overview

POST /v1/sessions/:id/undo Removes the last user message and everything after it (no re-run). Returns the number of messages deleted.

Raises:

Instance Method Summary collapse

Constructor Details

#initialize(session_repository: nil, message_store: nil) ⇒ UndoOperation

Accepts an alternate session repository and message store for tests.



15
16
17
18
# File 'lib/rubino/api/operations/sessions/undo_operation.rb', line 15

def initialize(session_repository: nil, message_store: nil)
  @session_repo = session_repository || ::Rubino::Session::Repository.new
  @message_store = message_store || ::Rubino::Session::Store.new
end

Instance Method Details

#call(request) ⇒ Object

Raises:



20
21
22
23
24
25
26
27
28
29
# File 'lib/rubino/api/operations/sessions/undo_operation.rb', line 20

def call(request)
  session_id = request.params.fetch("id")
  raise NotFoundError.new("session", session_id) unless @session_repo.find(session_id)

  last_user = @message_store.last_for_role(session_id, "user")
  raise ConflictError, "nothing to undo" unless last_user

  removed = @message_store.delete_from_inclusive(session_id, from_id: last_user.id)
  [200, { removed_messages: removed }]
end