/
itp_practice
/
itp_backend
Обзор
Документация
Войти
/
itp_practice
/
itp_backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/Http/Controllers/OrderController.php
167 строк
5 KB
vivanenko
add purchase create from admin
29 май 2025, 11:13
29 май 2025, 11:13
25c496a
Код
Авторство
О чём код?
<?php namespace App\Http\Controllers; use App\Services\OrderService; use App\Http\Requests\CreateOrderRequest; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; /** * Контроллер для управления заказами */ class OrderController extends Controller { public function __construct( private OrderService $orderService ) {} /** * Создать заказ из корзины */ public function createFromCart(CreateOrderRequest $request): JsonResponse { try { $userId = Auth::id(); $data = $request->validated(); $orderData = [ 'metadata' => $data['metadata'] ?? null ]; if (isset($data['currency'])) { $orderData['currency'] = $data['currency']; } $result = $this->orderService->createOrderFromCart( userId: $userId, paymentGateway: $data['payment_gateway'] ?? 'freekassa_mock', orderData: $orderData, couponCode: $data['coupon_code'] ?? null ); return response()->json([ 'message' => 'Заказ успешно создан', 'data' => $result, ], 201); } catch (\InvalidArgumentException $e) { return response()->json([ 'message' => $e->getMessage(), ], 400); } catch (\Exception $e) { return response()->json([ 'message' => 'Ошибка создания заказа', 'error' => $e->getMessage(), ], 500); } } /** * Получить заказы пользователя */ public function index(Request $request): JsonResponse { try { $userId = Auth::id(); $page = (int) $request->get('page', 1); $perPage = min((int) $request->get('per_page', 10), 50); $result = $this->orderService->getUserOrders($userId, $page, $perPage); return response()->json([ 'message' => 'Заказы получены успешно', 'data' => $result['orders'], 'meta' => $result['meta'], ]); } catch (\Exception $e) { return response()->json([ 'message' => 'Ошибка получения заказов', 'error' => $e->getMessage(), ], 500); } } /** * Получить конкретный заказ */ public function show(int $orderId): JsonResponse { try { $userId = Auth::id(); $order = $this->orderService->getOrder($orderId, $userId); return response()->json([ 'message' => 'Заказ получен успешно', 'data' => $order, ]); } catch (\InvalidArgumentException $e) { return response()->json([ 'message' => $e->getMessage(), ], 404); } catch (\Exception $e) { return response()->json([ 'message' => 'Ошибка получения заказа', 'error' => $e->getMessage(), ], 500); } } /** * Отменить заказ */ public function cancel(int $orderId): JsonResponse { try { $userId = Auth::id(); $result = $this->orderService->cancelOrder($orderId, $userId); if (!$result) { return response()->json([ 'message' => 'Не удалось отменить заказ', ], 400); } return response()->json([ 'message' => 'Заказ успешно отменен', ]); } catch (\InvalidArgumentException $e) { return response()->json([ 'message' => $e->getMessage(), ], 400); } catch (\Exception $e) { return response()->json([ 'message' => 'Ошибка отмены заказа', 'error' => $e->getMessage(), ], 500); } } /** * Получить статистику заказов пользователя */ public function stats(): JsonResponse { try { $userId = Auth::id(); $stats = $this->orderService->getOrderStats($userId); return response()->json([ 'message' => 'Статистика получена успешно', 'data' => $stats, ]); } catch (\Exception $e) { return response()->json([ 'message' => 'Ошибка получения статистики', 'error' => $e->getMessage(), ], 500); } } }