/
itp_practice
/
itp_backend
Обзор
Документация
Войти
/
itp_practice
/
itp_backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/Http/Controllers/TariffController.php
221 строка
8 KB
vivanenko
fix subscriptions (tariffs info)
29 май 2025, 14:40
29 май 2025, 14:40
1a5f584
Код
Авторство
О чём код?
<?php namespace App\Http\Controllers; use App\Http\Resources\TariffResource; use App\Models\Tariff; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; class TariffController extends Controller { /** * Get all active tariffs */ public function index(Request $request): JsonResponse { try { $tariffs = Tariff::query()->where('is_active', true); if (!$request->has('all')) { // Получаем только родительские тарифы с их дочерними и связанными tap_apps $tariffs = $tariffs->whereNull('parent_id') ->with([ 'children.tapApps' => function ($query) { $query->where('is_active', true); }, 'tapApps' => function ($query) { $query->where('is_active', true); } ]) ->orderBy('price', 'asc'); } else { // Получаем все тарифы с tap_apps $tariffs = $tariffs->with([ 'tapApps' => function ($query) { $query->where('is_active', true); } ]) ->orderBy('parent_id', 'asc') ->orderBy('price', 'asc'); } $tariffs = $tariffs->get(); return response()->json([ 'message' => 'Tariffs retrieved successfully', 'data' => TariffResource::collection($tariffs), ]); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to retrieve tariffs', 'error' => $e->getMessage(), ], 500); } } /** * Get specific tariff by ID */ public function show(int $id): JsonResponse { try { $tariff = Tariff::where('id', $id) ->where('is_active', true) ->with([ 'tapApps' => function ($query) { $query->where('is_active', true); }, 'children.tapApps' => function ($query) { $query->where('is_active', true); } ]) ->first(); if (!$tariff) { return response()->json([ 'message' => 'Tariff not found or inactive', ], 404); } return response()->json([ 'message' => 'Tariff retrieved successfully', 'data' => new TariffResource($tariff), ]); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to retrieve tariff', 'error' => $e->getMessage(), ], 500); } } /** * Get tariffs grouped by price range */ public function byPriceRange(Request $request): JsonResponse { $request->validate([ 'min_price' => 'numeric|min:0', 'max_price' => 'numeric|min:0|gte:min_price', ]); try { $query = Tariff::where('is_active', true); if ($request->has('min_price')) { $query->where('price', '>=', $request->get('min_price')); } if ($request->has('max_price')) { $query->where('price', '<=', $request->get('max_price')); } $tariffs = $query->with([ 'tapApps' => function ($query) { $query->where('is_active', true); } ]) ->orderBy('price', 'asc') ->get(); return response()->json([ 'message' => 'Tariffs retrieved successfully', 'data' => TariffResource::collection($tariffs), 'filters' => [ 'min_price' => $request->get('min_price'), 'max_price' => $request->get('max_price'), ], ]); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to retrieve tariffs', 'error' => $e->getMessage(), ], 500); } } /** * Get tariffs by duration range */ public function byDuration(Request $request): JsonResponse { $request->validate([ 'min_days' => 'integer|min:1', 'max_days' => 'integer|min:1|gte:min_days', ]); try { $query = Tariff::where('is_active', true); if ($request->has('min_days')) { $query->where('duration_days', '>=', $request->get('min_days')); } if ($request->has('max_days')) { $query->where('duration_days', '<=', $request->get('max_days')); } $tariffs = $query->with([ 'tapApps' => function ($query) { $query->where('is_active', true); } ]) ->orderBy('duration_days', 'asc') ->get(); return response()->json([ 'message' => 'Tariffs retrieved successfully', 'data' => TariffResource::collection($tariffs), 'filters' => [ 'min_days' => $request->get('min_days'), 'max_days' => $request->get('max_days'), ], ]); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to retrieve tariffs', 'error' => $e->getMessage(), ], 500); } } /** * Search tariffs by name or description */ public function search(Request $request): JsonResponse { $request->validate([ 'query' => 'required|string|min:1|max:255', ]); try { $searchQuery = $request->get('query'); $tariffs = Tariff::where('is_active', true) ->where(function ($query) use ($searchQuery) { $query->where('name', 'like', "%{$searchQuery}%") ->orWhere('description', 'like', "%{$searchQuery}%"); }) ->with([ 'tapApps' => function ($query) { $query->where('is_active', true); } ]) ->orderBy('price', 'asc') ->get(); return response()->json([ 'message' => 'Tariffs search completed', 'data' => TariffResource::collection($tariffs), 'search_query' => $searchQuery, 'results_count' => $tariffs->count(), ]); } catch (\Exception $e) { return response()->json([ 'message' => 'Failed to search tariffs', 'error' => $e->getMessage(), ], 500); } } }