defmodule Ami.Share do use Ecto.Schema import Ecto.{ Query, Changeset } alias Ami.{ # Post, User, Repo } schema "shares" do field(:shareable_id, :integer) field(:shareable_type, :string) field(:created_at, :utc_datetime) field(:updated_at, :utc_datetime) belongs_to(:user, User) end def preload_shares(struct, shareable_type) do struct |> Repo.preload( shares: from(s in __MODULE__, where: s.shareable_type == ^shareable_type, order_by: s.id) ) end def create_share(params) do %__MODULE__{} |> cast(params, [:shareable_type, :shareable_id, :user_id, :created_at, :updated_at]) |> Repo.insert() end end