Save state set in database

This commit is contained in:
Pim Kunis 2021-07-25 17:39:22 +02:00
parent 8a5bba72fb
commit d3c16dd7aa
3 changed files with 48 additions and 15 deletions

View file

@ -1,7 +1,9 @@
defmodule MatrixServer.StateResolution do
import Ecto.Query
alias MatrixServer.{Repo, Event}
alias MatrixServer.{Repo, Event, Room}
def resolve(event), do: resolve(event, true)
def resolve(%Event{room_id: room_id} = event, apply_state) do
room_events =
@ -322,6 +324,23 @@ defmodule MatrixServer.StateResolution do
is_authorized(event, state_set)
end
def resolve_forward_extremities(%Event{room_id: room_id}) do
room_events =
Event
|> where([e], e.room_id == ^room_id)
|> select([e], {e.event_id, e})
|> Repo.all()
|> Enum.into(%{})
Event
|> where([e], e.room_id == ^room_id)
|> join(:inner, [e], r in Room, on: e.room_id == r.id)
|> where([e, r], e.event_id == fragment("ANY(?)", r.forward_extremities))
|> Repo.all()
|> Enum.map(&resolve/1)
|> do_resolve(room_events)
end
def testing do
%Event{content: content} = event = Event.power_levels("room1", "charlie")
event = %Event{event | content: %{content | "ban" => 0}}