%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/klinisol/klinisol-api/app/Http/Controllers/Api/v1/
Upload File :
Create Path :
Current File : /var/www/html/klinisol/klinisol-api/app/Http/Controllers/Api/v1/PatientController.php

<?php

namespace App\Http\Controllers\Api\v1;

use App\Http\Controllers\Api\ApiController;
use App\Http\Controllers\Controller;
use App\Http\Requests\Api\v1\Patient\CreatePatientRequest;
use App\Http\Requests\Api\v1\Patient\UpdatePatientRequest;
use App\Models\Patient;
use App\Transformers\PatientTransformer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class PatientController extends ApiController
{
    /**
     * @param Request $request
     * @return \Spatie\Fractal\Fractal
     */
    public function index(Request $request)
    {
        $result = $this->filterPatient($request)
                       ->paginate($request->get('perPage'));
        return $this->withPaginated($result, new PatientTransformer());
    }

    /**
     * @param Request $request
     * @return \Illuminate\Database\Eloquent\Builder
     */
    private function filterPatient(Request $request)
    {
        $result = Patient::query();

        if ($code = $request->get('code')) {
            $result = $result->where('code', 'like', "$code%");
        }
        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%");
        }
        if ($phone = $request->get('phone')) {
            $result = $result->where('phone', 'like', "$phone%");
        }
        return $result;
    }

    /**
     * @param $id
     * @return \Illuminate\Http\JsonResponse
     */
    public function show($id)
    {
        $patient = Patient::query()
                          ->findOrFail($id);
        return $this->item($patient, new PatientTransformer());
    }

    /**
     * @param CreatePatientRequest $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function store(CreatePatientRequest $request)
    {
        DB::beginTransaction();
        try {

            $patient = Patient::query()
                              ->create([
                                  'name'    => $request->get('name'),
                                  'surname' => $request->get('surname'),
                                  'email'   => $request->get('email'),
                                  'phone'   => $request->get('phone'),
                                  'code'    => uniqid(),
                              ]);

            $patient->hospitals()
                    ->sync($request->get('hospitalIds'));

            $patient->protocols()
                    ->sync($request->get('protocolIds'));
            DB::commit();
            $patient->patientAddedNotification();
            return $this->item($patient, new PatientTransformer);
        } catch (\Exception $e) {
            DB::rollBack();
            return $this->wrongArguments([
                'message' => $e->getMessage(),
            ]);
        }
    }

    /**
     * @param UpdatePatientRequest $request
     * @param $id
     * @return \Illuminate\Http\JsonResponse
     */
    public function update(UpdatePatientRequest $request, $id)
    {
        DB::beginTransaction();
        try {

            $patient = Patient::query()
                              ->findOrFail($id);
            $patient->update($request->only(['name', 'surname', 'email', 'phone']));

            $patient->hospitals()
                    ->sync($request->get('hospitalIds'));

            $patient->protocols()
                    ->sync($request->get('protocolIds'));

            DB::commit();
            return $this->item($patient, new PatientTransformer);
        } catch (\Exception $e) {
            DB::rollBack();
            return $this->wrongArguments([
                'message' => $e->getMessage(),
            ]);
        }
    }
}

Zerion Mini Shell 1.0