diff options
Diffstat (limited to 'lib/db/schema.ex')
| -rw-r--r-- | lib/db/schema.ex | 55 |
1 files changed, 46 insertions, 9 deletions
diff --git a/lib/db/schema.ex b/lib/db/schema.ex index 860fc15..ec6f4e5 100644 --- a/lib/db/schema.ex +++ b/lib/db/schema.ex @@ -1,5 +1,6 @@ defmodule Thulani.Schema do alias Thulani.Schema + import Ecto.Changeset defmodule Meme do use Ecto.Schema @@ -10,10 +11,24 @@ defmodule Thulani.Schema do field(:title, :string) field(:content, :string) - has_one(:image, Image) - has_one(:audio, Audio) + belongs_to(:image, Schema.Image) + belongs_to(:audio, Schema.Audio) - belongs_to(:metadata, Metadata) + belongs_to(:metadata, Schema.Metadata) + end + + def insert_changeset(params \\ %{}) do + changeset(%Meme{}, params) + end + + def changeset(meme, params \\ %{}) do + meme + |> cast(params, [:title, :content, :image_id, :audio_id]) + |> validate_required([:title]) + |> cast_assoc(:image) + |> cast_assoc(:audio) + |> cast_assoc(:metadata, required: true) + |> unique_constraint(:title, name: :text_memes_title_key) end end @@ -23,7 +38,7 @@ defmodule Thulani.Schema do schema "invocation_records" do field(:user_id, :integer) field(:message_id, :integer) - field(:time, :utc_datetime) + field(:time, :utc_datetime_usec) field(:random, :boolean) belongs_to(:meme, Schema.Meme) @@ -38,9 +53,15 @@ defmodule Thulani.Schema do has_one(:audio, Schema.Audio) has_one(:image, Schema.Image) - field(:created, :utc_datetime) + field(:created, :utc_datetime_usec) field(:created_by, :integer) end + + def changeset(meta, params \\ %{}) do + meta + |> cast(params, [:created, :created_by]) + |> validate_required([:created, :created_by]) + end end defmodule Audio do @@ -48,11 +69,19 @@ defmodule Thulani.Schema do schema "audio" do belongs_to(:metadata, Schema.Metadata) - belongs_to(:meme, Schema.Meme) + has_many(:memes, Schema.Meme) field(:data, :binary) field(:data_hash, :binary) end + + def changeset(image, params \\ %{}) do + image + |> cast(params, [:data, :data_hash]) + |> cast_assoc(:metadata, required: true) + |> validate_required([:data, :data_hash]) + |> unique_constraint(:data_hash, name: :image_hash) + end end defmodule Image do @@ -60,12 +89,20 @@ defmodule Thulani.Schema do schema "images" do belongs_to(:metadata, Schema.Metadata) - belongs_to(:meme, Schema.Meme) + has_many(:memes, Schema.Meme) field(:data, :binary) field(:data_hash, :binary) field(:filename, :string) end + + def changeset(image, params \\ %{}) do + image + |> cast(params, [:data, :data_hash, :filename]) + |> cast_assoc(:metadata, required: true) + |> validate_required([:data, :data_hash, :filename]) + |> unique_constraint(:data_hash, name: :image_hash) + end end defmodule Tombstone do @@ -75,9 +112,9 @@ defmodule Thulani.Schema do field(:meme_id, :integer) field(:deleted_by, :integer) - field(:deleted_at, :utc_datetime) + field(:deleted_at, :utc_datetime_usec) - has_one(:metadata, Schema.Metadata) + belongs_to(:metadata, Schema.Metadata) end end end |
