summaryrefslogblamecommitdiff
path: root/lib/matrix_app_service_web/controllers/v1/transaction_controller.ex
blob: b6210ba74b0789ffc7577b21dc23d742f397587c (plain) (tree)
1
2
3
4
                                                         


                              























                                                                       
                                  



                                
                                                                               







                                         
                           




                         
                            

     










                                                
                                                                               













                                         
                            

     



                                                                                              



                                        
defmodule MatrixAppServiceWeb.V1.TransactionController do
  @moduledoc """
  Controller for transactions.
  """
  use MatrixAppServiceWeb, :controller

  # %{"access_token" => access_token,
  #   "events" => [
  #     %{"age" => 199,
  #       "content" => %{
  #         "body" => "test",
  #         "msgtype" => "m.room.message"},
  #       "event_id" => "$pMDN7TcsCapjLRYoITwryk0anpQGs60y2Eng3lxropc",
  #       "origin_server_ts" => 1588950428966,
  #       "room_id" => "!SrVtqmyqzuaMnfVImP:matrix.imago.local",
  #       "sender" => "@alice:matrix.imago.local",
  #       "type" => "m.room.message",
  #       "unsigned" => %{"age" => 199},
  #       "user_id" => "@alice:matrix.imago.local"}],
  #   "txn_id" => "269"}

  defp create_event(%{
         "age" => age,
         "content" => content,
         "event_id" => event_id,
         "origin_server_ts" => origin_server_ts,
         "room_id" => room_id,
         "sender" => sender,
         "state_key" => state_key,
         "type" => type,
         "unsigned" => unsigned,
         "user_id" => user_id
       }) do
    adapter = Application.fetch_env!(:matrix_app_service, :transaction_adapter)

    event = %MatrixAppService.Event{
      age: age,
      content: content,
      event_id: event_id,
      origin_server_ts: origin_server_ts,
      room_id: room_id,
      sender: sender,
      state_key: state_key,
      type: type,
      unsigned: unsigned,
      user_id: user_id
    }

    adapter.new_event(event)
  end

  defp create_event(%{
         "age" => age,
         "content" => content,
         "event_id" => event_id,
         "origin_server_ts" => origin_server_ts,
         "room_id" => room_id,
         "sender" => sender,
         "type" => type,
         "unsigned" => unsigned,
         "user_id" => user_id
       }) do
    adapter = Application.fetch_env!(:matrix_app_service, :transaction_adapter)

    event = %MatrixAppService.Event{
      age: age,
      content: content,
      event_id: event_id,
      origin_server_ts: origin_server_ts,
      room_id: room_id,
      sender: sender,
      state_key: nil,
      type: type,
      unsigned: unsigned,
      user_id: user_id
    }

    adapter.new_event(event)
  end

  @doc """
  https://matrix.org/docs/spec/application_service/r0.1.2#put-matrix-app-v1-transactions-txnid
  """
  def push(conn, %{"events" => events}) do
    Enum.each(events, &create_event(&1))
    send_resp(conn, 200, "{}")
  end
end