Fix Rating

This commit is contained in:
R
2022-09-23 09:35:39 +07:00
parent 5fe1dc4bc6
commit bae91e6120
5 changed files with 49 additions and 19 deletions

View File

@@ -5,6 +5,7 @@ namespace Modules\Linksehat\Http\Controllers\Api;
use App\Helpers\Helper; use App\Helpers\Helper;
use App\Models\Practitioner; use App\Models\Practitioner;
use App\Models\PractitionerRole; use App\Models\PractitionerRole;
use DB;
use Illuminate\Contracts\Support\Renderable; use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Routing\Controller; use Illuminate\Routing\Controller;
@@ -21,7 +22,23 @@ class DoctorController extends Controller
public function index(Request $request) public function index(Request $request)
{ {
$doctors = PractitionerRole::query() $doctors = PractitionerRole::query()
->with(['practitioner.person', 'speciality', 'practitioner.metas', 'metas', 'organization']) ->with(['practitioner.person', 'speciality', 'practitioner.metas', 'metas',
'organization' => function ($query) use ($request) {
if ($request->has('lat') && !empty($request->lat) && $request->has('lng') && !empty($request->lng)) {
return $query->leftJoin('addresses', function($q) {
$q->on('organizations.main_address_id', '=', 'addresses.id');
$q->where('addresses.addressable_type', '=', Organization::class);
})
->select([
"organizations.*",
"addresses.lat",
"addresses.lng",
// DB::raw("ST_Distance_Sphere(point(addresses.lng,addresses.lat), point(".$request->lng.",".$request->lat.")) /1000 as distance_km"),
DB::raw("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_km")
]);
}
},
])
->when($request->search ?? null, function($query, $search) { ->when($request->search ?? null, function($query, $search) {
$query->whereHas('practitioner.person', function($person) use ($search) { $query->whereHas('practitioner.person', function($person) use ($search) {
$person->where('name', 'LIKE', '%'.$search.'%'); $person->where('name', 'LIKE', '%'.$search.'%');
@@ -72,14 +89,26 @@ class DoctorController extends Controller
* @param int $id * @param int $id
* @return Renderable * @return Renderable
*/ */
public function show($id) public function show(Request $request, $id)
{ {
$doctor = Practitioner::query() $doctor = Practitioner::query()
->with([ ->with([
'practitionerRoles', 'practitionerRoles',
'practitionerRoles.metas', 'practitionerRoles.metas',
'practitionerRoles.speciality', 'practitionerRoles.speciality',
'practitionerRoles.organization', 'practitionerRoles.organization' => function ($query) use ($request) {
if ($request->has('lat') && !empty($request->lat) && $request->has('lng') && !empty($request->lng)) {
$query->leftJoin('addresses', function($q) {
$q->on('organizations.main_address_id', '=', 'addresses.id');
$q->where('addresses.addressable_type', '=', Organization::class);
});
$query->select([
"organizations.*",
// DB::raw("ST_Distance_Sphere(point(addresses.lng,addresses.lat), point(".$request->lng.",".$request->lat.")) /1000 as distance_km"),
DB::raw("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_km")
]);
}
},
'practitionerRoles.practices', 'practitionerRoles.practices',
'practitionerRoles.availabilities', 'practitionerRoles.availabilities',
'person', 'person',

View File

@@ -52,7 +52,7 @@ class DoctorResource extends JsonResource
'keilmuan' => $this->meta->keilmuan ?? '', 'keilmuan' => $this->meta->keilmuan ?? '',
'description' => $this->meta->description ?? '', 'description' => $this->meta->description ?? '',
'practices' => $practices, 'practices' => $practices,
'rating' => rand(350, 500) / 10, 'rating' => rand(350, 500) / 100,
]; ];
} }
} }

View File

@@ -24,7 +24,7 @@ class HospitalResource extends JsonResource
'lng' => $this->currentAddress->lng ?? null, 'lng' => $this->currentAddress->lng ?? null,
'distance' => isset($this->distance_km) ? round($this->distance_km) . ' km' : null, 'distance' => isset($this->distance_km) ? round($this->distance_km) . ' km' : null,
'city_name' => $this->currentAddress->city->name ?? null, 'city_name' => $this->currentAddress->city->name ?? null,
'rating' => rand(350, 500) / 10, 'rating' => rand(350, 500) / 100,
'phone' => $this->meta->phone, 'phone' => $this->meta->phone,
'photo_url' => asset('images/default-hospital-image.png'), 'photo_url' => asset('images/default-hospital-image.png'),
'photos' => [ 'photos' => [

View File

@@ -35,7 +35,7 @@ class PractitionerRoleToDoctorDetailResource extends JsonResource
'work_experience' => $this->meta->work_experience ?? '', 'work_experience' => $this->meta->work_experience ?? '',
'keilmuan' => $this->meta->keilmuan ?? '', 'keilmuan' => $this->meta->keilmuan ?? '',
'description' => $this->meta->description ?? '', 'description' => $this->meta->description ?? '',
'rating' => rand(350, 500) / 10, 'rating' => rand(350, 500) / 100,
'is_chat_available' => $this->is_chat_available, 'is_chat_available' => $this->is_chat_available,
'is_video_available' => $this->is_video_available, 'is_video_available' => $this->is_video_available,

View File

@@ -15,17 +15,18 @@ class PractitionerRoleToDoctorResource extends JsonResource
*/ */
public function toArray($request) public function toArray($request)
{ {
$organization = [ // $organization = [
'id' => $this->organization->id, // 'id' => $this->organization->id,
'name' => $this->organization->name, // 'name' => $this->organization->name,
'code' => $this->organization->code, // 'code' => $this->organization->code,
'description' => $this->organization->description, // 'description' => $this->organization->description,
'address' => $this->organization->currentAddress->text ?? null, // 'address' => $this->organization->currentAddress->text ?? null,
'lat' => $this->organization->currentAddress->lat ?? null, // 'lat' => $this->organization->currentAddress->lat ?? null,
'lng' => $this->organization->currentAddress->lng ?? null, // 'lng' => $this->organization->currentAddress->lng ?? null,
'distance' => '200 m', // 'distance' => '200 m',
'city_name' => 'Kota Tangerang', // 'city_name' => 'Kota Tangerang',
]; // ];
$organization = HospitalResource::make($this->organization);
$speciality = $this->speciality ? [ $speciality = $this->speciality ? [
'id' => $this->speciality->id ?? null, 'id' => $this->speciality->id ?? null,
@@ -51,7 +52,7 @@ class PractitionerRoleToDoctorResource extends JsonResource
'avatar_url' => asset('images/default-doctor-avatar.png'), 'avatar_url' => asset('images/default-doctor-avatar.png'),
'hospital' => $organization, 'hospital' => $organization,
'speciality' => $speciality, 'speciality' => $speciality,
'rating' => rand(350, 500) / 10, 'rating' => rand(350, 500) / 100,
'is_chat_available' => $this->is_chat_available, 'is_chat_available' => $this->is_chat_available,
'is_video_available' => $this->is_video_available, 'is_video_available' => $this->is_video_available,