-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
EventStore: persistence for events (#524)
* add migration and ecto schema for event_data * add protocol for events * save user_id in events * add missing commands
- Loading branch information
1 parent
a19f84d
commit 13aeaa1
Showing
17 changed files
with
309 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
defmodule Radiator.EventStore.EventData do | ||
@moduledoc """ | ||
EventData schema represents a persistend event. | ||
""" | ||
use Ecto.Schema | ||
import Ecto.Changeset | ||
|
||
alias Radiator.Accounts.User | ||
|
||
@primary_key {:uuid, :binary_id, autogenerate: false} | ||
schema "event_data" do | ||
field :data, :map, default: %{} | ||
field :event_type, :string | ||
|
||
belongs_to :user, User | ||
timestamps(type: :utc_datetime) | ||
end | ||
|
||
@doc false | ||
def changeset(event, attrs) do | ||
event | ||
|> cast(attrs, [:uuid, :event_type, :data, :user_id]) | ||
|> validate_required([:uuid, :event_type, :user_id]) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
defprotocol Radiator.Outline.Event.AbstractEvent do | ||
def payload(event) | ||
def event_type(event) | ||
end | ||
|
||
alias Radiator.Outline.Event.{NodeContentChangedEvent, NodeInsertedEvent} | ||
|
||
defimpl Radiator.Outline.Event.AbstractEvent, for: NodeInsertedEvent do | ||
def payload(event) do | ||
event.node | ||
end | ||
|
||
def event_type(_event), do: "NodeInsertedEvent" | ||
end | ||
|
||
defimpl Radiator.Outline.Event.AbstractEvent, for: NodeContentChangedEvent do | ||
def payload(event) do | ||
%{node_id: event.node_id, content: event.content} | ||
end | ||
|
||
def event_type(_event), do: "NodeInsertedEvent" | ||
end | ||
|
||
defimpl Radiator.Outline.Event.AbstractEvent, for: NodeDeletedEvent do | ||
def payload(event) do | ||
event.node_id | ||
end | ||
|
||
def event_type(_event), do: "NodeDeletedEvent" | ||
end | ||
|
||
defimpl Radiator.Outline.Event.AbstractEvent, for: NodeMovedEvent do | ||
def payload(event) do | ||
%{node_id: event.node_id, parent_id: event.parent_id, prev_id: event.prev_id} | ||
end | ||
|
||
def event_type(_event), do: "NodeInsertedEvent" | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
defmodule Radiator.Outline.Event.NodeContentChangedEvent do | ||
@moduledoc false | ||
|
||
defstruct [:event_id, :node] | ||
defstruct [:event_id, :node_id, :content, :user_id] | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
defmodule Radiator.Outline.Event.NodeDeletedEvent do | ||
@moduledoc false | ||
defstruct [:event_id, :node_id, :user_id] | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
defmodule Radiator.Outline.Event.NodeInsertedEvent do | ||
@moduledoc false | ||
|
||
defstruct [:event_id, :node] | ||
defstruct [:event_id, :node, :user_id] | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
defmodule Radiator.Outline.Event.NodeMovedEvent do | ||
@moduledoc false | ||
defstruct [:event_id, :node_id, :parent_id, :prev_id, :user_id] | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
defmodule Radiator.Repo.Migrations.CreateEventData do | ||
use Ecto.Migration | ||
|
||
def change do | ||
create table(:event_data, primary_key: false) do | ||
add :uuid, :uuid, primary_key: true | ||
add :event_type, :string | ||
add :user_id, references(:users, on_delete: :nothing) | ||
add :data, :map, default: %{} | ||
|
||
timestamps(type: :utc_datetime) | ||
end | ||
|
||
create index(:event_data, [:user_id]) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
defmodule Radiator.EventStoreTest do | ||
use Radiator.DataCase | ||
|
||
alias Radiator.EventStore | ||
|
||
describe "event_data" do | ||
alias Radiator.EventStore.EventData | ||
|
||
alias Radiator.AccountsFixtures | ||
import Radiator.EventStoreFixtures | ||
|
||
@invalid_attrs %{data: nil, uuid: nil, event_type: nil} | ||
|
||
test "list_event_data/0 returns all event_data" do | ||
event = event_data_fixture() | ||
assert EventStore.list_event_data() == [event] | ||
end | ||
|
||
test "get_event!/1 returns the event_data with given id" do | ||
event = event_data_fixture() | ||
assert EventStore.get_event_data!(event.uuid) == event | ||
end | ||
|
||
test "create_event/1 with valid data creates a event" do | ||
user = AccountsFixtures.user_fixture() | ||
|
||
valid_attrs = %{ | ||
data: %{}, | ||
uuid: Ecto.UUID.generate(), | ||
event_type: "some event_type", | ||
user_id: user.id | ||
} | ||
|
||
assert {:ok, %EventData{} = event} = EventStore.create_event_data(valid_attrs) | ||
assert event.data == %{} | ||
assert event.uuid == valid_attrs.uuid | ||
assert event.event_type == valid_attrs.event_type | ||
assert event.user_id == valid_attrs.user_id | ||
end | ||
|
||
test "create_event/1 with invalid data returns error changeset" do | ||
assert {:error, %Ecto.Changeset{}} = EventStore.create_event_data(@invalid_attrs) | ||
end | ||
end | ||
end |
Oops, something went wrong.