From 0bb82dc66a58a743f8c2a412f6b1143347dacb33 Mon Sep 17 00:00:00 2001 From: Muhammad Fajar Date: Thu, 3 Nov 2022 09:54:00 +0700 Subject: [PATCH] fix code resources --- .../Controllers/Api/DashboardController.php | 14 ++--- .../Controllers/Api/HospitalController.php | 59 ++++++++++--------- .../Http/Controllers/Api/PersonController.php | 3 + .../ArticleResource.php | 2 +- .../{Dashboard => Doctor}/DoctorResource.php | 2 +- .../Hospital/HospitalResource.php | 23 +++++++- .../Hospital/HospitalResourceDetail.php | 8 +-- 7 files changed, 66 insertions(+), 45 deletions(-) rename Modules/Linksehat/Transformers/{Dashboard => Article}/ArticleResource.php (92%) rename Modules/Linksehat/Transformers/{Dashboard => Doctor}/DoctorResource.php (92%) diff --git a/Modules/Linksehat/Http/Controllers/Api/DashboardController.php b/Modules/Linksehat/Http/Controllers/Api/DashboardController.php index 027f0ad6..a07831f3 100644 --- a/Modules/Linksehat/Http/Controllers/Api/DashboardController.php +++ b/Modules/Linksehat/Http/Controllers/Api/DashboardController.php @@ -7,8 +7,8 @@ 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\ArticleResource as ArticleResourceDashboard; +use Modules\Linksehat\Transformers\Article\ArticleResource; +use Modules\Linksehat\Transformers\Doctor\DoctorResource; use Modules\Linksehat\Transformers\Hospital\HospitalResource; use Symfony\Component\HttpFoundation\Response; @@ -31,9 +31,7 @@ class DashboardController extends Controller ->get(['id', 'practitioner_id', 'speciality_id']) ->random($limit); - return $queryDoctors; - - $data = DoctorResourceDashboard::collection($queryDoctors); + $data = DoctorResource::collection($queryDoctors); } elseif ($query === 'hospitals') { $queryHospitals = Organization::query() ->leftJoin('addresses', function ($query) { @@ -43,8 +41,8 @@ class DashboardController extends Controller $query->on('addresses.city_id', '=', 'cities.id'); }) ->where('addresses.addressable_type', '=', Organization::class) - ->where('organizations.type', 'hospital') - ->where('organizations.status', 'active') + ->active() + ->hospital() ->when($request->lat && $request->lng, function ($query) use ($request) { $query->selectRaw("organizations.id, organizations.name, addresses.text AS address, cities.name AS city_name, 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"); $query->orderBy('distance', 'ASC'); @@ -57,7 +55,7 @@ class DashboardController extends Controller $data = HospitalResource::collection($queryHospitals); } elseif ($query === 'articles') { - $data = ArticleResourceDashboard::collection(json_decode(Http::get('https://linksehat.com/api/medical-assistance-articles'))); + $data = ArticleResource::collection(json_decode(Http::get('https://linksehat.com/api/medical-assistance-articles'))); } return response()->json([ diff --git a/Modules/Linksehat/Http/Controllers/Api/HospitalController.php b/Modules/Linksehat/Http/Controllers/Api/HospitalController.php index 15c7336c..fa02678b 100644 --- a/Modules/Linksehat/Http/Controllers/Api/HospitalController.php +++ b/Modules/Linksehat/Http/Controllers/Api/HospitalController.php @@ -2,14 +2,12 @@ namespace Modules\Linksehat\Http\Controllers\Api; -use App\Helpers\Helper; use App\Models\Organization; -use DB; use Illuminate\Contracts\Support\Renderable; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Request; use Illuminate\Routing\Controller; -use Modules\Linksehat\Transformers\HospitalResource; -use Modules\Linksehat\Transformers\Hospitals\HospitalResourceDetail; +use Modules\Linksehat\Transformers\Hospital\HospitalResource; class HospitalController extends Controller { @@ -19,7 +17,7 @@ class HospitalController extends Controller */ public function index(Request $request) { - $hospitals = Organization::query() + /**$hospitals = Organization::query() ->with(['currentAddress']) ->where('organizations.type', 'hospital') ->when($request->search ?? null, function ($query, $search) { @@ -41,23 +39,23 @@ class HospitalController extends Controller $hospitals->orderBy('organizations.name', 'asc'); } - // if ($request->has('order_by')) { - // switch($request->order_by) { - // case 'distance_asc': - // if ($request->order_by == 'distance_asc' && $request->has('lat') && !empty($request->lat) && $request->has('lng') && !empty($request->lng)) { - // $hospitals->orderBy('distance_km', 'asc'); - // break; - // } - // case 'distance_desc': - // if ($request->order_by == 'distance_desc' && $request->has('lat') && !empty($request->lat) && $request->has('lng') && !empty($request->lng)) { - // $hospitals->orderBy('distance_km', 'desc'); - // break; - // } - // default: - // $hospitals->orderBy('organizations.name', 'asc'); - // break; - // } - // } + if ($request->has('order_by')) { + switch($request->order_by) { + case 'distance_asc': + if ($request->order_by == 'distance_asc' && $request->has('lat') && !empty($request->lat) && $request->has('lng') && !empty($request->lng)) { + $hospitals->orderBy('distance_km', 'asc'); + break; + } + case 'distance_desc': + if ($request->order_by == 'distance_desc' && $request->has('lat') && !empty($request->lat) && $request->has('lng') && !empty($request->lng)) { + $hospitals->orderBy('distance_km', 'desc'); + break; + } + default: + $hospitals->orderBy('organizations.name', 'asc'); + break; + } + } $limit = $request->limit ?? 6; if ($limit > 20) { @@ -71,7 +69,7 @@ class HospitalController extends Controller return response()->json([ 'message' => 'Sukses mengambil data Rumah Sakit', 'hospitals' => Helper::paginateResources(HospitalResource::collection($hospitals)) - ]); + ]);*/ } /** @@ -101,16 +99,23 @@ class HospitalController extends Controller public function show(Request $request, $id) { $queryHospitals = Organization::query() + ->when($request->lat && $request->lng, function (Builder $query) use ($request) { + $query->selectRaw("organizations*, addresses.text AS address, cities.name AS city_name, 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"); + $query->orderBy('distance', 'ASC'); + }, function ($query) { + $query->select(['organizations.*', 'addresses.text AS address', 'cities.name AS city_name']); + $query->orderBy('organizations.name', 'asc'); + }) ->leftJoin('addresses', function ($q) { $q->on('organizations.main_address_id', '=', 'addresses.id'); $q->where('addresses.addressable_type', '=', Organization::class); + }) + ->leftJoin('cities', function ($query) { + $query->on('addresses.city_id', '=', 'cities.id'); }); - 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')->findOrFail($id); - return HospitalResourceDetail::make($queryHospitals); + return HospitalResource::make($queryHospitals); } /** diff --git a/Modules/Linksehat/Http/Controllers/Api/PersonController.php b/Modules/Linksehat/Http/Controllers/Api/PersonController.php index cb67f65b..67ef0f71 100644 --- a/Modules/Linksehat/Http/Controllers/Api/PersonController.php +++ b/Modules/Linksehat/Http/Controllers/Api/PersonController.php @@ -125,6 +125,9 @@ class PersonController extends Controller 'main_address_id', 'domicile_address_id', ]); + + return Person::query()->with('families')->find(auth()->user()->person_id); + $person->update($personData); if ($request->hasFile('user_avatar')) { diff --git a/Modules/Linksehat/Transformers/Dashboard/ArticleResource.php b/Modules/Linksehat/Transformers/Article/ArticleResource.php similarity index 92% rename from Modules/Linksehat/Transformers/Dashboard/ArticleResource.php rename to Modules/Linksehat/Transformers/Article/ArticleResource.php index 70bb1f2f..287c23a6 100644 --- a/Modules/Linksehat/Transformers/Dashboard/ArticleResource.php +++ b/Modules/Linksehat/Transformers/Article/ArticleResource.php @@ -1,6 +1,6 @@ with(['speciality']) + ->where('organization_id', $this->id) + ->whereNotNull('speciality_id') + ->orderBy('speciality_id') + ->groupBy('speciality_id') + ->get(['speciality_id']); + + foreach ($querySpecialitys as $indexSpeciality => $speciality) { + $specialitys[$indexSpeciality]['id'] = $speciality->speciality->id; + $specialitys[$indexSpeciality]['name'] = $speciality->speciality->name; + $specialitys[$indexSpeciality]['avatar'] = asset('images/default-specialisasi-image.png'); + } + return [ 'id' => $this->id, 'name' => $this->name, + 'code' => $this->code, + 'description' => $this->description, 'address' => $this->address ?? null, - 'distance' => $this->distance ? ($this->distance < 1 ? round($this->distance * 1000, 2) . " m" : round($this->distance, 2) . " km") : null, + 'lat' => $this->lat, + 'lng' => $this->lng, + 'distance' => $this->distance ? ($this->distance < 1 ? round($this->distance * 1000, 2) . ' m' : round($this->distance, 2) . ' km') : null, 'city_name' => $this->city_name ?? null, + 'rating' => rand(1, 100), 'phone' => $this->meta->phone, + 'photo_url' => url('images/default-hospital-image.png'), 'photos' => [ 'title' => $this->name, 'photo_url' => url('images/default-hospital-image.png'), diff --git a/Modules/Linksehat/Transformers/Hospital/HospitalResourceDetail.php b/Modules/Linksehat/Transformers/Hospital/HospitalResourceDetail.php index e9534681..30c5f4f8 100644 --- a/Modules/Linksehat/Transformers/Hospital/HospitalResourceDetail.php +++ b/Modules/Linksehat/Transformers/Hospital/HospitalResourceDetail.php @@ -1,6 +1,6 @@ distance)) { - $address = $this->currentAddress->text; - } else { - $address = $this->currentAddress; - } - return [ 'id' => $this->id, 'name' => $this->name,