%PDF- %PDF-
Direktori : /var/www/html/klinisol/klinisol-api/app/Http/Controllers/Api/v1/ |
Current File : /var/www/html/klinisol/klinisol-api/app/Http/Controllers/Api/v1/DoctorController.php |
<?php namespace App\Http\Controllers\Api\v1; use App\Http\Controllers\Api\ApiController; use App\Http\Requests\Api\v1\Doctor\CreateDoctorRequest; use App\Http\Requests\Api\v1\Doctor\UpdateDoctorRequest; use App\Models\Doctor; use App\Models\ResetPassword; use App\Models\Role; use App\Models\User; use App\Transformers\DoctorTransformer; use App\Transformers\RoleTransformer; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class DoctorController extends ApiController { /** * @param Request $request * @return \Spatie\Fractal\Fractal */ public function index(Request $request) { $result = $this->filterDoctors($request) ->paginate($request->get('perPage')); return $this->withPaginated($result, new DoctorTransformer()); } /** * @param Request $request * @return \Illuminate\Database\Eloquent\Builder */ private function filterDoctors(Request $request) { $result = Doctor::query() ->whereHas('roles', function ($q) { $q->whereIn('name', [ 'doctor', ]); }); if ($name = $request->get('name')) { $result = $result->where('name', 'like', "$name%"); } if ($surname = $request->get('surname')) { $result = $result->where('surname', 'like', "$surname%"); } if ($email = $request->get('email')) { $result = $result->where('email', 'like', "$email%"); } return $result; } /** * @param $id * @return \Illuminate\Http\JsonResponse */ public function show($id) { $doctor = Doctor::query() ->where('id', '=', $id) ->whereHas('roles', function ($q) { $q->whereIn('name', [ Role::DOCTOR, ]); }) ->firstOrFail(); return $this->item($doctor, new DoctorTransformer()); } /** * @param CreateDoctorRequest $request * @return \Illuminate\Http\JsonResponse */ public function store(CreateDoctorRequest $request) { DB::beginTransaction(); try { /** @var User $user */ $doctor = Doctor::query() ->create([ 'name' => $request->get('name'), 'surname' => $request->get('surname'), 'email' => $request->get('email'), 'password' => 'password', 'is_enabled' => true, ]); $role = Role::findByName(Role::DOCTOR); $doctor->roles() ->attach($role); $doctor->hospitals() ->sync($request->get('hospitalIds')); $doctor->protocols() ->sync($request->get('protocolIds')); $token = ResetPassword::generateToken($doctor->email); DB::commit(); $doctor->sendPasswordResetNotificationEmail($token, $request->header('department')); return $this->item($doctor, new DoctorTransformer()); } catch (\Exception $e) { DB::rollBack(); return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } /** * @param UpdateDoctorRequest $request * @param $id * @return \Illuminate\Http\JsonResponse */ public function update(UpdateDoctorRequest $request, $id) { DB::beginTransaction(); try { $doctor = Doctor::query() ->where('id', '=', $id) ->whereHas('roles', function ($q) { $q->whereIn('name', [ Role::DOCTOR, ]); }) ->firstOrFail(); $doctor->update($request->only(['name', 'surname'])); $doctor->hospitals() ->sync($request->get('hospitalIds')); $doctor->protocols() ->sync($request->get('protocolIds')); DB::commit(); return $this->item($doctor, new DoctorTransformer()); } catch (\Exception $e) { DB::rollBack(); return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } /** * @param $id * @return array|\Illuminate\Http\JsonResponse */ public function destroy($id) { /** @var User $user */ $user = User::query() ->findOrFail($id); try { $user->delete(); } catch (\Exception $e) { return $this->wrongArguments([ 'message' => 'Not possible to delete this user for the moment, please contact your system admin!', ]); } return []; } /** * @param $id * @return \Illuminate\Http\JsonResponse */ public function enable($id) { /** @var User $user */ $doctor = Doctor::query() ->where('id', '=', $id) ->whereHas('roles', function ($q) { $q->whereIn('name', [ Role::DOCTOR, ]); }) ->firstOrFail();; $doctor->enable(); return $this->item($doctor, new DoctorTransformer()); } /** * @param $id * @return \Illuminate\Http\JsonResponse */ public function disable($id) { /** @var User $user */ $doctor = Doctor::query() ->where('id', '=', $id) ->whereHas('roles', function ($q) { $q->whereIn('name', [ Role::DOCTOR, ]); }) ->firstOrFail(); $doctor->disable(); return $this->item($doctor, new DoctorTransformer()); } /** * @return \Illuminate\Http\JsonResponse */ public function getRoles() { return $this->collection(Role::query() ->whereIn('name', [ 'admin', 'doctor', ]) ->get(), new RoleTransformer()); } }