languageService->getAvailableForRoutes(); return $this->sendResponse( $languages, 'Available languages for routes retrieved successfully.' ); } /** * Get feeds filtered by language */ public function feedsByLanguage(Request $request, int $languageId): JsonResponse { $fields = $this->parseFields($request->get('fields'), [ 'feeds.id', 'feeds.name', 'feeds.url', 'feeds.type', 'feeds.provider' ]); $feeds = $this->languageService->getFeedsByLanguage( $languageId, $request->get('search'), (int) $request->get('per_page', 15), $fields ); $language = Language::select(['name'])->findOrFail($languageId); return $this->sendResponse( $feeds, "Feeds for language '{$language->name}' retrieved successfully." ); } /** * Get channels filtered by language */ public function channelsByLanguage(Request $request, int $languageId): JsonResponse { $fields = $this->parseFields($request->get('fields'), [ 'id', 'platform_instance_id', 'name', 'display_name', 'description', 'language_id' ]); $channels = $this->languageService->getChannelsByLanguage( $languageId, $request->get('search'), (int) $request->get('per_page', 15), $fields ); $language = Language::select(['name'])->findOrFail($languageId); return $this->sendResponse( $channels, "Channels for language '{$language->name}' retrieved successfully." ); } /** * Get language statistics */ public function statistics(int $languageId): JsonResponse { $stats = $this->languageService->getLanguageStatistics($languageId); $language = Language::select(['name'])->findOrFail($languageId); return $this->sendResponse( $stats, "Statistics for language '{$language->name}' retrieved successfully." ); } /** * Get usage summary for all languages */ public function usageSummary(): JsonResponse { $summary = $this->languageService->getLanguageUsageSummary(); return $this->sendResponse( $summary, 'Language usage summary retrieved successfully.' ); } /** * Get common languages between feed and channel */ public function commonLanguages(Request $request): JsonResponse { $request->validate([ 'feed_id' => 'required|exists:feeds,id', 'channel_id' => 'required|exists:platform_channels,id' ]); $commonLanguages = $this->languageService->getCommonLanguages( $request->get('feed_id'), $request->get('channel_id') ); return $this->sendResponse( $commonLanguages, 'Common languages retrieved successfully.' ); } /** * Parse field selection from request */ private function parseFields(?string $fieldsParam, array $defaultFields): array { if (!$fieldsParam) { return $defaultFields; } $requestedFields = array_map('trim', explode(',', $fieldsParam)); $validFields = []; foreach ($requestedFields as $field) { if (in_array($field, $defaultFields) || str_contains($field, '.')) { $validFields[] = $field; } } return empty($validFields) ? $defaultFields : $validFields; } }