defmodule Ami.Tag do use Ecto.Schema import Ecto.{ Query, Changeset } alias Ami.{ Repo, Course, Lesson } schema "tags" do field(:name, :string) timestamps() many_to_many(:lessons, Lesson, join_through: "lessons_tags") end def find_or_build_tag(tag_name) do case Repo.get_by(__MODULE__, name: tag_name) do tag = %__MODULE__{} -> tag nil -> %__MODULE__{name: tag_name} end end def changeset(struct, params \\ %{}) do struct |> cast(params, [:name]) |> validate_required([:name]) |> unique_constraint(:name) end end