diff --git a/Modules/Linksehat/Http/Controllers/Api/DashboardController.php b/Modules/Linksehat/Http/Controllers/Api/DashboardController.php index b4db497b..d1fb7018 100644 --- a/Modules/Linksehat/Http/Controllers/Api/DashboardController.php +++ b/Modules/Linksehat/Http/Controllers/Api/DashboardController.php @@ -7,42 +7,43 @@ use App\Models\PractitionerRole; use Illuminate\Routing\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Http; -use Modules\Linksehat\Transformers\Dashboard\DoctorResource; -use Modules\Linksehat\Transformers\Dashboard\HospitalResource; -use Modules\Linksehat\Transformers\Dashboard\ArticleResource; -use SebastianBergmann\Invoker\TimeoutException; +use Modules\Linksehat\Transformers\Dashboard\DoctorResource as DoctorResourceDashboard; +use Modules\Linksehat\Transformers\Dashboard\HospitalResource as HospitalResourceDashboard; +use Modules\Linksehat\Transformers\Dashboard\ArticleResource as ArticleResourceDashboard; class DashboardController extends Controller { - public function index(Request $request) + public function index(Request $request, $default, $limit = 20) { - $queryDoctors = PractitionerRole::query() - ->with([ - 'practitioner.person', 'speciality' - ]) - ->whereHas('speciality')->get()->random(5); - - - $queryHospitals = Organization::query() - ->without('meta') - ->where('organizations.type', 'hospital') - ->leftJoin('addresses', function ($q) { - $q->on('organizations.main_address_id', '=', 'addresses.id'); - $q->where('addresses.addressable_type', '=', Organization::class); - }) - ->selectRaw("organizations.*, addresses.text AS currentAddress, 6371 * acos (cos ( radians($request->lat) ) * cos( radians( addresses.lat ) ) * cos( radians( addresses.lng ) - radians($request->lng) ) + sin ( radians($request->lat) ) * sin( radians( addresses.lat ) )) as distance") - ->limit(5) - ->get(); - - $doctors = DoctorResource::collection($queryDoctors); - $hospitals = HospitalResource::collection($queryHospitals); - $articles = ArticleResource::collection(json_decode(Http::get('https://linksehat.com/api/medical-assistance-articles'))); + if ($default === 'doctors') { + $queryDoctors = PractitionerRole::query() + ->with([ + 'practitioner.person', 'speciality' + ]) + ->whereHas('speciality')->get()->random($limit); + $data = DoctorResourceDashboard::collection($queryDoctors); + } elseif ($default === 'hospitals') { + $queryHospitals = Organization::query() + ->without('meta') + ->where('organizations.type', 'hospital') + ->leftJoin('addresses', function ($q) { + $q->on('organizations.main_address_id', '=', 'addresses.id'); + $q->where('addresses.addressable_type', '=', Organization::class); + }); + if ($request->has('lat') && !empty($request->lat) && $request->has('lng') && !empty($request->lng)) { + $queryHospitals = $queryHospitals->selectRaw("organizations.*, addresses.text AS currentAddress, 6371 * acos (cos ( radians($request->lat) ) * cos( radians( addresses.lat ) ) * cos( radians( addresses.lng ) - radians($request->lng) ) + sin ( radians($request->lat) ) * sin( radians( addresses.lat ) )) as distance")->orderBy('distance', 'ASC'); + } + $queryHospitals = $queryHospitals->orderBy('organizations.name', 'asc')->limit($limit)->get(); + $data = HospitalResourceDashboard::collection($queryHospitals); + } elseif ($default === 'articles') { + $data = ArticleResourceDashboard::collection(json_decode(Http::get('https://linksehat.com/api/medical-assistance-articles'))); + } return response()->json([ 'success' => true, 'statusCode' => 200, 'message' => 'Success', - 'data' => compact('doctors', 'hospitals', 'articles'), + 'data' => $data, ]); } } diff --git a/Modules/Linksehat/Routes/api.php b/Modules/Linksehat/Routes/api.php index d61e3e75..b120fd1a 100644 --- a/Modules/Linksehat/Routes/api.php +++ b/Modules/Linksehat/Routes/api.php @@ -20,7 +20,7 @@ use Modules\Linksehat\Http\Controllers\Api\ProfileController; Route::prefix('linksehat')->group(function () { - Route::get('dashboard', [DashboardController::class, 'index']); + Route::get('dashboard/{default}/{limit?}', [DashboardController::class, 'index']); Route::post('otp-request', [AuthController::class, 'otpRequest']); Route::post('mock-otp', [AuthController::class, 'mockOtp']); diff --git a/Modules/Linksehat/Transformers/Dashboard/HospitalResource.php b/Modules/Linksehat/Transformers/Dashboard/HospitalResource.php index 23ebe6c9..68b21bd6 100644 --- a/Modules/Linksehat/Transformers/Dashboard/HospitalResource.php +++ b/Modules/Linksehat/Transformers/Dashboard/HospitalResource.php @@ -18,8 +18,8 @@ class HospitalResource extends JsonResource return [ 'id' => $this->id, 'name' => $this->name, - 'address' => $this->currentAddress ?? null, - 'distance' => $this->distance < 1 ? round($this->distance * 1000, 2) . " m" : round($this->distance, 2) . " km", + 'address' => $this->currentAddress->text ?? null, + 'distance' => $this->distance ? ($this->distance < 1 ? round($this->distance * 1000, 2) . " m" : round($this->distance, 2) . " km") : null, 'photos' => [ 'title' => Str::slug($this->name), 'url' => asset('images/default-doctor-avatar.png')