48 lines
1.2 KiB
PHP
48 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Setting;
|
|
use Illuminate\Http\JsonResponse;
|
|
|
|
class VersionController extends Controller
|
|
{
|
|
public function __invoke(): JsonResponse
|
|
{
|
|
$composer = $this->readComposerMetadata();
|
|
$version = $composer['version'] ?? Setting::where('key', 'version')->value('value');
|
|
$build = $composer['build'] ?? Setting::where('key', 'build')->value('value');
|
|
|
|
return response()->json([
|
|
'version' => $version,
|
|
'build' => $build !== null ? (int) $build : null,
|
|
]);
|
|
}
|
|
|
|
private function readComposerMetadata(): array
|
|
{
|
|
$path = base_path('composer.json');
|
|
if (!is_file($path) || !is_readable($path)) {
|
|
return [];
|
|
}
|
|
|
|
$raw = file_get_contents($path);
|
|
if ($raw === false) {
|
|
return [];
|
|
}
|
|
|
|
$data = json_decode($raw, true);
|
|
if (!is_array($data)) {
|
|
return [];
|
|
}
|
|
|
|
$version = trim((string) ($data['version'] ?? ''));
|
|
$build = trim((string) ($data['build'] ?? ''));
|
|
|
|
return [
|
|
'version' => $version !== '' ? $version : null,
|
|
'build' => ctype_digit($build) ? (int) $build : null,
|
|
];
|
|
}
|
|
}
|