HEX
Server: nginx/1.24.0
System: Linux DGT-WORDPRESS-VM-SERVER 6.14.0-1017-azure #17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 8.4.12
Disabled: NONE
Upload Files
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());
        }
    }
}