validate([ 'question_text' => 'required|string|max:1000', 'question_type' => 'required|in:rating,single_choice,multiple_choice,short_text,long_text', 'is_required' => 'boolean', 'options' => 'nullable|array', 'options.*' => 'required|string|max:255', ]); $needsOptions = in_array($data['question_type'], ['single_choice', 'multiple_choice']); if ($needsOptions && empty($data['options'])) { return back()->withErrors(['options' => 'Pilihan jawapan diperlukan untuk jenis soalan ini.'])->withInput(); } $maxOrder = $set->questions()->max('sort_order') ?? 0; $set->questions()->create([ 'question_text' => $data['question_text'], 'question_type' => $data['question_type'], 'is_required' => $data['is_required'] ?? true, 'options_json' => $needsOptions ? array_values(array_filter($data['options'] ?? [])) : null, 'sort_order' => $maxOrder + 1, ]); return redirect()->route('admin.questionnaires.show', $set) ->with('success', 'Soalan berjaya ditambah.'); } public function update(Request $request, QuestionnaireQuestion $question): RedirectResponse { $data = $request->validate([ 'question_text' => 'required|string|max:1000', 'question_type' => 'required|in:rating,single_choice,multiple_choice,short_text,long_text', 'is_required' => 'boolean', 'options' => 'nullable|array', 'options.*' => 'required|string|max:255', ]); $needsOptions = in_array($data['question_type'], ['single_choice', 'multiple_choice']); $question->update([ 'question_text' => $data['question_text'], 'question_type' => $data['question_type'], 'is_required' => $data['is_required'] ?? true, 'options_json' => $needsOptions ? array_values(array_filter($data['options'] ?? [])) : null, ]); return redirect()->route('admin.questionnaires.show', $question->questionnaire_set_id) ->with('success', 'Soalan berjaya dikemaskini.'); } public function destroy(QuestionnaireQuestion $question): RedirectResponse { $setId = $question->questionnaire_set_id; $question->delete(); return redirect()->route('admin.questionnaires.show', $setId) ->with('success', 'Soalan berjaya dipadam.'); } public function reorder(Request $request): JsonResponse { $data = $request->validate([ 'order' => 'required|array', 'order.*' => 'integer|exists:questionnaire_questions,id', ]); foreach ($data['order'] as $sortOrder => $questionId) { QuestionnaireQuestion::where('id', $questionId) ->update(['sort_order' => $sortOrder + 1]); } return response()->json(['ok' => true]); } }