Files
aso/Modules/Linksehat/Http/Controllers/Api/DashboardController.php
2022-10-26 09:35:51 +07:00

50 lines
2.4 KiB
PHP

<?php
namespace Modules\Linksehat\Http\Controllers\Api;
use App\Models\Organization;
use App\Models\PractitionerRole;
use Illuminate\Routing\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
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, $default, $limit = 20)
{
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' => $data,
]);
}
}