File: /mnt/data/ghayatcom/ghayatcom-api/app/Http/Controllers/Api/DiagnosisController.php
<?php
namespace App\Http\Controllers\Api;
use App\Diagnosis;
use App\Http\Controllers\Controller;
use App\Http\Requests\DiagnosisCreateRequest;
use App\Http\Requests\DiagnosisListRequest;
use App\Library\RandomLibrary;
use App\User;
use Auth;
use Carbon\Carbon;
use Config;
use DateTime;
use DB;
use Exception;
use Illuminate\Database\QueryException;
use Illuminate\Http\Request;
use Throwable;
class DiagnosisController extends Controller
{
public function index(DiagnosisListRequest $request)
{
try {
$validated = $request->validated();
$authRole = Auth::user();
$auth_id = auth()->user()->id;
$userRole = User::find($request->patient_id);
if (! ($userRole->hasRole(['patient']) || $userRole->hasRole(['dependant']))) {
return self::sentResponse(401, [], __('digimed_validation.form_validation_error.patient_id_is_not_exisit'));
}
$data = Diagnosis::where('patient_id', $request->patient_id)->where('parent_id', null)->get();
return self::sentResponse(200, $data, __('digimed_validation.success_response.diagnosis_list_success'));
} catch (Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function create(DiagnosisCreateRequest $request, RandomLibrary $randomLibrary)
{
try {
$validated = $request->validated();
$authRole = Auth::user();
$auth_id = auth()->user()->id;
$userRole = User::find($request->patient_id);
if (! ($userRole->hasRole(['patient']) || $userRole->hasRole(['dependant']))) {
return self::sentResponse(401, [], __('digimed_validation.form_validation_error.patient_id_is_not_exisit'));
}
DB::beginTransaction();
$diagnosisCount = Diagnosis::where('appointment_id', $request->appointment_id)->count();
if ($diagnosisCount > 0) {
return self::sentResponse(401, [], __('digimed_validation.form_validation_error.diagnosis_already_exisit_appointment'));
}
$diagnosis = new Diagnosis();
if (! empty($request->parent_id)) {
$diagnosisRefCount = Diagnosis::where('parent_id', $request->parent_id)->count();
$diagnosisRefCount++;
$sub_id = $diagnosisRefCount + 1;
$existDiagnosis = Diagnosis::find($request->parent_id);
$referrence_id = $existDiagnosis->referrence_id;
$data_parent_id = $request->parent_id;
/**
* @var int|null $data_parent_id
*/
$diagnosis->parent_id = $data_parent_id;
} else {
$sub_id = 1;
/** @var string|null $column */
$column = 'referrence_id';
/** @var string $forCondition */
$forCondition = 'diagnosis';
/** @var string|null $referrence_id */
$referrence_id = $randomLibrary->randomPluck(null, new Diagnosis, $column, $forCondition);
}
$diagnosis->referrence_id = $referrence_id;
$diagnosis->sub_id = $sub_id;
$diagnosis->appointment_id = $request->appointment_id;
$diagnosis->patient_id = $request->patient_id;
$data_diagnosis_name = $request->diagnosis_name;
$data_diagnosis_desc = $request->diagnosis_description;
/**
* @var string $data_diagnosis_name
* @var string $data_diagnosis_desc
*/
$diagnosis->name = $data_diagnosis_name;
$diagnosis->description = $data_diagnosis_desc;
$diagnosis->created_by = $auth_id;
$diagnosis->save();
DB::commit();
return self::sentResponse(200, [], __('digimed_validation.success_response.diagnosis_stored_success'));
} catch (Exception | Throwable | QueryException $e) {
DB::rollback();
return self::sentResponse(500, [], $e->getMessage());
}
}
}