add api linksehat/dashboard
This commit is contained in:
@@ -0,0 +1,48 @@
|
|||||||
|
<?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;
|
||||||
|
use Modules\Linksehat\Transformers\Dashboard\HospitalResource;
|
||||||
|
use Modules\Linksehat\Transformers\Dashboard\ArticleResource;
|
||||||
|
use SebastianBergmann\Invoker\TimeoutException;
|
||||||
|
|
||||||
|
class DashboardController extends Controller
|
||||||
|
{
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
$queryDoctors = PractitionerRole::query()
|
||||||
|
->with([
|
||||||
|
'practitioner.person', 'speciality'
|
||||||
|
])
|
||||||
|
->whereHas('speciality')->get()->random(5);
|
||||||
|
|
||||||
|
|
||||||
|
$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);
|
||||||
|
})
|
||||||
|
->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)
|
||||||
|
->get();
|
||||||
|
|
||||||
|
$doctors = DoctorResource::collection($queryDoctors);
|
||||||
|
$hospitals = HospitalResource::collection($queryHospitals);
|
||||||
|
$articles = ArticleResource::collection(json_decode(Http::get('https://linksehat.com/api/medical-assistance-articles')));
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'statusCode' => 200,
|
||||||
|
'message' => 'Success',
|
||||||
|
'data' => compact('doctors', 'hospitals', 'articles'),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -62,6 +62,7 @@ class RouteServiceProvider extends ServiceProvider
|
|||||||
protected function mapApiRoutes()
|
protected function mapApiRoutes()
|
||||||
{
|
{
|
||||||
Route::middleware('api')
|
Route::middleware('api')
|
||||||
|
->prefix('api')
|
||||||
->namespace($this->moduleNamespace)
|
->namespace($this->moduleNamespace)
|
||||||
->group(module_path('Linksehat', '/Routes/api.php'));
|
->group(module_path('Linksehat', '/Routes/api.php'));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Modules\Linksehat\Http\Controllers\Api\AuthController;
|
use Modules\Linksehat\Http\Controllers\Api\AuthController;
|
||||||
|
use Modules\Linksehat\Http\Controllers\Api\DashboardController;
|
||||||
use Modules\Linksehat\Http\Controllers\Api\DoctorController;
|
use Modules\Linksehat\Http\Controllers\Api\DoctorController;
|
||||||
use Modules\Linksehat\Http\Controllers\Api\HospitalController;
|
use Modules\Linksehat\Http\Controllers\Api\HospitalController;
|
||||||
use Modules\Linksehat\Http\Controllers\Api\ProfileController;
|
use Modules\Linksehat\Http\Controllers\Api\ProfileController;
|
||||||
@@ -16,31 +17,34 @@ use Modules\Linksehat\Http\Controllers\Api\ProfileController;
|
|||||||
| is assigned the "api" middleware group. Enjoy building your API!
|
| is assigned the "api" middleware group. Enjoy building your API!
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Route::prefix('linksehat')->group(function () {
|
Route::prefix('linksehat')->group(function () {
|
||||||
|
|
||||||
|
Route::get('dashboard', [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']);
|
||||||
Route::post('login', [AuthController::class, 'login']);
|
Route::post('login', [AuthController::class, 'login']);
|
||||||
Route::post('register', [AuthController::class, 'register']);
|
Route::post('register', [AuthController::class, 'register']);
|
||||||
|
|
||||||
// Route::get('articles', [ArticleController::class, 'index']);
|
// Route::get('articles', [ArticleController::class, 'index']);
|
||||||
// Route::get('articles/id', [ArticleController::class, 'show']);
|
// Route::get('articles/id', [ArticleController::class, 'show']);
|
||||||
|
|
||||||
Route::get('hospitals', [HospitalController::class, 'index']);
|
Route::get('hospitals', [HospitalController::class, 'index']);
|
||||||
Route::get('hospitals/{id}', [HospitalController::class, 'show']);
|
Route::get('hospitals/{id}', [HospitalController::class, 'show']);
|
||||||
|
|
||||||
Route::get('doctors/online', [DoctorController::class, 'index'])->name('doctors.online');
|
Route::get('doctors/online', [DoctorController::class, 'index'])->name('doctors.online');
|
||||||
Route::get('doctors', [DoctorController::class, 'index'])->name('doctors.index');
|
Route::get('doctors', [DoctorController::class, 'index'])->name('doctors.index');
|
||||||
Route::get('doctors/{id}', [DoctorController::class, 'show'])->name('doctors.show');
|
Route::get('doctors/{id}', [DoctorController::class, 'show'])->name('doctors.show');
|
||||||
Route::post('doctors/{id}/schedule', [DoctorController::class, 'schedule'])->name('doctors.schedule');
|
Route::post('doctors/{id}/schedule', [DoctorController::class, 'schedule'])->name('doctors.schedule');
|
||||||
|
|
||||||
// Route::middleware('auth:api')->get('/linksehat', function (Request $request) {
|
// Route::middleware('auth:api')->get('/linksehat', function (Request $request) {
|
||||||
// return $request->user();
|
// return $request->user();
|
||||||
// });
|
// });
|
||||||
|
|
||||||
|
|
||||||
Route::middleware('auth:sanctum')->group(function () {
|
Route::middleware('auth:sanctum')->group(function () {
|
||||||
Route::get('profile', [ProfileController::class, 'index'])->name('profile');
|
Route::get('profile', [ProfileController::class, 'index'])->name('profile');
|
||||||
Route::post('profile', [ProfileController::class, 'update'])->name('profile.update');
|
Route::post('profile', [ProfileController::class, 'update'])->name('profile.update');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
28
Modules/Linksehat/Transformers/Dashboard/ArticleResource.php
Normal file
28
Modules/Linksehat/Transformers/Dashboard/ArticleResource.php
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Linksehat\Transformers\Dashboard;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class ArticleResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'nID' => $this->nID,
|
||||||
|
'sSlug' => $this->sSlug,
|
||||||
|
'title' => $this->sJudulArtikel,
|
||||||
|
'deskripsi' => $this->sMetaDeskripsi,
|
||||||
|
'photos' => [
|
||||||
|
'title' => $this->sSlug,
|
||||||
|
'url' => $this->sImages
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
27
Modules/Linksehat/Transformers/Dashboard/DoctorResource.php
Normal file
27
Modules/Linksehat/Transformers/Dashboard/DoctorResource.php
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Linksehat\Transformers\Dashboard;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class DoctorResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => $this->practitioner->person->id,
|
||||||
|
'name' => $this->practitioner->person->name,
|
||||||
|
'specialis' => $this->speciality->name,
|
||||||
|
'photos' => [
|
||||||
|
'title' => 'doctors-avatar-' . $this->id,
|
||||||
|
'url' => asset('images/default-doctor-avatar.png')
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Linksehat\Transformers\Dashboard;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
use Str;
|
||||||
|
|
||||||
|
class HospitalResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => $this->id,
|
||||||
|
'name' => $this->name,
|
||||||
|
'address' => $this->currentAddress ?? null,
|
||||||
|
'distance' => $this->distance < 1 ? round($this->distance * 1000, 2) . " m" : round($this->distance, 2) . " km",
|
||||||
|
'photos' => [
|
||||||
|
'title' => Str::slug($this->name),
|
||||||
|
'url' => asset('images/default-doctor-avatar.png')
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user