mirror of
https://github.com/ClaperCo/Claper.git
synced 2025-12-16 03:47:56 +01:00
69 lines
1.9 KiB
Elixir
69 lines
1.9 KiB
Elixir
defmodule Claper.Quizzes.Quiz do
|
|
use Ecto.Schema
|
|
import Ecto.Changeset
|
|
|
|
@type t :: %__MODULE__{
|
|
id: integer(),
|
|
title: String.t(),
|
|
position: integer() | nil,
|
|
enabled: boolean(),
|
|
show_results: boolean(),
|
|
allow_anonymous: boolean(),
|
|
lti_line_item_url: String.t() | nil,
|
|
lti_resource: Lti13.Resources.Resource.t() | nil,
|
|
quiz_responses: [Claper.Quizzes.QuizResponse.t()] | nil,
|
|
quiz_questions: [Claper.Quizzes.QuizQuestion.t()] | nil,
|
|
presentation_file: Claper.Presentations.PresentationFile.t(),
|
|
inserted_at: NaiveDateTime.t(),
|
|
updated_at: NaiveDateTime.t()
|
|
}
|
|
|
|
schema "quizzes" do
|
|
field :title, :string
|
|
field :position, :integer, default: 0
|
|
field :enabled, :boolean, default: false
|
|
field :show_results, :boolean, default: true
|
|
field :allow_anonymous, :boolean, default: false
|
|
field :lti_line_item_url, :string
|
|
|
|
belongs_to :presentation_file, Claper.Presentations.PresentationFile
|
|
belongs_to :lti_resource, Lti13.Resources.Resource
|
|
|
|
has_many :quiz_questions, Claper.Quizzes.QuizQuestion,
|
|
preload_order: [asc: :id],
|
|
on_replace: :delete
|
|
|
|
has_many :quiz_responses, Claper.Quizzes.QuizResponse
|
|
|
|
timestamps()
|
|
end
|
|
|
|
@doc false
|
|
def changeset(quiz, attrs) do
|
|
quiz
|
|
|> cast(attrs, [
|
|
:title,
|
|
:position,
|
|
:presentation_file_id,
|
|
:enabled,
|
|
:show_results,
|
|
:allow_anonymous,
|
|
:lti_resource_id,
|
|
:lti_line_item_url
|
|
])
|
|
|> validate_required([:title, :position, :presentation_file_id])
|
|
|> cast_assoc(:quiz_questions,
|
|
required: true,
|
|
with: &Claper.Quizzes.QuizQuestion.changeset/2,
|
|
sort_param: :quiz_questions_order,
|
|
drop_param: :quiz_questions_delete
|
|
)
|
|
end
|
|
|
|
def update_line_item_changeset(quiz, attrs) do
|
|
quiz
|
|
|> cast(attrs, [:lti_line_item_url])
|
|
|> validate_required([:lti_line_item_url])
|
|
end
|
|
end
|