diff --git a/Modules/Linksehat/Http/Controllers/Api/DoctorController.php b/Modules/Linksehat/Http/Controllers/Api/DoctorController.php index 23af68c5..3ed781d0 100644 --- a/Modules/Linksehat/Http/Controllers/Api/DoctorController.php +++ b/Modules/Linksehat/Http/Controllers/Api/DoctorController.php @@ -8,6 +8,7 @@ use App\Models\PractitionerRole; use Illuminate\Contracts\Support\Renderable; use Illuminate\Http\Request; use Illuminate\Routing\Controller; +use Modules\Linksehat\Transformers\DoctorResource; use Modules\Linksehat\Transformers\PractitionerRoleToDoctorDetailResource; use Modules\Linksehat\Transformers\PractitionerRoleToDoctorResource; @@ -33,9 +34,13 @@ class DoctorController extends Controller } else if ($request->has('hospital_id')) { $doctors->where('organization_id', $request->hospital_id); } - - $doctors = $doctors->paginate(6); - + + $limit = $request->limit ?? 6; + if ($limit > 20) { + $limit = 20; + } + + $doctors = $doctors->paginate($limit); return response()->json([ 'message' => 'Sukses mengambil data Dokter', @@ -69,12 +74,18 @@ class DoctorController extends Controller */ public function show($id) { - $doctor = PractitionerRole::query() - ->with(['practitioner', 'practitioner.person', 'speciality', 'practitioner.metas', 'metas', 'organization']) - ->where('id', $id) - ->firstOrFail(); - - return response()->json(PractitionerRoleToDoctorDetailResource::make($doctor)); + $doctor = Practitioner::query() + ->with([ + 'practitionerRoles', + 'practitionerRoles.metas', + 'practitionerRoles.speciality', + 'practitionerRoles.organization', + 'person', + 'metas', + ]) + ->findOrFail($id); + + return response()->json(DoctorResource::make($doctor)); } /** diff --git a/Modules/Linksehat/Http/Controllers/Api/HospitalController.php b/Modules/Linksehat/Http/Controllers/Api/HospitalController.php index 3923fd62..9abb91ef 100644 --- a/Modules/Linksehat/Http/Controllers/Api/HospitalController.php +++ b/Modules/Linksehat/Http/Controllers/Api/HospitalController.php @@ -57,8 +57,13 @@ class HospitalController extends Controller // break; // } // } + + $limit = $request->limit ?? 6; + if ($limit > 20) { + $limit = 20; + } - $hospitals = $hospitals->paginate($request->limit ?? 6); + $hospitals = $hospitals->paginate($limit); // dd($hospitals->toArray()); diff --git a/Modules/Linksehat/Transformers/DoctorResource.php b/Modules/Linksehat/Transformers/DoctorResource.php index c2c449a4..64d768a6 100644 --- a/Modules/Linksehat/Transformers/DoctorResource.php +++ b/Modules/Linksehat/Transformers/DoctorResource.php @@ -14,6 +14,38 @@ class DoctorResource extends JsonResource */ public function toArray($request) { - return parent::toArray($request); + $practices = $this->practitionerRoles->map(function($practitionerRole) { + return [ + 'id' => $practitionerRole->id, + 'doctor_id' => $practitionerRole->practitioner_id, + 'hospital_id' => $practitionerRole->organization_id, + 'speciality_id' => $practitionerRole->speciality_id, + 'hospital' => HospitalResource::make($practitionerRole->organization), + 'speciality' => SpecialityResource::make($practitionerRole->speciality) + ]; + }); + + return [ + 'id' => $this->id, + 'full_name' => $this->person->full_name ?? null, + 'name_prefix' => $this->person->name_prefix ?? null, + 'name' => $this->person->name ?? null, + 'name_suffix' => $this->person->name_suffix ?? null, + 'gender' => $this->person->gender ?? null, + // 'speciality_name' => !empty($this->speciality->name ?? null) ? 'Spesialis '. $this->speciality->name : 'Spesialis Empty', + 'is_online' => false, + // 'is_insurance_covered' => rand(0,1) == 1, + // 'price_range' => 'Rp 100.000 - Rp 350.000', + // 'price_start' => '100000', + // 'price_end' => '350000', + 'avatar_url' => asset('images/default-doctor-avatar.png'), + 'education' => $this->meta->education ?? '', + 'medical_treatment' => $this->meta->medical_treatment ?? '', + 'award' => $this->meta->award ?? '', + 'work_experience' => $this->meta->work_experience ?? '', + 'keilmuan' => $this->meta->keilmuan ?? '', + 'description' => $this->meta->description ?? '', + 'practices' => $practices + ]; } } diff --git a/Modules/Linksehat/Transformers/PractitionerRoleToDoctorDetailResource.php b/Modules/Linksehat/Transformers/PractitionerRoleToDoctorDetailResource.php index f34512bf..34d3ee79 100644 --- a/Modules/Linksehat/Transformers/PractitionerRoleToDoctorDetailResource.php +++ b/Modules/Linksehat/Transformers/PractitionerRoleToDoctorDetailResource.php @@ -23,6 +23,7 @@ class PractitionerRoleToDoctorDetailResource extends JsonResource 'gender' => $this->practitioner->person->gender ?? null, 'speciality_name' => !empty($this->speciality->name ?? null) ? 'Spesialis '. $this->speciality->name : 'Spesialis Empty', 'is_online' => false, + 'is_insurance_covered' => rand(0,1) == 1, 'price_range' => 'Rp 100.000 - Rp 350.000', 'price_start' => '100000', 'price_end' => '350000', @@ -32,7 +33,7 @@ class PractitionerRoleToDoctorDetailResource extends JsonResource 'award' => $this->meta->award ?? '', 'work_experience' => $this->meta->work_experience ?? '', 'keilmuan' => $this->meta->keilmuan ?? '', - 'description' => $this->meta->description ?? '' + 'description' => $this->meta->description ?? '', ]; return parent::toArray($request); diff --git a/Modules/Linksehat/Transformers/PractitionerRoleToDoctorResource.php b/Modules/Linksehat/Transformers/PractitionerRoleToDoctorResource.php index a4902f33..404f975c 100644 --- a/Modules/Linksehat/Transformers/PractitionerRoleToDoctorResource.php +++ b/Modules/Linksehat/Transformers/PractitionerRoleToDoctorResource.php @@ -33,7 +33,7 @@ class PractitionerRoleToDoctorResource extends JsonResource ] : null; return [ - 'id' => $this->id, + 'id' => $this->practitioner->id, 'organization_id' => $this->organization_id, 'full_name' => $this->practitioner->person->full_name, 'name_prefix' => $this->practitioner->person->name_prefix, @@ -42,11 +42,12 @@ class PractitionerRoleToDoctorResource extends JsonResource 'gender' => $this->practitioner->person->gender, // 'speciality_name' => !empty($this->speciality->name ?? null) ? 'Spesialis '. $this->speciality->name : 'Spesialis Empty', 'is_online' => false, + 'is_insurance_covered' => rand(0,1) == 1, 'price_range' => 'Rp 100.000 - Rp 350.000', 'price_start' => '100000', 'price_end' => '350000', 'avatar_url' => asset('images/default-doctor-avatar.png'), - 'organization' => $organization, + 'hospital' => $organization, 'speciality' => $speciality, ]; return parent::toArray($request); diff --git a/Modules/Linksehat/Transformers/SpecialityResource.php b/Modules/Linksehat/Transformers/SpecialityResource.php new file mode 100644 index 00000000..06a02dae --- /dev/null +++ b/Modules/Linksehat/Transformers/SpecialityResource.php @@ -0,0 +1,19 @@ +morphMany(Meta::class, 'metaable'); } + + public function practitionerRoles() + { + return $this->hasMany(PractitionerRole::class, 'practitioner_id'); + } }