fix route dashboard

This commit is contained in:
Muhammad Fajar
2022-10-26 09:35:51 +07:00
parent d0ce5772c2
commit 0ece467d21
3 changed files with 31 additions and 30 deletions

View File

@@ -7,42 +7,43 @@ use App\Models\PractitionerRole;
use Illuminate\Routing\Controller; use Illuminate\Routing\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Http;
use Modules\Linksehat\Transformers\Dashboard\DoctorResource; use Modules\Linksehat\Transformers\Dashboard\DoctorResource as DoctorResourceDashboard;
use Modules\Linksehat\Transformers\Dashboard\HospitalResource; use Modules\Linksehat\Transformers\Dashboard\HospitalResource as HospitalResourceDashboard;
use Modules\Linksehat\Transformers\Dashboard\ArticleResource; use Modules\Linksehat\Transformers\Dashboard\ArticleResource as ArticleResourceDashboard;
use SebastianBergmann\Invoker\TimeoutException;
class DashboardController extends Controller class DashboardController extends Controller
{ {
public function index(Request $request) public function index(Request $request, $default, $limit = 20)
{ {
$queryDoctors = PractitionerRole::query() if ($default === 'doctors') {
->with([ $queryDoctors = PractitionerRole::query()
'practitioner.person', 'speciality' ->with([
]) 'practitioner.person', 'speciality'
->whereHas('speciality')->get()->random(5); ])
->whereHas('speciality')->get()->random($limit);
$data = DoctorResourceDashboard::collection($queryDoctors);
$queryHospitals = Organization::query() } elseif ($default === 'hospitals') {
->without('meta') $queryHospitals = Organization::query()
->where('organizations.type', 'hospital') ->without('meta')
->leftJoin('addresses', function ($q) { ->where('organizations.type', 'hospital')
$q->on('organizations.main_address_id', '=', 'addresses.id'); ->leftJoin('addresses', function ($q) {
$q->where('addresses.addressable_type', '=', Organization::class); $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) if ($request->has('lat') && !empty($request->lat) && $request->has('lng') && !empty($request->lng)) {
->get(); $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');
}
$doctors = DoctorResource::collection($queryDoctors); $queryHospitals = $queryHospitals->orderBy('organizations.name', 'asc')->limit($limit)->get();
$hospitals = HospitalResource::collection($queryHospitals); $data = HospitalResourceDashboard::collection($queryHospitals);
$articles = ArticleResource::collection(json_decode(Http::get('https://linksehat.com/api/medical-assistance-articles'))); } elseif ($default === 'articles') {
$data = ArticleResourceDashboard::collection(json_decode(Http::get('https://linksehat.com/api/medical-assistance-articles')));
}
return response()->json([ return response()->json([
'success' => true, 'success' => true,
'statusCode' => 200, 'statusCode' => 200,
'message' => 'Success', 'message' => 'Success',
'data' => compact('doctors', 'hospitals', 'articles'), 'data' => $data,
]); ]);
} }
} }

View File

@@ -20,7 +20,7 @@ use Modules\Linksehat\Http\Controllers\Api\ProfileController;
Route::prefix('linksehat')->group(function () { 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('otp-request', [AuthController::class, 'otpRequest']);
Route::post('mock-otp', [AuthController::class, 'mockOtp']); Route::post('mock-otp', [AuthController::class, 'mockOtp']);

View File

@@ -18,8 +18,8 @@ class HospitalResource extends JsonResource
return [ return [
'id' => $this->id, 'id' => $this->id,
'name' => $this->name, 'name' => $this->name,
'address' => $this->currentAddress ?? null, 'address' => $this->currentAddress->text ?? null,
'distance' => $this->distance < 1 ? round($this->distance * 1000, 2) . " m" : round($this->distance, 2) . " km", 'distance' => $this->distance ? ($this->distance < 1 ? round($this->distance * 1000, 2) . " m" : round($this->distance, 2) . " km") : null,
'photos' => [ 'photos' => [
'title' => Str::slug($this->name), 'title' => Str::slug($this->name),
'url' => asset('images/default-doctor-avatar.png') 'url' => asset('images/default-doctor-avatar.png')