defmodule Ami.Score do use Ecto.Schema import Ecto.Changeset alias Ami.{ Enrollment, Course, CoursePeriod, Quiz, User, Repo } schema "scores" do field(:value, :integer) field(:answers_correct, :integer) field(:total_questions, :integer) field(:results, :string) field(:created_at, :utc_datetime) field(:updated_at, :utc_datetime) belongs_to(:quiz, Quiz) belongs_to(:user, User) belongs_to(:enrollment, Enrollment) belongs_to(:course, Course) belongs_to(:course_period, CoursePeriod) end def find(quiz_id, enrollment_id), do: Repo.get_by(__MODULE__, quiz_id: quiz_id, enrollment_id: enrollment_id) def insert_changeset(struct, params) do struct |> cast( %{ value: params[:value], answers_correct: params[:answers_correct], total_questions: params[:total_questions] }, [:value, :answers_correct, :total_questions] ) |> cast(%{created_at: DateTime.utc_now(), updated_at: DateTime.utc_now()}, [ :created_at, :updated_at ]) |> cast( %{ quiz_id: params[:quiz_id], user_id: params[:user_id], enrollment_id: params[:enrollment_id] }, [:quiz_id, :user_id, :enrollment_id] ) |> cast(%{course_id: params[:course_id], course_period_id: params[:course_period_id]}, [ :course_id, :course_period_id ]) end def update_changeset(struct, params) do struct |> cast( %{ value: params[:value], answers_correct: params[:answers_correct], total_questions: params[:total_questions] }, [:value, :answers_correct, :total_questions] ) |> cast(%{updated_at: DateTime.utc_now()}, [:updated_at]) end end