defmodule Ami.DownloadedResource do use Ecto.Schema import Ecto.{ Query, Changeset } alias Ami.{ Resource, User, CoursePeriod # Repo } schema "downloaded_resources" do field(:created_at, :utc_datetime) field(:updated_at, :utc_datetime) belongs_to(:user, User) belongs_to(:course_period, CoursePeriod) belongs_to(:resource, Resource) end def exists_for?(resource, user, course_period) do Ami.Repo.one( from( d in Ami.DownloadedResource, where: d.resource_id == ^resource.id, where: d.user_id == ^user.id, where: d.course_period_id == ^course_period.id, select: count(d.id) ) ) > 0 end def changeset(downloaded_resource, params \\ %{}) do downloaded_resource |> cast(params, [ :resource_id, :user_id, :course_period_id, :created_at, :updated_at ]) |> validate_required([:resource_id, :user_id, :course_period_id]) |> unique_constraint( :resource_id, name: :downloaded_resources_resource_id_user_id_course_period_id_index ) end end