diff --git a/app/Models/Course.php b/app/Models/Course.php index cb00a3da..bcbd6603 100644 --- a/app/Models/Course.php +++ b/app/Models/Course.php @@ -208,10 +208,11 @@ public function taskEngagement(): Attribute ->leftJoin('tasks', 'grades.task_id', '=', 'tasks.id') ->select([DB::raw("count(tasks.id)/$enrolledCount as grade_count"), 'tasks.id', 'tasks.grouped_by', 'tasks.starts_at', 'tasks.name']) ->groupBy('task_id') + ->orderBy('tasks.grouped_by') ->orderBy('tasks.starts_at') ->orderBy('tasks.order') ->get() - ->mapWithKeys(fn($result) => [$result->grouped_by => round($result->grade_count, 2)]); // @phpstan-ignore-line + ->mapWithKeys(fn($result) => [$result->grouped_by => round($result->grade_count * 100, 2)]); // @phpstan-ignore-line }); } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index a2d56084..7ef252b6 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -20,5 +20,6 @@ public function run() $this->call(TaskSeeder::class); $this->call(UserSeeder::class); $this->call(GroupSeeder::class); + $this->call(GradeSeeder::class); } } diff --git a/database/seeders/GradeSeeder.php b/database/seeders/GradeSeeder.php new file mode 100644 index 00000000..5afaf4e3 --- /dev/null +++ b/database/seeders/GradeSeeder.php @@ -0,0 +1,46 @@ +each(function (Course $course) { + $students = $course->students()->get(); + + if ($students->isEmpty()) + { + return; + } + + $tasks = $course->tasks() + ->where('grouped_by', '!=', 'sidebar') + ->get(); + + foreach ($tasks as $task) + { + $engagement = rand(30, 100) / 100; + + $engagedStudents = $students + ->shuffle() + ->take((int) round($students->count() * $engagement)); + + foreach ($engagedStudents as $student) + { + Grade::factory()->create([ + 'task_id' => $task->id, + 'user_id' => $student->id, + 'source_type' => Task::class, + 'source_id' => $task->id, + ]); + } + } + }); + } +} \ No newline at end of file