defmodule Ami.UnitLesson do use Ecto.Schema import Ecto.{ Query, Changeset } alias Ami.{ Repo, Unit, Lesson } schema "unit_lessons" do field(:position, :integer) belongs_to(:unit, Unit) belongs_to(:lesson, Lesson) end def changeset(struct, params \\ %{}) do struct |> cast(params, [:unit_id, :lesson_id, :position]) |> set_position end defp set_position(%Ecto.Changeset{params: %{"unit_id" => ""}} = changeset) do changeset end defp set_position(%Ecto.Changeset{params: %{}} = changeset) do changeset end defp set_position(changeset) do unit_id = changeset.params["unit_id"] last_unit_lesson = from(ul in __MODULE__,where: ul.unit_id == ^unit_id) |> last(:position) |> Repo.one() if last_unit_lesson do put_change(changeset, :position, last_unit_lesson.position + 1) else put_change(changeset, :position, 0) end end def update_position(unit_lesson_id, position) do Repo.get(__MODULE__, unit_lesson_id) |> change(%{position: position}) |> Repo.update() end end