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/UserController.php
<?php

namespace App\Http\Controllers\api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Requests\CostPerConsultationRequest;
use App\Http\Requests\PreferredOnlineConsultationsRequest;
use App\Http\Requests\UserStatusRequest;
use App\Http\Requests\UserTokenUpdateRequest;
use App\Http\Requests\UserIdRequest;
use App\Http\Resources\UserResource;
use App\Http\Resources\UserCollection;
use App\ConsultationDetail;
use App\ConsultationPrice;
use App\Language;
use App\Subscription;
use App\Sumsub;
use App\User;
use App\UserPharmacy;
use App\UserDetails;
use App\UserLanguage;
use Auth;
use Config;
use Illuminate\Support\Facades\DB;
use Exception;
use Illuminate\Database\QueryException;
use Storage;
use Throwable;
use Validator;
use App\Http\Requests\UpdateReportPermissionStatusRequest;

class UserController extends Controller
{
    public function preferredOnlineConsultations(PreferredOnlineConsultationsRequest $request)
    {
        try {
            $validated = $request->validated();
            $authRole = User::find($request->user_id);
            if (! $authRole->hasRole(['doctor'])) {
                return self::sentResponse(401, [], __('digimed_validation.error_response.not_authorized'));
            }

            DB::beginTransaction();

            $userDetails = UserDetails::where('user_id', $request->user_id)->first();

            $language_id = $request->language_id;
            if (isset($language_id)) {
                /** @var string $language_id */
                $language_idArr = explode(',', $language_id);
                for ($i = 0; $i < count($language_idArr); $i++) {
                    $query = new UserLanguage();
                    $queryBuilder = $query->where('user_detail_id', $userDetails->id)->where('language_id', $language_idArr[$i])->first();
                    if ($queryBuilder != '') {
                        $deleteLogic = $query->find($queryBuilder->id);
                        $deleteLogic->update(['deleted_by' => $request->user_id]);
                        $deleteLogic->delete();
                    } else {
                        $query->user_detail_id = $userDetails->id;
                        $query->language_id = $language_idArr[$i];
                        $query->created_by = $request->user_id;
                        $query->save();
                    }
                }
            }

            if (! empty($request->audio_call)) {
                $audio_call = $request->audio_call;
            } else {
                $audio_call = 0;
            }
            if (! empty($request->chat)) {
                $chat = $request->chat;
            } else {
                $chat = 0;
            }
            if (! empty($request->video_call)) {
                $video_call = $request->video_call;
            } else {
                $video_call = 0;
            }
            if(!empty($request->hospital_visit)) {
                $hospital_visit = $request->hospital_visit;
            } else {
                $hospital_visit = 0;
            }
            if(!empty($request->home_visit)) {
                $home_visit = $request->home_visit;
            } else {
                $home_visit = 0;
            }


            /**
             * @var int $audio_call
             * @var int $chat
             * @var int $video_call
             * @var int $hospital_visit
             * @var int $home_visit
             */
            if ($userDetails) {
                $userDetails->updated_by = $request->user_id;
            } else {
                $userDetails = new UserDetails();
                $userDetails->user_id = $request->user_id;
                $userDetails->created_by = $request->user_id;
            }

            $userDetails->audio_call = $audio_call;
            $userDetails->chat = $chat;
            $userDetails->video_call = $video_call;
            $userDetails->hospital_visit = $hospital_visit;
            $userDetails->home_visit = $home_visit;
            $userDetails->save();
            DB::commit();

            return self::sentResponse(200, [], __('digimed_validation.success_response.consultation_saved_success'));
        } catch (Exception | Throwable | QueryException $e) {
            DB::rollback();

            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    public function costPerConsultation(CostPerConsultationRequest $request)
    {
        try {
            $home_visit_currency_code = $request->home_visit_currency_code;
            $home_visit_price = $request->home_visit_price;
            /**
             * @var string|null $home_visit_currency_code
             * @var int|float|null $home_visit_price
             */
            $validated = $request->validated();

            $authRole = User::find($request->user_id);
            if (! $authRole->hasRole(['doctor'])) {
                return self::sentResponse(401, [], __('digimed_validation.error_response.not_authorized'));
            }

            DB::beginTransaction();
            $query = new ConsultationPrice();
            $queryHomeVisit = $query->firstOrNew(['user_id' => $request->user_id, 'type' => 2]);
            if (isset($home_visit_price)) {
                $queryHomeVisit->user_id = $request->user_id;
                $queryHomeVisit->type = '2';
                $queryHomeVisit->currency_code = $home_visit_currency_code;
                $queryHomeVisit->price = $home_visit_price;
                $queryHomeVisit->created_by = $request->user_id;
                $queryHomeVisit->updated_by = $request->user_id;
                $queryHomeVisit->save();
            }

            $queryOnDemand = ConsultationPrice::firstOrNew(['user_id' => $request->user_id, 'type' => 3]);
            if (isset($request->on_demand_price)) {
                $on_demand_currency_code = $request->on_demand_currency_code;
                $on_demand_price = $request->on_demand_price;
                /**
                 * @var string|null $on_demand_currency_code
                 * @var int|float|null $on_demand_price
                 */
                $queryOnDemand->user_id = $request->user_id;
                $queryOnDemand->type = '3';
                $queryOnDemand->currency_code = $on_demand_currency_code;
                $queryOnDemand->price = $on_demand_price;
                $queryOnDemand->created_by = $request->user_id;
                $queryOnDemand->updated_by = $request->user_id;
                $queryOnDemand->save();
            }

            $queryScheduleAppointment = ConsultationPrice::firstOrNew(['user_id' => $request->user_id, 'type' => 1]);
            if (isset($request->schedule_appointment_price)) {
                $schedule_appointment_currency_code = $request->schedule_appointment_currency_code;
                $schedule_appointment_price = $request->schedule_appointment_price;
                /**
                 * @var string|null $schedule_appointment_currency_code
                 * @var int|float|null $schedule_appointment_price
                 */
                $queryScheduleAppointment->user_id = $request->user_id;
                $queryScheduleAppointment->type = '1';
                $queryScheduleAppointment->currency_code = $schedule_appointment_currency_code;
                $queryScheduleAppointment->price = $schedule_appointment_price;
                $queryScheduleAppointment->created_by = $request->user_id;
                $queryScheduleAppointment->updated_by = $request->user_id;
                $queryScheduleAppointment->save();
            }
            DB::commit();

            return self::sentResponse(200, [], __('digimed_validation.success_response.cost_per_consutation_success'));
        } catch (Exception | Throwable | QueryException $e) {
            DB::rollback();

            return self::sentResponse(500, [], $e->getMessage());
        }
    }

    public function userStatus(UserStatusRequest $request)
    {
        try
        {
            $validated = $request->validated();
            $data_mode = $request->mode;
            /** @var string $data_mode */
            $user = User::role($data_mode)->with('roles')->where('email', $request->email)->first();
            if (! empty($user))
            {
                $user_id = $user->id;
                $status = $user->status;
                if ($status != '2')
                {
                    $response_array = [];
                    return self::sentResponse(401, [], __('digimed_validation.error_response.inactive_user_status'));
                }
                // $sumsub = Sumsub::where('user_id', $user_id)->orderBy('id', 'desc')->first();
                // if (!empty($sumsub))
                // {
                //     $sumsubId = $sumsub->id;
                //     $upload_id = $sumsub->upload_id;
                //     $application_id = $sumsub->application_id;
                //     $status = $sumsub->status;
                //     if($status == '1') {
                        User::where('id', $user_id)->where('user_completion', 1)->update(['user_completion' => Config::get('onboard_lists.for_patient_list.1.id')]);
                        //auto login logic
                        Auth::login($user);
                        $token = auth()->user()->createToken('APIAUTH')->accessToken;
                        $userQ = User::where('id', auth()->user()->id)->with('doctorDocument')->with('userDetail')->first();
                        return new UserResource($userQ, 200, __('digimed_validation.success_response.data_fetch_success'), $token, 1);
                //     } else if($status == '2') {
                //         User::where('id', $user_id)->update(['user_completion' => 1]);
                //         $response_array = ['sumsub'=>'2', 'user_id'=>$user_id];
                //         return self::sentResponse(406, $response_array, __('digimed_validation.error_response.sumsub_rejected'));
                //     } else {
                //         $response_array = ['sumsub' => '0', 'user_id'=>$user_id];
                //         return self::sentResponse(202, $response_array, __('digimed_validation.error_response.awaiting_sumsub_approval'));
                //     }
                // }
                // else
                // {
                //     $response_array = ['sumsub' => '-1', 'user_id'=>$user_id];

                //     return self::sentResponse(404, $response_array, __('digimed_validation.error_response.sumsub_not_found'));
                // }
            }
            else
            {
                $response_array = [];
                return self::sentResponse(401, $response_array, __('digimed_validation.error_response.user_not_found'));
            }
        }
        catch (Exception | Throwable | QueryException $e)
        {
            DB::rollback();
            return self::sentResponse(500, [], $e->getMessage());
        }
    }
    public function userTokenUpdate(UserTokenUpdateRequest $request) {
        try
        {
            $validated = $request->validated();
            /**
             * @var object $user
             */
            $user = Auth::user();
            $user->browser_token = $request->browser_token;
            $user->device_token = $request->device_token;
            $user->save();

            return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }
    
    public function updateStatusLandingFeature(UserIdRequest $request)
    {
        try {

            $user = User::find($request->user_id);
            if($user->hasRole('doctor')) {
                if($request->landing_feature == 'yes') {
                    $user->landing_feature = 'yes';
                } else {
                    $user->landing_feature = 'no';
                }
                $user->updated_by = auth()->user()->id;
                $user->save();

                return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
            } else {
                return self::sentResponse(500, [], __('digimed_validation.error_response.not_authorized'));
            }
        } catch (Exception | Throwable | QueryException $e) {
            return self::sentResponse(500, [], $e->getMessage());
        }
    }
}