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());
}
}
}