Edit File: ProfileService.php
<?php namespace App\Services; use App\Enums\AuthUpdatesAttributesEnum; use App\Models\Delegate; class ProfileService extends BaseService { public function __construct($model) { parent::__construct($model); } public function editProfile($request): array { $user = auth()->user(); $user->update($request); return ['key' => 'success', 'msg' => __('apis.success'), 'user' => $user->refresh()]; } public function editProfileRquest($request): array { if (auth()->user()->profileUpdates()->where('status', 0)->exists()) { return ['key' => 'fail', 'msg' => __('apis.has_already_edit_request_sent')]; } auth()->user()->profileUpdates()->create($request); return ['key' => 'success', 'msg' => __('apis.profile_update_request_sent')]; } public function storeAtUpdates(string $type, $user, $request = null): array { $updateData = [ 'type' => $type, 'code' => '' ]; if (in_array($type, [AuthUpdatesAttributesEnum::Email->value, AuthUpdatesAttributesEnum::NewEmail->value])) { $updateData['attribute'] = $request?->email ?? $user->email; } else { $updateData['country_code'] = $request?->country_code ?? $user->country_code; $updateData['attribute'] = $request?->phone ?? $user->phone; } $update = $user->authUpdates()->updateOrCreate(['type' => $updateData['type']], $updateData); $this->sendCode($user, $update); return match ((int)$type) { AuthUpdatesAttributesEnum::Email->value, AuthUpdatesAttributesEnum::NewEmail->value => ['email' => $update->attribute], default => ['phone' => $update->attribute, 'country_code' => $update->country_code], }; } protected function sendCode($user, $update): void { match ($update->attribute) { filter_var($update->attribute, FILTER_VALIDATE_EMAIL) => $user->sendCodeAtEmail($update->code, $update->attribute), default => $user->sendCodeAtSms($update->code, $update->country_code . $update->attribute), }; } public function verifyCode($user, $request): array { $row = $user->authUpdates()->where([ 'attribute' => $request->phone ?? $request->email, 'country_code' => $request->country_code, 'code' => $request->code, 'type' => $request->type ])->first(); $result = match ($row->type) { AuthUpdatesAttributesEnum::Email->value, AuthUpdatesAttributesEnum::Phone->value => [ $row->update(['code' => null]), 'msg' => __('apis.code_verified'), ], AuthUpdatesAttributesEnum::NewPhone->value => [ $user->update([ 'phone' => $row->attribute, 'country_code' => $row->country_code, ]), $user->authUpdates()->whereIn('type', [AuthUpdatesAttributesEnum::Phone->value, AuthUpdatesAttributesEnum::NewPhone->value])->delete(), 'msg' => __('apis.phone_changed'), ], AuthUpdatesAttributesEnum::NewEmail->value => [ $user->update(['email' => $row->attribute]), $user->authUpdates()->whereIn('type', [AuthUpdatesAttributesEnum::Email->value, AuthUpdatesAttributesEnum::NewEmail->value])->delete(), 'msg' => __('apis.email_changed'), ], default => [ 'msg' => __('apis.invalid_code') ], }; return [ 'key' => 'success', 'msg' => $result['msg'], ]; } // Will used For Provider and delegate public function toggleOrderReceivingAvailability($user): array { $user->update(['is_available_to_recieve_orders' => !$user->is_available_to_recieve_orders]); return ['key' => 'success', 'msg' => __('apis.updated'), 'data' => [ 'is_available_to_recieve_orders' => $user->refresh()->is_available_to_recieve_orders ]]; } }
Back to File Manager