Files

70 lines
2.3 KiB
PHP

<?php
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use App\Models\Setting;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
/**
* @group Mobile App Config
*
* Public endpoint for mobile app version checks and maintenance status.
*/
class AppConfigController extends Controller
{
/**
* Get App Config
*
* Returns version info and maintenance status for the given platform.
*
* @unauthenticated
* @queryParam platform string The platform (android|ios). Defaults to android.
*/
public function __invoke(Request $request): JsonResponse
{
$platform = $request->input('platform', 'android');
if (!\in_array($platform, ['android', 'ios'], true)) {
$platform = 'android';
}
$settings = Cache::get('system_settings', function () {
try {
return Setting::pluck('value', 'key')->toArray();
} catch (\Throwable) {
return [];
}
});
if ($platform === 'android') {
$maintenance = filter_var($settings['android_maintenance_mode'] ?? false, FILTER_VALIDATE_BOOLEAN);
if ($maintenance) {
return response()->json([
'maintenance' => true,
'message' => 'The app is temporarily under maintenance. Please try again later.',
], 503);
}
return response()->json([
'maintenance' => false,
'latest_version' => $settings['android_latest_version'] ?? '1.0.0',
'min_version' => $settings['android_min_version'] ?? '1.0.0',
'store_url' => $settings['android_playstore_url'] ?? null,
'platform' => 'android',
]);
}
// ios — placeholder using same pattern, expandable when ios settings are added
return response()->json([
'maintenance' => false,
'latest_version' => $settings['ios_latest_version'] ?? '1.0.0',
'min_version' => $settings['ios_min_version'] ?? '1.0.0',
'store_url' => $settings['ios_appstore_url'] ?? null,
'platform' => 'ios',
]);
}
}