diff --git a/app/Http/Controllers/MobileApiController.php b/app/Http/Controllers/MobileApiController.php index 0f1bae0..91ab30d 100644 --- a/app/Http/Controllers/MobileApiController.php +++ b/app/Http/Controllers/MobileApiController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use A7kz\Platform\Models\UniModel; use A7kz\Platform\Modules\Platform\Acl\Facades\Acl; use A7kz\Platform\Modules\Platform\Segment\Facades\Segment; +use App\Models\User; use App\Modules\applications\Enum\ApplicationStatus; use App\Modules\auto\Enums\AutoStatusEnums; use App\Service\DepositService; @@ -63,85 +64,86 @@ class MobileApiController extends Controller * @throws Exception */ public function sendApplication(Request $request): JsonResponse { - $data = $request->all(); - $data['started_at'] = Carbon::createFromFormat('d-m-Y H:i', $data['started_at']); - $data['ended_at'] = Carbon::createFromFormat('d-m-Y H:i', $data['ended_at']); - $authToken = null; - $data['car_id'] = null; - if ($request->header('Authorization')) { - $user = auth()->guard('api')->user(); - $data['user_id'] = $user?->id; - $authToken = $request->header('Authorization'); - } else { - $user = UniModel::model('core_users') - ->where('email', $data['email']) - ->first(); - - if ($user) { - $data['user_id'] = $user->id; - $tokenResult = $user->createToken('auth_token'); - $authToken = $tokenResult->accessToken; + try { + $data = $request->all(); + $data['started_at'] = Carbon::createFromFormat('d-m-Y H:i', $data['started_at']); + $data['ended_at'] = Carbon::createFromFormat('d-m-Y H:i', $data['ended_at']); + $authToken = null; + $data['car_id'] = null; + if ($request->header('Authorization')) { + $user = auth()->guard('api')->user(); + $data['user_id'] = $user?->id; + $authToken = $request->header('Authorization'); } else { - $data['user_id'] = null; + $user = User::where('email', $data['email'])->first(); + + if ($user) { + $data['user_id'] = $user->id; + $tokenResult = $user->createToken('auth_token'); + $authToken = $tokenResult->plainTextToken; + } else { + $data['user_id'] = null; + } } - } + $response = [ + 'status' => 'OK', + 'message' => 'Заявка создана', + ]; - $response = [ - 'status' => 'OK', - 'message' => 'Заявка создана', - ]; - - $car = $this->getAvailableCar($data['started_at'], $data['ended_at'], $data['mark_id'], $data['color_code']); - $status = ApplicationStatus::pending->value; - if (!isset($car)) { - return response()->json('Нет свободных машин'); - } - $data['car_id'] = $car->id; - if ($data['user_id']) { - $period = CarbonPeriod::create($data['started_at'], $data['ended_at']); - - $dates = array_map(fn($date) => $date->toDateString(), iterator_to_array($period)); - - foreach ($dates as $date) { - UniModel::model('pipi_auto_calendar')->create([ - 'auto_id' => $data['car_id'], - 'date' => $date, - 'status' => AutoStatusEnums::Rent->name - ]); + $car = $this->getAvailableCar($data['started_at'], $data['ended_at'], $data['mark_id'], $data['color_code']); + $status = ApplicationStatus::pending->value; + if (!isset($car)) { + return response()->json('Нет свободных машин'); } - $status = ApplicationStatus::approved->value; - $response['auth_token'] = $authToken; - $response['message'] = 'Заявка создана, и вы были автоматически авторизованы'; - } elseif (!isset($data['user_id'])) { - $response['message'] = 'Заявка создана, с вами свяжется наш оператор'; - } - $address_end = UniModel::model('pipi_address')->where('name', $data['address_end'])->first(); - $address_start = UniModel::model('pipi_address')->where('name', $data['address_start'])->first(); - $service = new DepositService; - $sums = $service->calculateSummary($data['mark_id'], $data['started_at'], $data['ended_at']); - $sum = $sums['discounted_sum']; - if ($data['deposit'] != $sums['deposit_base']) { - $sum += $data['deposit']; - } - UniModel::model('pipi_applications')->create([ - 'rent_day' => $data['rent_day'], - 'started_at' => $data['started_at'], - 'ended_at' => $data['ended_at'], - 'user_id' => $data['user_id'], - 'phone' => $user?->phone ?? $data['phone'] ?? '' , - 'car_id' => $data['car_id'], - 'user_name' => $user?->name ?? $data['name'] ?? null, - 'user_surname' => $user?->name ?? $data['surname'] ?? null, - 'user_email' => $user?->email ?? $data['email'] ?? null, - 'address_end' => $address_end?->id, - 'address_start' => $address_start?->id, - 'deposit' => $data['deposit'] ?? null, - 'status' => $status, - 'sum' => $sum - ]); + $data['car_id'] = $car->id; + if ($data['user_id']) { + $period = CarbonPeriod::create($data['started_at'], $data['ended_at']); - return response()->json($response); + $dates = array_map(fn($date) => $date->toDateString(), iterator_to_array($period)); + + foreach ($dates as $date) { + UniModel::model('pipi_auto_calendar')->create([ + 'auto_id' => $data['car_id'], + 'date' => $date, + 'status' => AutoStatusEnums::Rent->name + ]); + } + $status = ApplicationStatus::approved->value; + $response['auth_token'] = $authToken; + $response['message'] = 'Заявка создана, и вы были автоматически авторизованы'; + } elseif (!isset($data['user_id'])) { + $response['message'] = 'Заявка создана, с вами свяжется наш оператор'; + } + $address_end = UniModel::model('pipi_address')->where('name', $data['address_end'])->first(); + $address_start = UniModel::model('pipi_address')->where('name', $data['address_start'])->first(); + $service = new DepositService; + $sums = $service->calculateSummary($data['mark_id'], $data['started_at'], $data['ended_at']); + $sum = $sums['discounted_sum']; + if ($data['deposit'] != $sums['deposit_base']) { + $sum += $data['deposit']; + } + UniModel::model('pipi_applications')->create([ + 'rent_day' => $data['rent_day'], + 'started_at' => $data['started_at'], + 'ended_at' => $data['ended_at'], + 'user_id' => $data['user_id'], + 'phone' => $user?->phone ?? $data['phone'] ?? '' , + 'car_id' => $data['car_id'], + 'user_name' => $user?->name ?? $data['name'] ?? null, + 'user_surname' => $user?->name ?? $data['surname'] ?? null, + 'user_email' => $user?->email ?? $data['email'] ?? null, + 'address_end' => $address_end?->id, + 'address_start' => $address_start?->id, + 'deposit' => $data['deposit'] ?? null, + 'status' => $status, + 'sum' => $sum + ]); + + return response()->json($response); + } catch (Exception $e) { + return response()->json($e->getMessage()); + } } public function getApplications(): JsonResponse