/
itp_practice
/
itp_backend
Обзор
Документация
Войти
/
itp_practice
/
itp_backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/Http/Controllers/CartController.php
226 строк
7 KB
vivanenko
cart
27 май 2025, 11:45
27 май 2025, 11:45
934cbb5
Код
Авторство
О чём код?
<?php namespace App\Http\Controllers; use App\DTOs\CartData; use App\Http\Requests\CartRequest; use App\Services\CartService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; class CartController extends Controller { public function __construct( private readonly CartService $cartService ) {} /** * Get current user's cart items */ public function index(Request $request): JsonResponse { try { $userId = $request->user()->id; $cartData = $this->cartService->getCartItems($userId); return response()->json([ 'message' => 'Cart retrieved successfully', 'data' => $cartData, ]); } catch (\InvalidArgumentException $e) { return response()->json([ 'message' => $e->getMessage(), ], 422); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to retrieve cart', 'error' => $e->getMessage(), ], 500); } } /** * Add tariff to cart */ public function store(CartRequest $request): JsonResponse { try { $data = CartData::fromRequest($request); $cartItem = $this->cartService->addTariffToCart($data); return response()->json([ 'message' => 'Tariff added to cart successfully', 'data' => $cartItem, ], 201); } catch (\InvalidArgumentException $e) { return response()->json([ 'message' => $e->getMessage(), ], 422); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to add tariff to cart', 'error' => $e->getMessage(), ], 500); } } /** * Update tariff quantity in cart */ public function update(CartRequest $request, int $tariffId): JsonResponse { try { $data = CartData::forUpdateQuantity( tariffId: $tariffId, quantity: $request->integer('quantity'), userId: $request->user()->id ); $cartSummary = $this->cartService->updateTariffQuantity($data); return response()->json([ 'message' => 'Cart updated successfully', 'data' => $cartSummary, ]); } catch (\InvalidArgumentException $e) { return response()->json([ 'message' => $e->getMessage(), ], 422); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to update cart', 'error' => $e->getMessage(), ], 500); } } /** * Remove tariff from cart */ public function destroy(Request $request, int $tariffId): JsonResponse { try { $userId = $request->user()->id; $removed = $this->cartService->removeTariffFromCart($userId, $tariffId); if (!$removed) { return response()->json([ 'message' => 'Tariff not found in cart', ], 404); } return response()->json([ 'message' => 'Tariff removed from cart successfully', ]); } catch (\InvalidArgumentException $e) { return response()->json([ 'message' => $e->getMessage(), ], 422); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to remove tariff from cart', 'error' => $e->getMessage(), ], 500); } } /** * Get cart summary (total, count, etc.) */ public function summary(Request $request): JsonResponse { try { $userId = $request->user()->id; $summary = $this->cartService->getCartSummary($userId); return response()->json([ 'message' => 'Cart summary retrieved successfully', 'data' => $summary, ]); } catch (\InvalidArgumentException $e) { return response()->json([ 'message' => $e->getMessage(), ], 422); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to retrieve cart summary', 'error' => $e->getMessage(), ], 500); } } /** * Clear user's cart */ public function clear(Request $request): JsonResponse { try { $userId = $request->user()->id; $cleared = $this->cartService->clearCart($userId); if (!$cleared) { return response()->json([ 'message' => 'Failed to clear cart', ], 500); } return response()->json([ 'message' => 'Cart cleared successfully', ]); } catch (\InvalidArgumentException $e) { return response()->json([ 'message' => $e->getMessage(), ], 422); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to clear cart', 'error' => $e->getMessage(), ], 500); } } /** * Get available tariffs for cart */ public function availableTariffs(): JsonResponse { try { $tariffs = $this->cartService->getAvailableTariffs(); return response()->json([ 'message' => 'Available tariffs retrieved successfully', 'data' => $tariffs, ]); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to retrieve available tariffs', 'error' => $e->getMessage(), ], 500); } } /** * Prepare cart for checkout */ public function checkout(Request $request): JsonResponse { try { $userId = $request->user()->id; $checkoutData = $this->cartService->prepareCartForCheckout($userId); return response()->json([ 'message' => 'Checkout data prepared successfully', 'data' => $checkoutData, ]); } catch (\InvalidArgumentException $e) { return response()->json([ 'message' => $e->getMessage(), ], 422); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to prepare checkout data', 'error' => $e->getMessage(), ], 500); } } }