summaryrefslogtreecommitdiff
path: root/lib/matrix_app_service/event.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/matrix_app_service/event.ex')
-rw-r--r--lib/matrix_app_service/event.ex73
1 files changed, 51 insertions, 22 deletions
diff --git a/lib/matrix_app_service/event.ex b/lib/matrix_app_service/event.ex
index 23abc38..bf37aba 100644
--- a/lib/matrix_app_service/event.ex
+++ b/lib/matrix_app_service/event.ex
@@ -2,28 +2,57 @@ defmodule MatrixAppService.Event do
@moduledoc """
Struct for a Matrix event.
"""
+ use Ecto.Schema
+ import Ecto.Changeset
- @type t :: %__MODULE__{
- age: integer(),
- content: map(),
- event_id: String.t(),
- origin_server_ts: integer(),
- room_id: String.t(),
- sender: String.t(),
- state_key: String.t(),
- type: String.t(),
- unsigned: map(),
- user_id: String.t()
- }
+ # @type t :: %__MODULE__{
+ # age: integer(),
+ # content: map(),
+ # event_id: String.t(),
+ # origin_server_ts: integer(),
+ # room_id: String.t(),
+ # sender: String.t(),
+ # state_key: String.t(),
+ # type: String.t(),
+ # unsigned: map(),
+ # user_id: String.t()
+ # }
- defstruct age: nil,
- content: %{},
- event_id: nil,
- origin_server_ts: nil,
- room_id: nil,
- sender: nil,
- state_key: "",
- type: nil,
- unsigned: %{},
- user_id: nil
+ # defstruct age: nil,
+ # content: %{},
+ # event_id: nil,
+ # origin_server_ts: nil,
+ # room_id: nil,
+ # sender: nil,
+ # state_key: "",
+ # type: nil,
+ # unsigned: %{},
+ # user_id: nil
+
+ embedded_schema do
+ field :age, :integer
+ field :content, :map
+ field :event_id, :string
+ field :origin_server_ts, :integer
+ field :room_id, :string
+ field :sender, :string
+ field :state_key, :string
+ field :type, :string
+ field :unsigned, :map
+ field :user_id, :string
+ end
+
+ def new(params) do
+ command = changeset(params)
+ case command.valid? do
+ true -> {:ok, apply_changes(command)}
+ false -> {:error, command.errors}
+ end
+ end
+
+ defp changeset(params) do
+ %__MODULE__{}
+ |> cast(params, [:age, :content, :event_id, :origin_server_ts, :room_id, :sender, :state_key, :type, :unsigned, :user_id])
+ |> validate_required([:content, :event_id, :origin_server_ts, :room_id, :sender, :type, :unsigned])
+ end
end