2025-08-16 10:09:38 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers\Api\V1;
|
|
|
|
|
|
|
|
|
|
use Domains\Settings\Models\Language;
|
2025-08-16 10:47:50 +02:00
|
|
|
use Domains\Settings\Services\LanguageService;
|
2025-08-16 10:09:38 +02:00
|
|
|
use Illuminate\Http\JsonResponse;
|
2025-08-16 10:47:50 +02:00
|
|
|
use Illuminate\Http\Request;
|
2025-08-16 10:09:38 +02:00
|
|
|
|
|
|
|
|
class LanguagesController extends BaseController
|
|
|
|
|
{
|
2025-08-16 10:47:50 +02:00
|
|
|
public function __construct(
|
|
|
|
|
private LanguageService $languageService
|
|
|
|
|
) {}
|
|
|
|
|
|
2025-08-16 10:09:38 +02:00
|
|
|
/**
|
|
|
|
|
* Get languages available for route creation
|
|
|
|
|
* Returns languages that have both active feeds and active channels
|
|
|
|
|
*/
|
|
|
|
|
public function availableForRoutes(): JsonResponse
|
|
|
|
|
{
|
2025-08-16 10:47:50 +02:00
|
|
|
$languages = $this->languageService->getAvailableForRoutes();
|
2025-08-16 10:09:38 +02:00
|
|
|
|
|
|
|
|
return $this->sendResponse(
|
|
|
|
|
$languages,
|
|
|
|
|
'Available languages for routes retrieved successfully.'
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get feeds filtered by language
|
|
|
|
|
*/
|
2025-08-16 10:47:50 +02:00
|
|
|
public function feedsByLanguage(Request $request, int $languageId): JsonResponse
|
2025-08-16 10:09:38 +02:00
|
|
|
{
|
2025-08-16 10:47:50 +02:00
|
|
|
$fields = $this->parseFields($request->get('fields'), [
|
|
|
|
|
'feeds.id', 'feeds.name', 'feeds.url', 'feeds.type', 'feeds.provider'
|
|
|
|
|
]);
|
2025-08-16 10:09:38 +02:00
|
|
|
|
2025-08-16 10:47:50 +02:00
|
|
|
$feeds = $this->languageService->getFeedsByLanguage(
|
|
|
|
|
$languageId,
|
|
|
|
|
$request->get('search'),
|
|
|
|
|
(int) $request->get('per_page', 15),
|
|
|
|
|
$fields
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$language = Language::select(['name'])->findOrFail($languageId);
|
2025-08-16 10:09:38 +02:00
|
|
|
|
|
|
|
|
return $this->sendResponse(
|
|
|
|
|
$feeds,
|
|
|
|
|
"Feeds for language '{$language->name}' retrieved successfully."
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get channels filtered by language
|
|
|
|
|
*/
|
2025-08-16 10:47:50 +02:00
|
|
|
public function channelsByLanguage(Request $request, int $languageId): JsonResponse
|
2025-08-16 10:09:38 +02:00
|
|
|
{
|
2025-08-16 10:47:50 +02:00
|
|
|
$fields = $this->parseFields($request->get('fields'), [
|
|
|
|
|
'id', 'platform_instance_id', 'name', 'display_name', 'description', 'language_id'
|
|
|
|
|
]);
|
2025-08-16 10:09:38 +02:00
|
|
|
|
2025-08-16 10:47:50 +02:00
|
|
|
$channels = $this->languageService->getChannelsByLanguage(
|
|
|
|
|
$languageId,
|
|
|
|
|
$request->get('search'),
|
|
|
|
|
(int) $request->get('per_page', 15),
|
|
|
|
|
$fields
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$language = Language::select(['name'])->findOrFail($languageId);
|
2025-08-16 10:09:38 +02:00
|
|
|
|
|
|
|
|
return $this->sendResponse(
|
|
|
|
|
$channels,
|
|
|
|
|
"Channels for language '{$language->name}' retrieved successfully."
|
|
|
|
|
);
|
|
|
|
|
}
|
2025-08-16 10:47:50 +02:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 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;
|
|
|
|
|
}
|
2025-08-16 10:09:38 +02:00
|
|
|
}
|