Some checks failed
tests / ci (pull_request) Has been cancelled
- Created sub-namespaces under Admin\Manage for Course, Academic, Announcement, Finance, and Service. - Added new FormRequest classes for handling validation in each sub-namespace. - Implemented Service classes for managing business logic related to each resource. - Updated routes to reflect the new sub-namespace structure. - Enhanced code organization and maintainability by grouping related functionalities.
69 lines
2.2 KiB
PHP
69 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Admin\Manage\Academic;
|
|
|
|
use App\Models\Assignment;
|
|
use App\Models\Student;
|
|
use App\Models\Submission;
|
|
use Illuminate\Database\Eloquent\Collection;
|
|
use Illuminate\Http\UploadedFile;
|
|
|
|
class SubmissionService
|
|
{
|
|
public function forAssignment(Assignment $assignment): Collection
|
|
{
|
|
return $assignment->submissions()
|
|
->with(['student.user.profile', 'student.department'])
|
|
->latest('created_at')
|
|
->get();
|
|
}
|
|
|
|
public function availableStudents(Assignment $assignment): Collection
|
|
{
|
|
return Student::query()
|
|
->whereHas('enrollments', fn ($q) => $q->where('course_class_id', $assignment->course_class_id))
|
|
->whereDoesntHave('submissions', fn ($q) => $q->where('assignment_id', $assignment->id))
|
|
->with(['user.profile', 'department'])
|
|
->get();
|
|
}
|
|
|
|
public function create(Assignment $assignment, array $data, ?UploadedFile $file): Submission
|
|
{
|
|
$submission = $assignment->submissions()->create([
|
|
'student_id' => $data['student_id'],
|
|
'notes' => $data['notes'] ?? null,
|
|
'status' => $data['status'],
|
|
'submitted_at' => $data['submitted_at'] ?? null,
|
|
'score' => $data['score'] ?? null,
|
|
'lecturer_feedback' => $data['lecturer_feedback'] ?? null,
|
|
]);
|
|
|
|
if ($file) {
|
|
$submission->addMedia($file)->toMediaCollection('submission_file');
|
|
}
|
|
|
|
return $submission;
|
|
}
|
|
|
|
public function update(Submission $submission, array $data, ?UploadedFile $file): Submission
|
|
{
|
|
$submission->notes = $data['notes'] ?? null;
|
|
$submission->status = $data['status'];
|
|
$submission->submitted_at = $data['submitted_at'] ?? null;
|
|
$submission->score = $data['score'] ?? null;
|
|
$submission->lecturer_feedback = $data['lecturer_feedback'] ?? null;
|
|
$submission->update();
|
|
|
|
if ($file) {
|
|
$submission->addMedia($file)->toMediaCollection('submission_file');
|
|
}
|
|
|
|
return $submission;
|
|
}
|
|
|
|
public function delete(Submission $submission): bool
|
|
{
|
|
return $submission->delete();
|
|
}
|
|
}
|