lms/Modules/Exam/app/Transformers/ExamResource.php
2025-12-15 12:26:23 +01:00

78 lines
2.6 KiB
PHP

<?php
namespace Modules\Exam\Transformers;
use Illuminate\Http\Resources\Json\JsonResource;
class ExamResource extends JsonResource
{
/**
* Transform the resource into an array.
*/
public function toArray($request): array
{
return [
'id' => $this->id,
'title' => $this->title,
'slug' => $this->slug,
'short_description' => $this->short_description,
'description' => $this->description,
// Instructor & Category
'instructor' => [
'id' => $this->instructor->id,
'name' => $this->instructor->user->name ?? 'Unknown',
],
'category' => [
'id' => $this->exam_category->id,
'name' => $this->exam_category->name,
'slug' => $this->exam_category->slug,
],
// Pricing
'pricing_type' => $this->pricing_type,
'price' => (float) $this->price,
'discount' => (float) $this->discount,
'discount_price' => (float) $this->discount_price,
// Exam Details
'duration_hours' => $this->duration_hours,
'duration_minutes' => $this->duration_minutes,
'total_duration_minutes' => ($this->duration_hours * 60) + $this->duration_minutes,
'pass_mark' => (float) $this->pass_mark,
'total_marks' => (float) $this->total_marks,
'max_attempts' => $this->max_attempts,
'total_questions' => $this->total_questions,
// Status & Level
'status' => $this->status,
'level' => $this->level,
// Media
'thumbnail' => $this->thumbnail,
'banner' => $this->banner,
// Expiry
'expiry_type' => $this->expiry_type,
'expiry_duration' => $this->expiry_duration,
// SEO
'meta_title' => $this->meta_title,
'meta_keywords' => $this->meta_keywords,
'meta_description' => $this->meta_description,
'og_title' => $this->og_title,
'og_description' => $this->og_description,
// Relationships (when loaded)
'questions' => ExamQuestionResource::collection($this->whenLoaded('questions')),
'enrollments_count' => $this->when(isset($this->enrollments_count), $this->enrollments_count),
'reviews_count' => $this->when(isset($this->reviews_count), $this->reviews_count),
'average_rating' => $this->when(isset($this->average_rating), $this->average_rating),
// Timestamps
'created_at' => $this->created_at?->toDateTimeString(),
'updated_at' => $this->updated_at?->toDateTimeString(),
];
}
}