/
itp_practice
/
itp_backend
Обзор
Документация
Войти
/
itp_practice
/
itp_backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/Http/Controllers/PurchaseFromCartController.php
157 строк
5 KB
vivanenko
cart
27 май 2025, 11:45
27 май 2025, 11:45
934cbb5
Код
Авторство
О чём код?
<?php namespace App\Http\Controllers; use App\Enums\Currency; use App\Enums\PaymentMethod; use App\Services\PurchaseFromCartService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Validation\Rule; class PurchaseFromCartController extends Controller { public function __construct( private readonly PurchaseFromCartService $purchaseFromCartService ) {} /** * Get checkout preview from cart */ public function preview(Request $request): JsonResponse { try { $userId = $request->user()->id; $preview = $this->purchaseFromCartService->getCartCheckoutPreview($userId); return response()->json([ 'message' => 'Checkout preview retrieved successfully', 'data' => $preview, ]); } catch (\InvalidArgumentException $e) { return response()->json([ 'message' => $e->getMessage(), ], 422); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to get checkout preview', 'error' => $e->getMessage(), ], 500); } } /** * Validate cart for checkout */ public function validateCart(Request $request): JsonResponse { try { $userId = $request->user()->id; $validation = $this->purchaseFromCartService->validateCartForCheckout($userId); return response()->json([ 'message' => 'Cart validation completed', 'data' => $validation, ]); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to validate cart', 'error' => $e->getMessage(), ], 500); } } /** * Create individual purchases from cart items */ public function createPurchases(Request $request): JsonResponse { $request->validate([ 'payment_method' => [ 'required', 'string', Rule::in(['card', 'crypto', 'bank_transfer']), ], 'currency' => [ 'string', Rule::in(['USD', 'EUR', 'RUB']), ], ]); try { $userId = $request->user()->id; $paymentMethod = PaymentMethod::from($request->string('payment_method')); $currency = Currency::from($request->string('currency', 'USD')); $result = $this->purchaseFromCartService->createPurchaseFromCart( $userId, $paymentMethod, $currency ); return response()->json([ 'message' => 'Purchases created successfully from cart', 'data' => $result, ], 201); } catch (\InvalidArgumentException $e) { return response()->json([ 'message' => $e->getMessage(), ], 422); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to create purchases from cart', 'error' => $e->getMessage(), ], 500); } } /** * Create single combined purchase from cart */ public function createCombinedPurchase(Request $request): JsonResponse { $request->validate([ 'payment_method' => [ 'required', 'string', Rule::in(['card', 'crypto', 'bank_transfer']), ], 'currency' => [ 'string', Rule::in(['USD', 'EUR', 'RUB']), ], 'combined_tariff_name' => [ 'string', 'max:255', ], ]); try { $userId = $request->user()->id; $paymentMethod = PaymentMethod::from($request->string('payment_method')); $currency = Currency::from($request->string('currency', 'USD')); $combinedTariffName = $request->string('combined_tariff_name', 'Combined Cart Purchase'); $purchase = $this->purchaseFromCartService->createCombinedPurchaseFromCart( $userId, $paymentMethod, $currency, $combinedTariffName ); return response()->json([ 'message' => 'Combined purchase created successfully from cart', 'data' => $purchase, ], 201); } catch (\InvalidArgumentException $e) { return response()->json([ 'message' => $e->getMessage(), ], 422); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to create combined purchase from cart', 'error' => $e->getMessage(), ], 500); } } }