get(); $progress = TutorialUserProgress::where('user_id', Auth::id())->first(); return view('tutorial.index', compact('lessons', 'progress')); } public function lesson(int $id): View { $lesson = TutorialLesson::findOrFail($id); $lessons = TutorialLesson::orderBy('order')->get(); $progress = TutorialUserProgress::where('user_id', Auth::id())->first(); $completedLessons = $progress?->completed_lessons ?? []; if (!in_array($id, $completedLessons)) { $completedLessons[] = $id; if (!$progress) { $progress = TutorialUserProgress::create(['user_id' => Auth::id(), 'completed_lessons' => $completedLessons]); } else { $progress->update(['completed_lessons' => $completedLessons]); } } return view('tutorial.lesson', compact('lesson', 'lessons', 'progress')); } public function quiz(): View { $questions = TutorialQuestion::orderBy('order')->get(); $progress = TutorialUserProgress::where('user_id', Auth::id())->first(); return view('tutorial.quiz', compact('questions', 'progress')); } public function submitQuiz(Request $request): View { $request->validate([ 'answers' => 'required|array', 'answers.*' => 'required|string', ]); $questions = TutorialQuestion::orderBy('order')->get(); $score = 0; $answers = $request->input('answers', []); $results = []; foreach ($questions as $question) { $isCorrect = isset($answers[$question->id]) && $answers[$question->id] === $question->correct_answer; if ($isCorrect) { $score++; } $results[] = [ 'question' => $question->question, 'your_answer' => $answers[$question->id] ?? null, 'correct_answer' => $question->correct_answer, 'is_correct' => $isCorrect, 'explanation' => $question->explanation, ]; } $passed = $score >= 6; $progress = TutorialUserProgress::where('user_id', Auth::id())->first(); if (!$progress) { $progress = TutorialUserProgress::create(['user_id' => Auth::id()]); } $progress->update([ 'quiz_answers' => $answers, 'quiz_score' => $score, 'quiz_passed' => $passed, 'quiz_completed_at' => now(), ]); return view('tutorial.result', compact('score', 'results', 'passed', 'progress')); } public function certificate(): \Illuminate\Http\Response { $user = Auth::user(); $progress = TutorialUserProgress::where('user_id', $user->id)->firstOrFail(); if (!$progress->quiz_passed) { return redirect()->route('tutorial.quiz')->with('error', 'VocĂȘ precisa passar no quiz para gerar o certificado.'); } $progress->update(['certificate_generated_at' => now()]); $pdf = Pdf::loadView('tutorial.certificate', compact('user', 'progress')); $pdf->setPaper('a4', 'landscape'); return $pdf->download('certificado-engenharia-prompt-gprompt.pdf'); } }