refactor: improve assignment retrieval logic to prioritize pinned assignments and enhance sorting by submission status and due date

This commit is contained in:
Yoga Pangestu 2026-03-30 16:56:27 +07:00
parent 68ec1d3700
commit 9d05e4b594
2 changed files with 4 additions and 4 deletions

View File

@ -60,14 +60,14 @@ public function assignments(): Collection
return Assignment::with(['course', 'assignmentSubmissions' => function ($q) use ($studentProfile) {
$q->where('student_id', $studentProfile->id)
->orWhereHas('studyGroup', fn ($sq) => $sq->whereHas('students', fn ($ssq) => $ssq->whereKey($studentProfile->id)));
->orWhereHas('studyGroup', fn ($sq) => $sq->where('leader_id', $studentProfile->id)->orWhereHas('students', fn ($ssq) => $ssq->whereKey($studentProfile->id)));
}, 'studyGroups.students'])
->whereHas('course', function ($q) {
$q->where('semester', app(GeneralSettings::class)->current_semester);
})
->where(function ($query) use ($studentProfile) {
$query->whereHas('students', fn ($q) => $q->whereKey($studentProfile->id))
->orWhereHas('studyGroups', fn ($q) => $q->whereHas('students', fn ($sq) => $sq->whereKey($studentProfile->id)));
->orWhereHas('studyGroups', fn ($q) => $q->where('leader_id', $studentProfile->id)->orWhereHas('students', fn ($sq) => $sq->whereKey($studentProfile->id)));
})
->when(! empty($pinnedIds), function ($query) use ($pinnedIds) {
$ids = implode(',', $pinnedIds);
@ -91,7 +91,7 @@ public function assignmentCards()
$isLeader = false;
if ($isGroup) {
$userGroup = $assignment->studyGroups->first(function ($g) use ($studentProfile) {
return $g->students->contains($studentProfile->id);
return $g->leader_id === $studentProfile->id || $g->students->contains($studentProfile->id);
});
$isLeader = $userGroup && $userGroup->leader_id === $studentProfile->id;
}

View File

@ -72,7 +72,7 @@ public function currentGroup(): ?StudyGroup
$student = $this->student;
return $this->record->studyGroups()
->whereHas('students', fn ($q) => $q->whereKey($student->id))
->where(fn ($q) => $q->where('leader_id', $student->id)->orWhereHas('students', fn ($sq) => $sq->whereKey($student->id)))
->first();
}