This commit is contained in:
R
2022-09-17 00:51:02 +07:00
parent 300b53942d
commit a9f29cd19d
28 changed files with 1122 additions and 13 deletions

View File

@@ -0,0 +1,79 @@
<?php
namespace Modules\Linksehat\Http\Controllers\Api;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class ArticleController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index()
{
return view('linksehat::index');
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('linksehat::create');
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
*/
public function store(Request $request)
{
//
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
{
return view('linksehat::show');
}
/**
* Show the form for editing the specified resource.
* @param int $id
* @return Renderable
*/
public function edit($id)
{
return view('linksehat::edit');
}
/**
* Update the specified resource in storage.
* @param Request $request
* @param int $id
* @return Renderable
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
}
}

View File

@@ -14,22 +14,44 @@ class AuthController extends Controller
public function otpRequest(Request $request)
{
$request->validate([
'phone' => 'required'
// 'phone' => 'required'
'phone_or_email' => 'required'
]);
if(filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL)) {
$user = User::updateOrCreate([
'email' => $request->phone_or_email
], [
'email' => $request->phone_or_email,
'otp' => rand(1000, 9999),
'otp_created_at' => now()
]);
}
else {
$user = User::updateOrCreate([
'phone' => $request->phone
], [
'phone' => $request->phone,
'otp' => rand(1000, 9999),
'otp_created_at' => now()
]);
}
$user = User::updateOrCreate([
'phone' => $request->phone
], [
'phone' => $request->phone,
'otp' => rand(1000, 9999),
'otp_created_at' => now()
]);
if (!$user) {
return response()->json([
'message' => "User dengan nomor telepon ".$request->phone." tidak ditemukan"
'message' => filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL) ?
"User dengan alamat email ".$request->phone_or_email." tidak ditemukan" :
"User dengan nomor telepon ".$request->phone_or_email." tidak ditemukan"
], 404);
}
// TODO Send the OTP
if (filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL)) {
// Send Email
} else {
// Send Whatsapp
}
return response()->json([
'message' => 'OTP Terkirim',
'data' => [
@@ -41,10 +63,12 @@ class AuthController extends Controller
public function login(Request $request)
{
$request->validate([
'email' => 'email',
'password' => 'required_with:email',
'phone' => '',
'otp' => 'required_with:phone',
// 'email' => 'email',
// 'password' => 'required_with:email',
// 'phone' => '',
// 'otp' => 'required_with:phone',
'phone_or_email' => 'required',
'otp' => 'required'
]);
$loginType = null;

View File

@@ -0,0 +1,102 @@
<?php
namespace Modules\Linksehat\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\Practitioner;
use App\Models\PractitionerRole;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Linksehat\Transformers\PractitionerRoleToDoctorDetailResource;
use Modules\Linksehat\Transformers\PractitionerRoleToDoctorResource;
class DoctorController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request)
{
$hospitals = PractitionerRole::query()
->with(['practitioner.person', 'speciality', 'practitioner.metas', 'metas', 'organization'])
->when($request->search ?? null, function($query, $search) {
$query->whereHas('practitioner.person', function($person) use ($search) {
$person->where('name', 'LIKE', '%'.$search.'%');
});
})
->paginate(6);
return response()->json([
'message' => 'Sukses mengambil data Dokter',
'doctors' => Helper::paginateResources(PractitionerRoleToDoctorResource::collection($hospitals))
]);
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('linksehat::create');
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
*/
public function store(Request $request)
{
//
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
{
$doctor = PractitionerRole::query()
->with(['practitioner', 'practitioner.person', 'speciality', 'practitioner.metas', 'metas', 'organization'])
->where('id', $id)
->firstOrFail();
return response()->json(PractitionerRoleToDoctorDetailResource::make($doctor));
}
/**
* Show the form for editing the specified resource.
* @param int $id
* @return Renderable
*/
public function edit($id)
{
return view('linksehat::edit');
}
/**
* Update the specified resource in storage.
* @param Request $request
* @param int $id
* @return Renderable
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
}
}

View File

@@ -0,0 +1,96 @@
<?php
namespace Modules\Linksehat\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\Organization;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Linksehat\Transformers\HospitalResource;
class HospitalController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request)
{
$hospitals = Organization::query()
->with(['currentAddress'])
->where('type', 'hospital')
->when($request->search ?? null, function($query, $search) {
$query->where('name', 'LIKE', '%'.$search.'%');
})
->paginate(6);
return response()->json([
'message' => 'Sukses mengambil data Rumah Sakit',
'hospitals' => Helper::paginateResources(HospitalResource::collection($hospitals))
]);
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('linksehat::create');
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
*/
public function store(Request $request)
{
//
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
{
$hospital = Organization::query()->findOrFail($id);
return response()->json(HospitalResource::make($hospital));
}
/**
* Show the form for editing the specified resource.
* @param int $id
* @return Renderable
*/
public function edit($id)
{
return view('linksehat::edit');
}
/**
* Update the specified resource in storage.
* @param Request $request
* @param int $id
* @return Renderable
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
}
}

View File

@@ -2,6 +2,8 @@
use Illuminate\Http\Request;
use Modules\Linksehat\Http\Controllers\Api\AuthController;
use Modules\Linksehat\Http\Controllers\Api\DoctorController;
use Modules\Linksehat\Http\Controllers\Api\HospitalController;
/*
|--------------------------------------------------------------------------
@@ -18,6 +20,17 @@ Route::post('otp-request', [AuthController::class, 'otpRequest']);
Route::post('login', [AuthController::class, 'login']);
Route::post('register', [AuthController::class, 'register']);
Route::get('articles', [ArticleController::class, 'index']);
Route::get('articles/id', [ArticleController::class, 'show']);
Route::get('hospitals', [HospitalController::class, 'index']);
Route::get('hospitals/{id}', [HospitalController::class, 'show']);
Route::get('doctors/online', [DoctorController::class, 'index']);
Route::get('doctors', [DoctorController::class, 'index']);
Route::get('doctors/{id}', [DoctorController::class, 'show']);
Route::get('doctors/{id}/schedule', [DoctorController::class, 'schedule']);
Route::middleware('auth:api')->get('/linksehat', function (Request $request) {
return $request->user();
});

View File

@@ -0,0 +1,19 @@
<?php
namespace Modules\Linksehat\Transformers;
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 parent::toArray($request);
}
}

View File

@@ -0,0 +1,37 @@
<?php
namespace Modules\Linksehat\Transformers;
use Illuminate\Http\Resources\Json\JsonResource;
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,
'code' => $this->code,
'description' => $this->description,
'address' => $this->currentAddress->text ?? null,
'lat' => $this->currentAddress->lat ?? null,
'lng' => $this->currentAddress->lng ?? null,
'distance' => '200 m',
'city_name' => 'Kota Tangerang',
'phone' => $this->meta->phone,
'photo_url' => asset('images/default-hospital-image.png'),
'photos' => [
[
'title' => $this->name,
'photo_url' => asset('images/default-hospital-image.png'),
]
]
];
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace Modules\Linksehat\Transformers;
use Illuminate\Http\Resources\Json\JsonResource;
class PractitionerRoleToDoctorDetailResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'full_name' => $this->practitioner->person->full_name ?? null,
'name_prefix' => $this->practitioner->person->name_prefix ?? null,
'name' => $this->practitioner->person->name ?? null,
'name_suffix' => $this->practitioner->person->name_suffix ?? null,
'gender' => $this->practitioner->person->gender ?? null,
'speciality_name' => !empty($this->speciality->name ?? null) ? 'Spesialis '. $this->speciality->name : 'Spesialis Empty',
'is_online' => false,
'price_range' => 'Rp 100.000 - Rp 350.000',
'price_start' => '100000',
'price_end' => '350000',
'avatar_url' => asset('images/default-doctor-avatar.png'),
'education' => $this->meta->education ?? '',
'medical_treatment' => $this->meta->medical_treatment ?? '',
'award' => $this->meta->award ?? '',
'work_experience' => $this->meta->work_experience ?? '',
'keilmuan' => $this->meta->keilmuan ?? '',
'description' => $this->meta->description ?? ''
];
return parent::toArray($request);
}
}

View File

@@ -0,0 +1,33 @@
<?php
namespace Modules\Linksehat\Transformers;
use Illuminate\Http\Resources\Json\JsonResource;
class PractitionerRoleToDoctorResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'full_name' => $this->practitioner->person->full_name,
'name_prefix' => $this->practitioner->person->name_prefix,
'name' => $this->practitioner->person->name,
'name_suffix' => $this->practitioner->person->name_suffix,
'gender' => $this->practitioner->person->gender,
'speciality_name' => !empty($this->speciality->name ?? null) ? 'Spesialis '. $this->speciality->name : 'Spesialis Empty',
'is_online' => false,
'price_range' => 'Rp 100.000 - Rp 350.000',
'price_start' => '100000',
'price_end' => '350000',
'avatar_url' => asset('images/default-doctor-avatar.png'),
];
return parent::toArray($request);
}
}