Add forward extremities to rooms

This commit is contained in:
Pim Kunis 2021-07-25 14:57:52 +02:00
parent 937204b73a
commit 8a5bba72fb
5 changed files with 78 additions and 37 deletions

View file

@ -2,13 +2,15 @@ defmodule MatrixServer.Room do
use Ecto.Schema
import Ecto.Changeset
import Ecto.Query
alias MatrixServer.{Room, Event}
alias MatrixServer.{Repo, Room, Event}
alias MatrixServerWeb.API.CreateRoom
@primary_key {:id, :string, []}
schema "rooms" do
field :visibility, Ecto.Enum, values: [:public, :private]
field :forward_extremities, {:array, :string}
has_many :events, Event, foreign_key: :event_id
end
@ -27,4 +29,23 @@ defmodule MatrixServer.Room do
def generate_room_id do
"!" <> MatrixServer.random_string(18) <> "@" <> MatrixServer.server_name()
end
def update_forward_extremities(%Event{
event_id: event_id,
prev_events: prev_event_ids,
room_id: room_id
}) do
%Room{forward_extremities: forward_extremities} =
Room
|> where([r], r.id == ^room_id)
|> Repo.one!()
new_forward_extremities = [event_id | forward_extremities -- prev_event_ids]
{_, [room | _]} =
from(r in Room, where: r.id == ^room_id, select: r)
|> Repo.update_all(set: [forward_extremities: new_forward_extremities])
room
end
end