diff --git a/Modules/Linksehat/Http/Controllers/Api/DashboardController.php b/Modules/Linksehat/Http/Controllers/Api/DashboardController.php index 508dc2f7..4a3e0cba 100755 --- a/Modules/Linksehat/Http/Controllers/Api/DashboardController.php +++ b/Modules/Linksehat/Http/Controllers/Api/DashboardController.php @@ -11,7 +11,6 @@ use Illuminate\Support\Facades\Http; use Modules\Linksehat\Transformers\Article\ArticleResource; use Modules\Linksehat\Transformers\Doctor\DoctorResource; use Modules\Linksehat\Transformers\Hospital\HospitalResource; -use Symfony\Component\HttpFoundation\Response; class DashboardController extends Controller { @@ -32,7 +31,7 @@ class DashboardController extends Controller ->get(['id', 'practitioner_id', 'speciality_id']) ->random($limit); - $data = DoctorResource::collection($queryDoctors); + $data = ['doctors' => DoctorResource::collection($queryDoctors)]; } elseif ($query === 'hospitals') { $queryHospitals = Organization::query() ->leftJoin('addresses', function ($query) { @@ -45,18 +44,18 @@ class DashboardController extends Controller ->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->selectRaw("organizations.*, addresses.text AS address, addresses.lat, addresses.lng, 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.id', 'organizations.name', 'addresses.text AS address', 'cities.name AS city_name']); + $query->select(['organizations.*', 'addresses.text AS address', 'addresses.lat', 'addresses.lng', 'cities.name AS city_name']); $query->orderBy('organizations.name', 'asc'); }) ->limit($limit) ->get(); - $data = HospitalResource::collection($queryHospitals); + $data = ['hospitals' => HospitalResource::collection($queryHospitals)]; } elseif ($query === 'articles') { - $data = ArticleResource::collection(json_decode(Http::get('https://linksehat.com/api/medical-assistance-articles'))); + $data = ['articles' => ArticleResource::collection(json_decode(Http::get('https://linksehat.com/api/medical-assistance-articles')))]; } return Helper::responseJson($data); diff --git a/Modules/Linksehat/Http/Controllers/Api/DoctorController.php b/Modules/Linksehat/Http/Controllers/Api/DoctorController.php index f65904d7..0e8283e5 100755 --- a/Modules/Linksehat/Http/Controllers/Api/DoctorController.php +++ b/Modules/Linksehat/Http/Controllers/Api/DoctorController.php @@ -3,14 +3,14 @@ namespace Modules\Linksehat\Http\Controllers\Api; use App\Helpers\Helper; +use App\Models\Organization; use App\Models\Practitioner; use App\Models\PractitionerRole; -use App\Models\PractitionerRoleAvailability; -use DB; use Illuminate\Contracts\Support\Renderable; use Illuminate\Http\Request; use Illuminate\Routing\Controller; -use Modules\Linksehat\Transformers\Doctor\DoctorResourceDetail; +use Illuminate\Support\Facades\DB; +use Modules\Linksehat\Transformers\DoctorResource; use Modules\Linksehat\Transformers\PractitionerRoleToDoctorResource; class DoctorController extends Controller @@ -60,7 +60,7 @@ class DoctorController extends Controller $doctors = $doctors->paginate($limit); - return Helper::responseJson(Helper::paginateResources(PractitionerRoleToDoctorResource::collection($doctors))); + return Helper::responseJson(['doctors' => Helper::paginateResources(PractitionerRoleToDoctorResource::collection($doctors))]); } /** @@ -89,23 +89,25 @@ class DoctorController extends Controller */ public function show(Request $request, $id) { - $queryDoctor = PractitionerRole::query() + $doctor = Practitioner::query() ->with([ - 'practitioner', - 'speciality', - 'practices.prices' + 'practitionerRoles', + 'practitionerRoles.metas', + 'practitionerRoles.speciality', + 'practitionerRoles.organization' => function ($query) { + $query->leftJoin('addresses', function ($q) { + $q->on('organizations.main_address_id', '=', 'addresses.id'); + $q->where('addresses.addressable_type', Organization::class); + }); + }, + 'practitionerRoles.practices', + 'practitionerRoles.availabilities', + 'person', + 'metas', ]) ->findOrFail($id); - $queryAvailables = PractitionerRoleAvailability::query()->with(['days' => function ($query) { - $query->select(['availability_id', 'day']); - }])->where('practitioner_role_id', $id)->get(['id', 'start_time']); - - $doctor = DoctorResourceDetail::make($queryDoctor); - $doctor['day_available'] = Helper::dailyAvailabilities($queryAvailables); - - // return Helper::responseJson(); - return response()->json(compact('doctor')); + return response()->json(DoctorResource::make($doctor)); } /** diff --git a/Modules/Linksehat/Http/Controllers/Api/HospitalController.php b/Modules/Linksehat/Http/Controllers/Api/HospitalController.php index 5c1d68af..8a6e322c 100755 --- a/Modules/Linksehat/Http/Controllers/Api/HospitalController.php +++ b/Modules/Linksehat/Http/Controllers/Api/HospitalController.php @@ -4,10 +4,12 @@ namespace Modules\Linksehat\Http\Controllers\Api; use App\Helpers\Helper; use App\Models\Organization; +use App\Models\Speciality; use Illuminate\Contracts\Support\Renderable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Request; use Illuminate\Routing\Controller; +use Illuminate\Support\Facades\DB; use Modules\Linksehat\Transformers\Hospital\HospitalResource; class HospitalController extends Controller @@ -18,7 +20,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) { @@ -31,7 +33,6 @@ class HospitalController extends Controller }); $hospitals->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") ]); @@ -41,7 +42,7 @@ class HospitalController extends Controller } if ($request->has('order_by')) { - switch($request->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'); @@ -52,7 +53,7 @@ class HospitalController extends Controller $hospitals->orderBy('distance_km', 'desc'); break; } - default: + default: $hospitals->orderBy('organizations.name', 'asc'); break; } @@ -64,13 +65,11 @@ class HospitalController extends Controller } $hospitals = $hospitals->paginate($limit); - // dd($hospitals->toArray()); - return response()->json([ 'message' => 'Sukses mengambil data Rumah Sakit', 'hospitals' => Helper::paginateResources(HospitalResource::collection($hospitals)) - ]);*/ + ]); } /** @@ -100,23 +99,41 @@ class HospitalController extends Controller public function show(Request $request, $id) { $queryHospitals = Organization::query() + ->with(['practitionerRoles' => function ($query) { + $query->select(['organization_id', 'speciality_id']) + ->whereNot('speciality_id') + ->groupBy(['speciality_id']) + ->orderBy('speciality_id'); + }]) ->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'); + $query->getQuery() + ->selectRaw("organizations.*, addresses.text AS address, addresses.lat, addresses.lng, 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") + ->orderBy('distance', 'ASC'); + }, function (Builder $query) { + $query->getQuery() + ->select(['organizations.*', 'addresses.text AS address', 'addresses.lat', 'addresses.lng', 'cities.name AS city_name']) + ->groupBy(['organizations.id']) + ->orderBy('organizations.name'); }) - ->leftJoin('addresses', function ($q) { - $q->on('organizations.main_address_id', '=', 'addresses.id'); - $q->where('addresses.addressable_type', '=', Organization::class); + ->leftJoin('addresses', function ($query) { + $query->on('organizations.main_address_id', '=', 'addresses.id'); }) ->leftJoin('cities', function ($query) { $query->on('addresses.city_id', '=', 'cities.id'); - }); - $queryHospitals = $queryHospitals->orderBy('organizations.name', 'asc')->findOrFail($id); + }) + ->where('organizations.id', $id) + ->where('addresses.addressable_type', '=', Organization::class) + ->findOrFail($id); - return Helper::responseJson(new HospitalResource($queryHospitals)); + foreach ($queryHospitals->practitionerRoles as $practitionerRole) { + $specialitiesId[] = $practitionerRole->speciality_id; + } + + $queryHospitals['specialities'] = Speciality::query() + ->whereIn('id', $specialitiesId) + ->get(); + + return Helper::responseJson(['hospitals' => new HospitalResource($queryHospitals)]); } /** diff --git a/Modules/Linksehat/Http/Controllers/Api/PersonController.php b/Modules/Linksehat/Http/Controllers/Api/PersonController.php index 29c0f094..7e601967 100755 --- a/Modules/Linksehat/Http/Controllers/Api/PersonController.php +++ b/Modules/Linksehat/Http/Controllers/Api/PersonController.php @@ -69,7 +69,7 @@ class PersonController extends Controller $personModel = Person::query()->create($personData); - return Helper::responseJson(['person' => $personModel], Response::HTTP_CREATED, 'Data berhasil di buat'); + return Helper::responseJson(['persons' => $personModel], Response::HTTP_CREATED, 'Data berhasil di buat'); } /** @@ -152,7 +152,7 @@ class PersonController extends Controller ]); } - return Helper::responseJson(data: $person, message: 'Data Berhasil di update'); + return Helper::responseJson(data: ['persons' => $person], message: 'Data Berhasil di update'); } /** diff --git a/Modules/Linksehat/Http/Controllers/Api/ProfileController.php b/Modules/Linksehat/Http/Controllers/Api/ProfileController.php index 09ab0437..d4218492 100755 --- a/Modules/Linksehat/Http/Controllers/Api/ProfileController.php +++ b/Modules/Linksehat/Http/Controllers/Api/ProfileController.php @@ -121,7 +121,7 @@ class ProfileController extends Controller } $user = User::find($user->id); // ReLoad User Data - return Helper::responseJson(new UserProfileResource($user)); + return Helper::responseJson(['users' => new UserProfileResource($user)]); } /** diff --git a/Modules/Linksehat/Http/Controllers/Api/SearchController.php b/Modules/Linksehat/Http/Controllers/Api/SearchController.php index 274b9d10..1bf284fe 100644 --- a/Modules/Linksehat/Http/Controllers/Api/SearchController.php +++ b/Modules/Linksehat/Http/Controllers/Api/SearchController.php @@ -12,7 +12,6 @@ use Illuminate\Http\Request; use Illuminate\Routing\Controller; use Modules\Linksehat\Transformers\Hospital\HospitalResource; use Modules\Linksehat\Transformers\Speciality\SpecialityResource; -use Symfony\Component\HttpFoundation\Response; class SearchController extends Controller { @@ -33,7 +32,7 @@ class SearchController extends Controller ->where('organization_id', $request->organization_id) ->get(['persons.name AS person_name', 'specialities.name AS speciality_name', 'practitioner_id', 'practitioner_roles.id']); - return Helper::responseJson(SpecialityResource::collection($doctors)); + return Helper::responseJson(['doctors' => SpecialityResource::collection($doctors)]); } public function searchHospital(Request $request) @@ -68,6 +67,6 @@ class SearchController extends Controller ->groupBy(['practitioner_roles.organization_id', 'practitioner_roles.speciality_id']) ->get(); - return Helper::responseJson(data: HospitalResource::collection($queryHospitals), message: 'Data rumah sakit berhasil di ambil'); + return Helper::responseJson(data: ['hospitals' => HospitalResource::collection($queryHospitals)], message: 'Data rumah sakit berhasil di ambil'); } } diff --git a/Modules/Linksehat/Http/Controllers/Api/SpecialityController.php b/Modules/Linksehat/Http/Controllers/Api/SpecialityController.php index 09fde3f2..a010664e 100755 --- a/Modules/Linksehat/Http/Controllers/Api/SpecialityController.php +++ b/Modules/Linksehat/Http/Controllers/Api/SpecialityController.php @@ -53,6 +53,6 @@ class SpecialityController extends Controller { $querySpecialities = Speciality::query()->get(['name']); - return Helper::responseJson(SpecialityResource::collection($querySpecialities)); + return Helper::responseJson(['specialities' => SpecialityResource::collection($querySpecialities)]); } } diff --git a/Modules/Linksehat/Transformers/DoctorResource.php b/Modules/Linksehat/Transformers/DoctorResource.php index 1bbd951e..aa0524fb 100755 --- a/Modules/Linksehat/Transformers/DoctorResource.php +++ b/Modules/Linksehat/Transformers/DoctorResource.php @@ -3,7 +3,7 @@ namespace Modules\Linksehat\Transformers; use Illuminate\Http\Resources\Json\JsonResource; -use Illuminate\Support\Facades\Route; +use Modules\Linksehat\Transformers\Speciality\SpecialityResource; class DoctorResource extends JsonResource { @@ -112,8 +112,8 @@ class DoctorResource extends JsonResource 'is_online' => false, 'is_insurance_covered' => rand(0, 1) == 1, 'price_range' => 'Rp 100.000 - Rp 350.000', - 'price_start' => '100000', - 'price_end' => '350000', + 'price_start' => '100000', // min + 'price_end' => '350000', // max 'currency' => 'IDR', 'avatar_url' => asset('images/default-doctor-avatar.png'), 'education' => $this->meta->education ?? '', diff --git a/Modules/Linksehat/Transformers/Hospital/HospitalResource.php b/Modules/Linksehat/Transformers/Hospital/HospitalResource.php index 3387d067..6cf887cb 100755 --- a/Modules/Linksehat/Transformers/Hospital/HospitalResource.php +++ b/Modules/Linksehat/Transformers/Hospital/HospitalResource.php @@ -2,8 +2,8 @@ namespace Modules\Linksehat\Transformers\Hospital; -use App\Models\PractitionerRole; use Illuminate\Http\Resources\Json\JsonResource; +use Modules\Linksehat\Transformers\Speciality\SpecialityForHospitalDetailResource; class HospitalResource extends JsonResource { @@ -15,18 +15,10 @@ class HospitalResource extends JsonResource */ public function toArray($request) { - $querySpecialitys = PractitionerRole::query() - ->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'); + if ($this->specialities) { + $specialities = SpecialityForHospitalDetailResource::collection($this->specialities); + } else { + $specialities = []; } return [ @@ -45,7 +37,10 @@ class HospitalResource extends JsonResource 'photos' => [ 'title' => $this->name, 'photo_url' => url('images/default-hospital-image.png'), - ] + ], + $this->mergeWhen($this->specialities, [ + 'specialities' => $specialities + ]) ]; } } diff --git a/Modules/Linksehat/Transformers/Hospital/HospitalResourceDetail.php b/Modules/Linksehat/Transformers/Hospital/HospitalResourceDetail.php deleted file mode 100755 index 30c5f4f8..00000000 --- a/Modules/Linksehat/Transformers/Hospital/HospitalResourceDetail.php +++ /dev/null @@ -1,45 +0,0 @@ -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, - 'address' => $address ?? 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-hospital-image.png'), - ], - 'specialitys' => $specialitys - ]; - } -} diff --git a/Modules/Linksehat/Transformers/Speciality/SpecialityForHospitalDetailResource.php b/Modules/Linksehat/Transformers/Speciality/SpecialityForHospitalDetailResource.php new file mode 100755 index 00000000..d800aa21 --- /dev/null +++ b/Modules/Linksehat/Transformers/Speciality/SpecialityForHospitalDetailResource.php @@ -0,0 +1,24 @@ + $this->id, + 'name' => 'Spesialis ' . $this->name, + 'avatar' => url('images/default-hospital-image.png'), + ]; + } +} diff --git a/Modules/Linksehat/Transformers/Speciality/SpecialityResource.php b/Modules/Linksehat/Transformers/Speciality/SpecialityResource.php index 2a1ff5ef..77c80add 100755 --- a/Modules/Linksehat/Transformers/Speciality/SpecialityResource.php +++ b/Modules/Linksehat/Transformers/Speciality/SpecialityResource.php @@ -30,13 +30,13 @@ class SpecialityResource extends JsonResource } return [ - $this->mergeWhen($this->practitioner && $prices, [ + $this->mergeWhen($this->practitioner && $this->prices, [ 'id' => isset($this->practitioner->person->id) ? $this->practitioner->person->id : $this->practitioner_id, 'name' => isset($this->practitioner->person->name) ? $this->practitioner->person->name : $this->person_name, 'specialis' => 'Spesialis ' . (isset($this->speciality->name) ? $this->speciality->name : $this->speciality_name), 'experience' => rand(5, 12), 'rating' => rand(20, 100), - 'price' => Helper::currencyIdrFormat($prices) ?? null, + 'price' => isset($prices) ? Helper::currencyIdrFormat($prices) : null, ]), $this->mergeWhen($this->name, [ 'title' => 'Spesialis ' . $this->name, diff --git a/public/images/specialities/akupuntur-medik.png b/public/images/specialities/akupuntur-medik.png new file mode 100644 index 00000000..5ed44d15 Binary files /dev/null and b/public/images/specialities/akupuntur-medik.png differ diff --git a/public/images/specialities/andrologi.png b/public/images/specialities/andrologi.png new file mode 100644 index 00000000..60acfbab Binary files /dev/null and b/public/images/specialities/andrologi.png differ diff --git a/public/images/specialities/anesthesia.png b/public/images/specialities/anesthesia.png new file mode 100644 index 00000000..57614d48 Binary files /dev/null and b/public/images/specialities/anesthesia.png differ diff --git a/public/images/specialities/bedah-plastik-estetik.png b/public/images/specialities/bedah-plastik-estetik.png new file mode 100644 index 00000000..30c79792 Binary files /dev/null and b/public/images/specialities/bedah-plastik-estetik.png differ diff --git a/public/images/specialities/bedah-umum.png b/public/images/specialities/bedah-umum.png new file mode 100644 index 00000000..fbb772d3 Binary files /dev/null and b/public/images/specialities/bedah-umum.png differ diff --git a/public/images/specialities/cardiologist.png b/public/images/specialities/cardiologist.png new file mode 100644 index 00000000..3327bc60 Binary files /dev/null and b/public/images/specialities/cardiologist.png differ diff --git a/public/images/specialities/dokter-layanan-primer.png b/public/images/specialities/dokter-layanan-primer.png new file mode 100644 index 00000000..d5184071 Binary files /dev/null and b/public/images/specialities/dokter-layanan-primer.png differ diff --git a/public/images/specialities/emergency-medicine.png b/public/images/specialities/emergency-medicine.png new file mode 100644 index 00000000..cfdaef43 Binary files /dev/null and b/public/images/specialities/emergency-medicine.png differ diff --git a/public/images/specialities/farmakologi-klinik.png b/public/images/specialities/farmakologi-klinik.png new file mode 100644 index 00000000..9d9b10fb Binary files /dev/null and b/public/images/specialities/farmakologi-klinik.png differ diff --git a/public/images/specialities/fisioterapi.png b/public/images/specialities/fisioterapi.png new file mode 100644 index 00000000..e480b3a4 Binary files /dev/null and b/public/images/specialities/fisioterapi.png differ diff --git a/public/images/specialities/forensik-dan-Medikolegal.png b/public/images/specialities/forensik-dan-Medikolegal.png new file mode 100644 index 00000000..b5faae7b Binary files /dev/null and b/public/images/specialities/forensik-dan-Medikolegal.png differ diff --git a/public/images/specialities/gizi-klinik.png b/public/images/specialities/gizi-klinik.png new file mode 100644 index 00000000..a0efb929 Binary files /dev/null and b/public/images/specialities/gizi-klinik.png differ diff --git a/public/images/specialities/hd.png b/public/images/specialities/hd.png new file mode 100644 index 00000000..4d9d0bd2 Binary files /dev/null and b/public/images/specialities/hd.png differ diff --git a/public/images/specialities/igd.png b/public/images/specialities/igd.png new file mode 100644 index 00000000..d4a5983f Binary files /dev/null and b/public/images/specialities/igd.png differ diff --git a/public/images/specialities/kedokteran-fisik-dan-rehabilitasi.png b/public/images/specialities/kedokteran-fisik-dan-rehabilitasi.png new file mode 100644 index 00000000..920b4a49 Binary files /dev/null and b/public/images/specialities/kedokteran-fisik-dan-rehabilitasi.png differ diff --git a/public/images/specialities/kedokteran-kelautan.png b/public/images/specialities/kedokteran-kelautan.png new file mode 100644 index 00000000..25ce12b9 Binary files /dev/null and b/public/images/specialities/kedokteran-kelautan.png differ diff --git a/public/images/specialities/kedokteran-nuklir.png b/public/images/specialities/kedokteran-nuklir.png new file mode 100644 index 00000000..7158b65e Binary files /dev/null and b/public/images/specialities/kedokteran-nuklir.png differ diff --git a/public/images/specialities/kedokteran-olahraga.png b/public/images/specialities/kedokteran-olahraga.png new file mode 100644 index 00000000..525c1c73 Binary files /dev/null and b/public/images/specialities/kedokteran-olahraga.png differ diff --git a/public/images/specialities/kedokteran-penerbangan.png b/public/images/specialities/kedokteran-penerbangan.png new file mode 100644 index 00000000..a4a8bdf0 Binary files /dev/null and b/public/images/specialities/kedokteran-penerbangan.png differ diff --git a/public/images/specialities/kesehatan-jiwa.png b/public/images/specialities/kesehatan-jiwa.png new file mode 100644 index 00000000..2bda187f Binary files /dev/null and b/public/images/specialities/kesehatan-jiwa.png differ diff --git a/public/images/specialities/kids.png b/public/images/specialities/kids.png new file mode 100644 index 00000000..43940274 Binary files /dev/null and b/public/images/specialities/kids.png differ diff --git a/public/images/specialities/kulit-dan-kelamin.png b/public/images/specialities/kulit-dan-kelamin.png new file mode 100644 index 00000000..c757cd61 Binary files /dev/null and b/public/images/specialities/kulit-dan-kelamin.png differ diff --git a/public/images/specialities/lungs.png b/public/images/specialities/lungs.png new file mode 100644 index 00000000..321d7a6d Binary files /dev/null and b/public/images/specialities/lungs.png differ diff --git a/public/images/specialities/mikrobiologi-klinik.png b/public/images/specialities/mikrobiologi-klinik.png new file mode 100644 index 00000000..c935cefd Binary files /dev/null and b/public/images/specialities/mikrobiologi-klinik.png differ diff --git a/public/images/specialities/obgyn.png b/public/images/specialities/obgyn.png new file mode 100644 index 00000000..3ae6c624 Binary files /dev/null and b/public/images/specialities/obgyn.png differ diff --git a/public/images/specialities/onkologi-Radiasi-1.png b/public/images/specialities/onkologi-Radiasi-1.png new file mode 100644 index 00000000..6c04ff4d Binary files /dev/null and b/public/images/specialities/onkologi-Radiasi-1.png differ diff --git a/public/images/specialities/onkologi-radiasi.png b/public/images/specialities/onkologi-radiasi.png new file mode 100644 index 00000000..13168a3f Binary files /dev/null and b/public/images/specialities/onkologi-radiasi.png differ diff --git a/public/images/specialities/ophthalmologist.png b/public/images/specialities/ophthalmologist.png new file mode 100644 index 00000000..88b220ae Binary files /dev/null and b/public/images/specialities/ophthalmologist.png differ diff --git a/public/images/specialities/ortopedi-dan-traumatologi.png b/public/images/specialities/ortopedi-dan-traumatologi.png new file mode 100644 index 00000000..dd9c6e53 Binary files /dev/null and b/public/images/specialities/ortopedi-dan-traumatologi.png differ diff --git a/public/images/specialities/parasitologi-klinik.png b/public/images/specialities/parasitologi-klinik.png new file mode 100644 index 00000000..0d135b4d Binary files /dev/null and b/public/images/specialities/parasitologi-klinik.png differ diff --git a/public/images/specialities/patologi-anatomi.png b/public/images/specialities/patologi-anatomi.png new file mode 100644 index 00000000..8b556e0c Binary files /dev/null and b/public/images/specialities/patologi-anatomi.png differ diff --git a/public/images/specialities/patologi-klinik.png b/public/images/specialities/patologi-klinik.png new file mode 100644 index 00000000..760eed49 Binary files /dev/null and b/public/images/specialities/patologi-klinik.png differ diff --git a/public/images/specialities/penyakit-dalam.png b/public/images/specialities/penyakit-dalam.png new file mode 100644 index 00000000..5b140248 Binary files /dev/null and b/public/images/specialities/penyakit-dalam.png differ diff --git a/public/images/specialities/psikolog.png b/public/images/specialities/psikolog.png new file mode 100644 index 00000000..f2b7dfb5 Binary files /dev/null and b/public/images/specialities/psikolog.png differ diff --git a/public/images/specialities/radiologi.png b/public/images/specialities/radiologi.png new file mode 100644 index 00000000..04554ca4 Binary files /dev/null and b/public/images/specialities/radiologi.png differ diff --git a/public/images/specialities/saraf.png b/public/images/specialities/saraf.png new file mode 100644 index 00000000..e1493160 Binary files /dev/null and b/public/images/specialities/saraf.png differ diff --git a/public/images/specialities/teeth.png b/public/images/specialities/teeth.png new file mode 100644 index 00000000..0c5528bf Binary files /dev/null and b/public/images/specialities/teeth.png differ diff --git a/public/images/specialities/tht.png b/public/images/specialities/tht.png new file mode 100644 index 00000000..c0644bae Binary files /dev/null and b/public/images/specialities/tht.png differ diff --git a/public/images/specialities/urologi.png b/public/images/specialities/urologi.png new file mode 100644 index 00000000..d4a9b619 Binary files /dev/null and b/public/images/specialities/urologi.png differ