From acf616fc085082e978e211e4465aa1f309ddb8d0 Mon Sep 17 00:00:00 2001 From: mirivlad Date: Fri, 27 Mar 2026 09:51:17 +0800 Subject: [PATCH] =?UTF-8?q?Feat:=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=D0=BE=D0=BF=D1=80=D0=BE=D1=81?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Удалён input тип (не имеет смысла без автопроверки) ✅ Добавлен ordering тип (сортировка элементов) ✅ Добавлено поле image для ответов ✅ Миграции применены ✅ QuestionOrderingItem модель Co-authored-by: Qwen-Coder --- app/Models/Question.php | 5 +++ app/Models/QuestionOrderingItem.php | 10 ++++++ ...24_01_03_000002_create_questions_table.php | 2 +- ..._011503_add_ordering_to_questions_type.php | 33 +++++++++++++++++++ ...3_27_014918_add_image_to_answers_table.php | 28 ++++++++++++++++ resources/views/admin/tests/show.blade.php | 4 ++- 6 files changed, 80 insertions(+), 2 deletions(-) create mode 100755 app/Models/QuestionOrderingItem.php create mode 100755 database/migrations/2026_03_27_011503_add_ordering_to_questions_type.php create mode 100755 database/migrations/2026_03_27_014918_add_image_to_answers_table.php diff --git a/app/Models/Question.php b/app/Models/Question.php index 04d2746..0374b53 100755 --- a/app/Models/Question.php +++ b/app/Models/Question.php @@ -40,6 +40,11 @@ class Question extends Model return $this->hasMany(QuestionMatchingPair::class); } + public function orderingItems(): HasMany + { + return $this->hasMany(QuestionOrderingItem::class); + } + public function responses(): HasMany { return $this->hasMany(TestResponse::class); diff --git a/app/Models/QuestionOrderingItem.php b/app/Models/QuestionOrderingItem.php new file mode 100755 index 0000000..2128aab --- /dev/null +++ b/app/Models/QuestionOrderingItem.php @@ -0,0 +1,10 @@ +id(); $table->foreignId('test_id')->constrained()->onDelete('cascade'); - $table->enum('type', ['single_choice', 'multiple_choice', 'input', 'matching'])->default('single_choice'); + $table->enum('type', ['single_choice', 'multiple_choice', 'matching', 'ordering'])->default('multiple_choice'); $table->text('question_text'); $table->text('explanation')->nullable(); $table->integer('score')->default(1); diff --git a/database/migrations/2026_03_27_011503_add_ordering_to_questions_type.php b/database/migrations/2026_03_27_011503_add_ordering_to_questions_type.php new file mode 100755 index 0000000..1b3a0a7 --- /dev/null +++ b/database/migrations/2026_03_27_011503_add_ordering_to_questions_type.php @@ -0,0 +1,33 @@ +id(); + $table->foreignId('question_id')->constrained()->onDelete('cascade'); + $table->string('item_text'); + $table->integer('correct_order'); + $table->integer('sort_order')->default(0); + $table->timestamps(); + + $table->index('question_id'); + }); + } + + public function down(): void + { + Schema::dropIfExists('question_ordering_items'); + DB::statement("ALTER TABLE questions MODIFY COLUMN type ENUM('single_choice', 'multiple_choice', 'input', 'matching') NOT NULL"); + } +}; diff --git a/database/migrations/2026_03_27_014918_add_image_to_answers_table.php b/database/migrations/2026_03_27_014918_add_image_to_answers_table.php new file mode 100755 index 0000000..13f4a10 --- /dev/null +++ b/database/migrations/2026_03_27_014918_add_image_to_answers_table.php @@ -0,0 +1,28 @@ + @if($question->type === 'single_choice') - + @elseif($question->type === 'multiple_choice') @elseif($question->type === 'input') @elseif($question->type === 'matching') + @elseif($question->type === 'ordering') + @endif {{ $question->type }}